Changeset 2752 in Sophya for trunk/SophyaLib/TArray/tmatrix.cc
- Timestamp:
- May 23, 2005, 6:18:17 PM (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/TArray/tmatrix.cc
r2615 r2752 1 // $Id: tmatrix.cc,v 1. 29 2004-09-10 09:55:07 cmvExp $1 // $Id: tmatrix.cc,v 1.30 2005-05-23 16:18:17 ansari Exp $ 2 2 // C.Magneville 04/99 3 3 #include "sopnamsp.h" 4 4 #include "machdefs.h" 5 #include <iostream> 6 #include <iomanip> 5 7 #include <stdio.h> 6 8 #include <stdlib.h> … … 102 104 103 105 //! Constructor of a matrix from a TArray \b a 104 template <class T>105 TMatrix<T>::TMatrix(const TArray<T>& a)106 : TArray<T>(a)107 {108 if (a.NbDimensions() > 2)109 throw SzMismatchError("TMatrix<T>::TMatrix(const TArray<T>& a) a.NbDimensions()>2 ");110 if (a.NbDimensions() == 1) {111 size_[1] = 1;112 step_[1] = size_[0]*step_[0];113 ndim_ = 2;114 }115 arrtype_ = 1; // Type = Matrix116 UpdateMemoryMapping(a, SameMemoryMapping);117 }118 119 //! Constructor of a matrix from a TArray \b a120 106 /*! 121 107 \param a : TArray to be copied or shared 122 108 \param share : if true, share data. If false copy data 123 \param mm : define the memory mapping type 124 */ 125 template <class T> 126 TMatrix<T>::TMatrix(const TArray<T>& a, bool share, short mm ) 109 */ 110 template <class T> 111 TMatrix<T>::TMatrix(const TArray<T>& a, bool share) 127 112 : TArray<T>(a, share) 128 113 { … … 135 120 } 136 121 arrtype_ = 1; // Type = Matrix 137 UpdateMemoryMapping(a, mm);122 UpdateMemoryMapping(a, SameMemoryMapping); 138 123 } 139 124 … … 264 249 TMatrix<T> TMatrix<T>::SubMatrix(Range rline, Range rcol) const 265 250 { 251 Range rx, ry; 266 252 short mm = GetMemoryMapping(); 267 Range rx, ry;268 253 if (mm == CMemoryMapping) { rx = rcol; ry = rline; } 269 254 else { ry = rcol; rx = rline; } 270 TMatrix sm(SubArray(rx, ry, Range(0), Range(0), Range(0)),true , mm);255 TMatrix sm(SubArray(rx, ry, Range(0), Range(0), Range(0)),true); 271 256 sm.UpdateMemoryMapping(mm); 272 257 return(sm); … … 389 374 if (maxprt < 0) maxprt = max_nprt_; 390 375 sa_size_t npr = 0; 376 377 // keep stream's io flags 378 ios_base::fmtflags ioflg = os.flags(); 379 os << right ; 380 391 381 Show(os, si); 392 382 if (ndim_ < 1) return; 383 // Calcul de la largeur d'impression pour chaque element 384 int fprtw = os.precision()+7; 385 int prtw = 5; 386 387 if ( (typeid(T) == typeid( int_4 )) || (typeid(T) == typeid( uint_4 )) ) prtw = 8; 388 else if ( (typeid(T) == typeid( int_8 )) || (typeid(T) == typeid( uint_8 )) ) prtw = 11; 389 else if ( typeid(T) == typeid( r_4 ) ) prtw = fprtw; 390 else if ( typeid(T) == typeid( r_8 ) ) prtw = fprtw; 391 else if ( typeid(T) == typeid(complex<r_4>) ) prtw = fprtw; 392 else if ( typeid(T) == typeid(complex<r_8>) ) prtw = fprtw; 393 393 394 sa_size_t kc,kr; 394 395 for(kr=0; kr<size_[marowi_]; kr++) { … … 396 397 for(kc=0; kc<size_[macoli_]; kc++) { 397 398 if(kc > 0) os << " "; 398 os << (*this)(kr, kc); npr++;399 os << setw(prtw) << (*this)(kr, kc); npr++; 399 400 if (npr >= (sa_size_t) maxprt) { 400 401 if (npr < totsize_) os << "\n .... " << endl; return; … … 404 405 } 405 406 os << endl; 407 os.flags(ioflg); // reset stream io flags 406 408 } 407 409
Note:
See TracChangeset
for help on using the changeset viewer.