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


Ignore:
Timestamp:
Mar 20, 2000, 7:22:49 PM (26 years ago)
Author:
ansari
Message:

Introduction de BaseArray comme classe parente de TArray<T>
Separation des operations math (fonctions) ds la classe MathArr<T>

Reza 20/3/2000

File:
1 edited

Legend:

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

    r785 r787  
    99#include <math.h>
    1010#include <iostream.h>
     11#include "basarr.h"
    1112#include "ndatablock.h"
    1213#include <complex>
    13 #include "anydataobj.h"
    14 #include "ndatablock.h"
    15 #include "dvlist.h"
    1614#include "utilarr.h"
    1715
    18 
    19 //  Maximum number of dimensions for array
    20 #define TARRAY_MAXNDIMS  5
    2116
    2217namespace SOPHYA {
     
    2520template <class T> class FIO_TArray;
    2621
    27 //   ------------ classe template Array -----------
    28 template <class T>
    29 class TArray : public AnyDataObj {
     22//   --------------------------- classe template Array -----------------------
     23//  ( See BaseArray class for data organisation in  memory and related methods )
     24
     25template <class T>
     26class TArray : public BaseArray {
    3027public:
    3128  // Creation / destruction
     
    4340  virtual TArray<T>& operator = (const TArray<T>& a);
    4441
    45 
    4642  // Gestion taille/Remplissage
    4743  virtual void Clone(const TArray<T>& a);
    4844  virtual void ReSize(uint_4 ndim, uint_4 * siz, uint_4 step=1);
    4945  virtual void Realloc(uint_4 ndim, uint_4 * siz, uint_4 step=1, bool force=false);
    50   // Returns true if ndim and sizes are equal
    51   virtual bool CompareSizes(const TArray<T>& a);
     46
    5247  // Compacts size=1 array dimensions
    53   virtual TArray<T>& CompactDim();
    54 
    55   // Array dimensions
    56   inline uint_4 NbDimensions() const { return( ndim_ ); }
    57 
    58   inline uint_8 Size() const { return(totsize_); }
    59   inline uint_4 SizeX() const { return(size_[0]); }
    60   inline uint_4 SizeY() const { return(size_[1]); }
    61   inline uint_4 SizeZ() const { return(size_[2]); }
    62   inline uint_4 Size(int ka) const { return(size_[CheckDI(ka,1)]); }
    63 
    64   uint_4 MaxSizeKA() const ;
    65 
    66   // memory organisation - packing information
    67   inline bool   IsPacked() const { return(moystep_ == 1); }
    68   inline bool   IsPackedX() const { return(step_[0] == 1); }
    69   inline bool   IsPackedY() const { return(step_[1] == 1); }
    70   inline bool   IsPackedZ() const { return(step_[2] == 1); }
    71   inline bool   IsPacked(int ka) const { return(step_[CheckDI(ka,2)] == 1); }
    72 
    73   inline uint_4 MinStep() const  { return(minstep_); }
    74   inline uint_4 AvgStep() const  { return(moystep_); }
    75   inline uint_4 StepX() const { return(step_[0]); }
    76   inline uint_4 StepZ() const { return(step_[1]); }
    77   inline uint_4 StepY() const { return(step_[2]); }
    78   inline uint_4 Step(int ka) const { return(step_[CheckDI(ka,3)]); }
    79 
    80   uint_4 MinStepKA() const ;
    81 
    82   uint_8 Offset(uint_8 ip=0) const ;
    83 
    84 
    85   // Temporaire?
    86   inline bool   IsTemp(void) const {return mNDBlock.IsTemp();}
    87   inline void   SetTemp(bool temp=false) const {mNDBlock.SetTemp(temp);}
     48  virtual TArray<T>& CompactAllDimensions();
     49  virtual TArray<T>& CompactTrailingDimensions();
    8850
    8951  // SubArrays
    9052  virtual TArray<T> operator () (Range rx, Range ry, Range rz=0, Range rt=0, Range ru=0);
    9153
    92   // Acces to data
     54
     55  // ---- Access to data
     56  // Definition of virtual element acces method inherited from BaseArray class
     57  virtual double ValueAtPosition(uint_8 ip) const;
     58
     59  // Data Access: operator overloaded inline acces methods
    9360  inline T const& operator()(uint_4 ix, uint_4 iy, uint_4 iz) const ;
    9461  inline T&       operator()(uint_4 ix, uint_4 iy, uint_4 iz);
     
    10875  inline const  NDataBlock<T>& DataBlock() const {return mNDBlock;}
    10976
     77  // Temporaire?
     78  inline bool   IsTemp(void) const {return mNDBlock.IsTemp();}
     79  inline void   SetTemp(bool temp=false) const {mNDBlock.SetTemp(temp);}
     80
    11081// Operations diverses  = , +=, ...
    11182// Conversion en type T, if Size() == 1
    112   inline operator T();
     83  inline T toScalar();
    11384// Met les elements a une suite de valeurs
    11485  virtual TArray<T>&  operator = (Sequence seq);
     
    12394  virtual TArray<T>&  operator += (const TArray<T>& a);
    12495  virtual TArray<T>&  operator -= (const TArray<T>& a);
    125 // Multilication, division element par element les deux tableaux
     96// Multiplication, division element par element les deux tableaux
    12697  virtual TArray<T>&  MultElt(const TArray<T>& a);
    12798  virtual TArray<T>&  DivElt(const TArray<T>& a);
    12899
    129 // Application d'une fonction
    130   virtual TArray<T>&  ApplyFunction(Arr_DoubleFunctionOfX f);
    131   virtual TArray<T>&  ApplyFunction(Arr_FloatFunctionOfX f);
    132 
    133100// Impression, I/O, ...
    134   static void   SetMaxPrint(uint_4 nprt=50);   
    135   void          Show(ostream& os, bool si=false) const;
    136   inline void   Show() const { Show(cout); }
    137   void          Print(ostream& os, int_4 maxprt=-1, bool si=false) const ;
    138 
    139 //  Objet DVList info
    140   DVList&       Info();
     101  virtual string DataType() const;   // definition of abstract method inherited from BaseArray
     102  virtual void  Print(ostream& os, int_4 maxprt=-1, bool si=false) const ;
    141103
    142104//  Pour la gestion de persistance
     
    144106
    145107protected:
    146   // Verifie la compatibilite de l'index de dimension
    147   inline int CheckDI(int ka, int msg) const ;
    148   // Verifie la compatibilite des bornes d'index
    149   inline void CheckBound(int ix, uint_4 iy, uint_4 iz, uint_4 it, uint_4 iu, int msg) const ;
    150   // Changing Sizes/NDim ... return true if OK
    151   bool UpdateSizes(uint_4 ndim, const uint_4 * siz, uint_4 step, uint_8 offset, string & exmsg);
    152   bool UpdateSizes(uint_4 ndim, const uint_4 * siz, const uint_4 * step, uint_8 offset, string & exmsg);
    153   bool UpdateSizes(const TArray<T>& a, string & exmsg);
    154   static uint_8 ComputeTotalSize(uint_4 ndim, uint_4 * siz, uint_4 step, uint_8 offset) ;
    155108  // partage les donnees si "a" temporaire, clone sinon.
    156109  void CloneOrShare(const TArray<T>& a);
    157110  // Share: partage les donnees de "a"
    158111  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);
    161 
    162   uint_4 ndim_;                   // nb of dimensions
    163   uint_4 size_[TARRAY_MAXNDIMS];     // array size in each dimension
    164   uint_8 totsize_;                   // Total number of elements
    165   uint_4 step_[TARRAY_MAXNDIMS];     // two consecutive elements distance in a given dimension
    166   uint_4 minstep_;                   // minimal step (in any axes)
    167   uint_4 moystep_;                   // mean step 0 non regular steps
    168   uint_8 offset_;              // global offset -> position of elem[0] in DataBlock
     112
    169113  NDataBlock<T> mNDBlock;      // Le bloc des donnees
    170   uint_4 marowi_, macoli_;     // For matrices, Row index and column index in dimensions
    171 
    172   DVList* mInfo;               // Infos (variables) attachees au tableau
    173 
    174   static char * ck_op_msg_[6];  // Operation messages for CheckDI() CheckBound()
    175   static uint_4 max_nprt_;      // Nb maxi d'elements imprimes
    176114};
    177115
     
    218156    {TArray<T> result(a); result.SetTemp(true); result += b; return result;}
    219157
    220 ////////////////////////////////////////////////
    221 //  Calcul de fonction
    222 template <class T>
    223 inline TArray<T> sin(const TArray<T>& a)
    224     {TArray<T> result(a); result.SetTemp(true); result.ApplyFunction(sin); return result;}
    225 
    226 template <class T>
    227 inline TArray<T> cos(const TArray<T>& a)
    228     {TArray<T> result(a); result.SetTemp(true); result.ApplyFunction(cos); return result;}
    229 
    230 // --------------------------------------------------
    231 //        Methodes inline de verification
    232 // --------------------------------------------------
    233 template <class T>
    234 inline int TArray<T>::CheckDI(int ka, int msg)  const
    235 {
    236   if ( (ka < 0) || (ka >= ndim_) ) {
    237     string txt = "TArray<T>::CheckDimensionIndex/Error ";   txt += ck_op_msg_[msg];
    238     throw(ParmError(txt));
    239   }
    240   return(ka);
    241 }
    242 
    243 template <class T>
    244 inline void TArray<T>::CheckBound(int ix, uint_4 iy, uint_4 iz, uint_4 it, uint_4 iu, int msg)  const
    245 {
    246   if ( (ix >= size_[0]) || (iy >= size_[1]) || (iz > size_[2]) ||
    247        (it >= size_[3]) || (iu >= size_[4]) ) {
    248     string txt = "TArray<T>::CheckArrayBound/Error ";   txt += ck_op_msg_[msg];
    249     throw(ParmError(txt));
    250   }
    251   return;
    252 }
    253 
    254158
    255159// --------------------------------------------------
     
    349253
    350254template <class T>
    351 inline TArray<T>::operator T()
     255inline T TArray<T>::toScalar()
    352256{
    353257  if (Size() != 1) throw(SzMismatchError("TArray<T>::operator T() Size() != 1")) ;
Note: See TracChangeset for help on using the changeset viewer.