Changeset 785 in Sophya for trunk/SophyaLib/TArray/tarray.h


Ignore:
Timestamp:
Mar 16, 2000, 7:36:24 PM (26 years ago)
Author:
ansari
Message:

Corrections,amelioration de TArray<T> - Reza 16/3/2000

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaLib/TArray/tarray.h

    r772 r785  
    1414#include "ndatablock.h"
    1515#include "dvlist.h"
     16#include "utilarr.h"
    1617
    1718
     
    2021
    2122namespace SOPHYA {
    22 
    23 /* Quelques utilitaires */
    24 typedef double (* Arr_DoubleFunctionOfX) (double x);
    25 typedef float  (* Arr_FloatFunctionOfX)  (float x);
    26 
    27 class Sequence {
    28 public:
    29   Sequence (double start=0., double step=1.);
    30   inline double & Start() { return start_; }
    31   inline double & Step() { return step_; }
    32   inline double operator () (uint_4 k) { return(start_+(double)k*step_); }
    33 protected:
    34   double start_, step_;
    35 };
    3623
    3724// Forward declaration
     
    5643  virtual TArray<T>& operator = (const TArray<T>& a);
    5744
    58   // Extraction de sous-tableau
    59   virtual TArray<T> SubArray(uint_4 ndim, uint_4 * siz, uint_4 * pos);
    6045
    6146  // Gestion taille/Remplissage
     
    6550  // Returns true if ndim and sizes are equal
    6651  virtual bool CompareSizes(const TArray<T>& a);
    67  
     52  // Compacts size=1 array dimensions
     53  virtual TArray<T>& CompactDim();
     54
    6855  // Array dimensions
    6956  inline uint_4 NbDimensions() const { return( ndim_ ); }
     
    7562  inline uint_4 Size(int ka) const { return(size_[CheckDI(ka,1)]); }
    7663
     64  uint_4 MaxSizeKA() const ;
     65
    7766  // memory organisation - packing information
    78   inline bool   IsPacked() const { return(minstep_ == 1); }
     67  inline bool   IsPacked() const { return(moystep_ == 1); }
    7968  inline bool   IsPackedX() const { return(step_[0] == 1); }
    8069  inline bool   IsPackedY() const { return(step_[1] == 1); }
     
    8271  inline bool   IsPacked(int ka) const { return(step_[CheckDI(ka,2)] == 1); }
    8372
    84   inline uint_4 Step() const  { return(minstep_); }
     73  inline uint_4 MinStep() const  { return(minstep_); }
     74  inline uint_4 AvgStep() const  { return(moystep_); }
    8575  inline uint_4 StepX() const { return(step_[0]); }
    8676  inline uint_4 StepZ() const { return(step_[1]); }
     
    8878  inline uint_4 Step(int ka) const { return(step_[CheckDI(ka,3)]); }
    8979
    90   inline uint_8 Offset() const { return(offset_); }
     80  uint_4 MinStepKA() const ;
     81
     82  uint_8 Offset(uint_8 ip=0) const ;
    9183
    9284
     
    9486  inline bool   IsTemp(void) const {return mNDBlock.IsTemp();}
    9587  inline void   SetTemp(bool temp=false) const {mNDBlock.SetTemp(temp);}
     88
     89  // SubArrays
     90  virtual TArray<T> operator () (Range rx, Range ry, Range rz=0, Range rt=0, Range ru=0);
    9691
    9792  // Acces to data
     
    10095  inline T const& operator()(uint_4 ix, uint_4 iy, uint_4 iz, uint_4 it, uint_4 iu=0) const ;
    10196  inline T&       operator()(uint_4 ix, uint_4 iy, uint_4 iz, uint_4 it, uint_4 iu=0);
    102   inline T const& operator[](uint_4 ip) const ;
    103   inline T&       operator[](uint_4 ip);
     97  inline T const& operator[](uint_8 ip) const ;
     98  inline T&       operator[](uint_8 ip);
    10499
    105100  inline T const& Elem(uint_4 ix, uint_4 iy, uint_4 iz, uint_4 it=0, uint_4 iu=0) const ;
     
    117112  inline operator T();
    118113// Met les elements a une suite de valeurs
    119   virtual TArray<T>&  operator = (Sequence & seq);
     114  virtual TArray<T>&  operator = (Sequence seq);
    120115// A = x (tous les elements a x)
    121116  virtual TArray<T>&  operator = (T x);
     
    162157  // Share: partage les donnees de "a"
    163158  void Share(const TArray<T>& a);
     159  // Extraction de sous-tableau
     160  virtual void SubArray(TArray<T> & ra, uint_4 ndim, uint_4 * siz, uint_4 * pos, uint_4 * step);
    164161
    165162  uint_4 ndim_;                   // nb of dimensions
     
    168165  uint_4 step_[TARRAY_MAXNDIMS];     // two consecutive elements distance in a given dimension
    169166  uint_4 minstep_;                   // minimal step (in any axes)
     167  uint_4 moystep_;                   // mean step 0 non regular steps
    170168  uint_8 offset_;              // global offset -> position of elem[0] in DataBlock
    171169  NDataBlock<T> mNDBlock;      // Le bloc des donnees
     
    254252}
    255253
     254
    256255// --------------------------------------------------
    257256//        inline element acces methods
     
    329328}
    330329
    331 template <class T>
    332 inline T const& TArray<T>::operator[](uint_4 ip) const
     330
     331template <class T>
     332inline T const& TArray<T>::operator[](uint_8 ip) const
    333333{
    334334#ifdef SO_BOUNDCHECKING
    335335  if (ip >= totsize_)  throw( ParmError("TArray<T>::operator[] Out-of-bound Error") );
    336336#endif
    337 return *(mNDBlock.Begin()+offset_+ip*minstep_);
    338 }
    339 
    340 template <class T>
    341 inline T & TArray<T>::operator[](uint_4 ip)
     337return *(mNDBlock.Begin()+Offset(ip));
     338}
     339
     340template <class T>
     341inline T & TArray<T>::operator[](uint_8 ip)
    342342{
    343343#ifdef SO_BOUNDCHECKING
    344344  if (ip >= totsize_)  throw( ParmError("TArray<T>::operator[] Out-of-bound Error") );
    345345#endif
    346 return *(mNDBlock.Begin()+offset_+ip*minstep_);
    347 }
     346return *(mNDBlock.Begin()+Offset(ip));
     347}
     348
    348349
    349350template <class T>
Note: See TracChangeset for help on using the changeset viewer.