Changeset 2915 in Sophya
- Timestamp:
- Feb 22, 2006, 7:17:30 PM (20 years ago)
- Location:
- trunk/SophyaLib/TArray
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/TArray/tarray.cc
r2888 r2915 424 424 /*! 425 425 \param rx,ry,rz,rt,ru : range of extraction along dimensions 426 \sa Range426 \sa SOPHYA::Range 427 427 */ 428 428 template <class T> … … 432 432 throw RangeCheckError("TArray<T>::operator () (Range, ...) - Not Allocated Array ! "); 433 433 int_4 ndim = 0; 434 435 // Updating Range objects using actual array size 436 rx.Update(SizeX()); 437 ry.Update(SizeY()); 438 rz.Update(SizeZ()); 439 if (NbDimensions() > 3) rt.Update(Size(3)); 440 else rt.Update(0); 441 if (NbDimensions() > 4) ru.Update(Size(4)); 442 else ru.Update(0); 443 434 444 sa_size_t size[BASEARRAY_MAXNDIMS]; 435 445 sa_size_t step[BASEARRAY_MAXNDIMS]; -
trunk/SophyaLib/TArray/tarray.h
r2888 r2915 77 77 TArray<T> SubArray(Range rx, Range ry, Range rz, Range rt, Range ru) const ; 78 78 79 //! () operator for Sub arrays extraction 80 /*! \sa SubArray */ 79 //! Extract the first 3D subarray specified by rx, ry, rz. (see SubArray() ) 81 80 inline TArray<T> operator () (Range rx, Range ry, Range rz) const 82 { return SubArray(rx, ry, rz, Range(0), Range(0)); } 81 { return SubArray(rx, ry, rz, Range::first(), Range::first()); } 82 //! Extract the first 4D subarray specified by rx, ry, rz. (see SubArray() ) 83 83 inline TArray<T> operator () (Range rx, Range ry, Range rz, Range rt) const 84 { return SubArray(rx, ry, rz, rt, Range(0)); } 84 { return SubArray(rx, ry, rz, rt, Range::first()); } 85 //! Extract the subarray specified by rx, ry, rz. (see SubArray() ) 85 86 inline TArray<T> operator () (Range rx, Range ry, Range rz, Range rt, Range ru) const 86 87 { return SubArray(rx, ry, rz, rt, ru); } -
trunk/SophyaLib/TArray/tmatrix.cc
r2868 r2915 1 // $Id: tmatrix.cc,v 1.3 3 2006-01-03 14:17:46ansari Exp $1 // $Id: tmatrix.cc,v 1.34 2006-02-22 18:17:30 ansari Exp $ 2 2 // C.Magneville 04/99 3 3 #include "sopnamsp.h" … … 249 249 TMatrix<T> TMatrix<T>::SubMatrix(Range rline, Range rcol) const 250 250 { 251 Range rx, ry; 251 Range rx=Range::first(); 252 Range ry=Range::first(); 252 253 short mm = GetMemoryMapping(); 253 254 if (mm == CMemoryMapping) { rx = rcol; ry = rline; } 254 255 else { ry = rcol; rx = rline; } 255 TMatrix sm(SubArray(rx, ry, Range (0), Range(0), Range(0)),true);256 TMatrix sm(SubArray(rx, ry, Range::first(), Range::first(), Range::first()), true); 256 257 sm.UpdateMemoryMapping(mm); 257 258 return(sm); -
trunk/SophyaLib/TArray/tvector.cc
r2868 r2915 1 // $Id: tvector.cc,v 1.2 0 2006-01-03 14:17:46ansari Exp $1 // $Id: tvector.cc,v 1.21 2006-02-22 18:17:30 ansari Exp $ 2 2 // C.Magneville 04/99 3 3 #include "sopnamsp.h" … … 188 188 TVector<T> TVector<T>::SubVector(Range relt) const 189 189 { 190 Range rr, cr; 190 Range rr=Range::first(); 191 Range cr=Range::first(); 191 192 if (GetVectorType() == ColumnVector ) rr = relt; 192 193 else cr = relt; -
trunk/SophyaLib/TArray/utilarr.cc
r2795 r2915 313 313 \class SOPHYA::Range 314 314 \ingroup TArray 315 Class to define a range of indexes 316 */ 317 318 //! Constructor 319 /*! 320 Define a range of indexes 315 Class to define a range of indices, to be used with TArra<T> TMatrix<T> TVector<T> ... 316 */ 317 318 /*! 319 Constructor defining defining the range of indices, starting from \b start to the last. 320 \param start : start index (inclusive) 321 */ 322 Range::Range(sa_size_t start) 323 { 324 start_ = start; 325 end_ = Range::lastIndex(); 326 size_ = 0; 327 step_ = 1; 328 } 329 330 /*! 331 Constructor defining defining the range of indices, from \b start to \b end 321 332 \param start : start index (inclusive) 322 333 \param end : end index (inclusive) 323 \param size : size (number of elements, used if end \<= start) 324 \param step : step (or stride) 325 326 \warning If \b end \> \b start, \b size is computed automatically 327 \warning If not \b size is fixed and \b end recomputed 334 */ 335 Range::Range(sa_size_t start, sa_size_t end) 336 { 337 start_ = start; 338 end_ = end; 339 if (end >= start) size_ = end-start+1; 340 else size_ = 0; 341 step_ = 1; 342 } 343 344 /*! 345 Constructor defining defining the range of indices, from \b start to \b end 346 \param start : start index (inclusive) 347 \param end : end index (inclusive) 348 \param step : step (or stride) = index increment 349 */ 350 Range::Range(sa_size_t start, sa_size_t end, sa_size_t step) 351 { 352 start_ = start; 353 end_ = end; 354 step_ = (step > 0) ? step : 1; 355 if (step < 1) step = 1; 356 if (end >= start) 357 size_ = (end-start)/step_+1; 358 else size_ = 0; 359 } 360 361 /*! 362 Define a range of indices 363 \param start : start index (inclusive) 364 \param end : end index (inclusive, used if size \<= 0 and end \>= start) 365 \param size : size (number of elements, used if \>= 1 ) 366 \param step : step (or stride) = index increment 367 368 \warning If \b size \>= 1 , \b end index computed automatically. 369 If \b size \< 1 and \b end < \b start , equivalent to \b end = Range()::lastIndex() 328 370 */ 329 371 Range::Range(sa_size_t start, sa_size_t end, sa_size_t size, sa_size_t step) … … 331 373 start_ = start; 332 374 step_ = (step > 0) ? step : 1; 333 if (end > start) { // Taille calcule automatiquement 334 end_ = end; 335 if (step_ > ((end_-start_)+1)) size_ = 1; 336 else size_ = ((end-start)+1)/step_; 337 } 338 else { // Taille fixee 375 if (size > 0) { // Nb d'elements fixe 339 376 size_ = size; 340 end_ = start_+size_*step_; 341 } 377 if (end == Range::lastIndex()) start_ = end_ = end; 378 else end_ = start_+size_*step_; 379 } 380 else { 381 if (end >= start) { // Indice de fin fixe 382 end_ = end; 383 size_ = (end-start)/step_+1; 384 } 385 else { // rien fixe 386 size_ = 0; 387 end_ = Range::lastIndex(); 388 } 389 } 390 } 391 392 /* 393 Range::Range(Range const& a) 394 { 395 start_ = a.start_; 396 end_ = a.end_; 397 size_ = a.size_; 398 step_ = a.step_; 399 } 400 */ 401 402 /*! 403 This method is called to recompute index ranges, specifying the original array size 404 by the TArray<T> (or derived classes) sub array extraction methods 405 */ 406 void Range::Update(sa_size_t osz) 407 { 408 if (end_ >= 0) return; 409 if (osz == 0) { 410 start_ = end_ = 0; 411 size_ = step_ = 1; 412 return; 413 } 414 if (end_ == start_) { 415 end_ = osz-1; 416 if ((size_ > 0) && (size_ <= osz/step_)) 417 start_ = end_ - size_*step_; 418 else { 419 start_ = end_; 420 size_ = 1; 421 } 422 } 423 else { 424 end_ = osz-1; 425 size_ = (end_-start_)/step_+1; 426 } 427 return; 342 428 } 343 429 -
trunk/SophyaLib/TArray/utilarr.h
r2286 r2915 128 128 class Range { 129 129 public: 130 explicit Range(sa_size_t start=0, sa_size_t end=0, sa_size_t size=1, sa_size_t step=1); 130 //! Index range start \<= index \<= last() 131 Range(sa_size_t start); 132 //! Index range start \<= index \<= end 133 Range(sa_size_t start, sa_size_t end); 134 //! Index range start \<= index \<= end with increment step 135 Range(sa_size_t start, sa_size_t end, sa_size_t step); 136 //! General Index range specification, using size or start/end and increment 137 Range(sa_size_t start, sa_size_t end, sa_size_t size, sa_size_t step); 131 138 //! Return the start index 132 139 inline sa_size_t & Start() { return start_; } … … 137 144 //! Return the step 138 145 inline sa_size_t & Step() { return step_; } 146 //! return a constant value defining the first element 147 inline static sa_size_t firstIndex() { return 0; } 148 //! return a constant value as a placeholder for the last valid index 149 inline static sa_size_t lastIndex() { return -1; } 150 //! return a Range object specifing all indices, from first to last 151 inline static Range all() 152 { return Range(Range::firstIndex() , Range::lastIndex()); } 153 //! return a Range object specifing the first index 154 inline static Range first() 155 { return Range(Range::firstIndex() , Range::lastIndex(), 1, 1); } 156 //! return a Range object specifing the last valid index 157 inline static Range last() 158 { return Range(Range::lastIndex() , Range::lastIndex(), 1, 1); } 159 160 //! For internal TArray module use. 161 void Update(sa_size_t osz); 162 139 163 protected: 140 164 sa_size_t start_; //!< start index
Note:
See TracChangeset
for help on using the changeset viewer.