00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef TJARRAY_H
00020 #define TJARRAY_H
00021
00022
00023
00024 #include <tjutils/tjvector.h>
00025 #include <tjutils/tjlog.h>
00026
00027
00041 class ndim : public STD_vector<unsigned long> {
00042
00043 public:
00044
00049 ndim (unsigned long d=0);
00050
00055 ndim (const ndim& mm) : STD_vector<unsigned long>(mm) {}
00056
00062 ndim (const STD_string& s);
00063
00068 unsigned long dim() const {return size();}
00069
00074 operator STD_string () const;
00075
00079 friend STD_ostream& operator << (STD_ostream& s,const ndim& nn) { return s << STD_string(nn);}
00080
00085 ndim& operator -- ( );
00086
00091 ndim& operator -- (int);
00092
00098 ndim& add_dim ( unsigned long e, bool first=false );
00099
00104 unsigned long total() const;
00105
00110 unsigned long extent2index(const ndim& mm) const;
00111
00116 ndim index2extent(unsigned long index) const;
00117
00122 bool operator == (const ndim& nn) const;
00123
00128 bool operator != (const ndim& nn) const;
00129
00134 ndim& reduce ( unsigned long dim );
00135
00140 ndim& autosize ();
00141 };
00142
00143
00144
00146
00147
00155 template<class V, class T> class tjarray : public V {
00156
00157 public:
00158
00159
00164 tjarray ();
00165
00166
00171 tjarray (unsigned long n1);
00172 tjarray (unsigned long n1, unsigned long n2);
00173 tjarray (unsigned long n1, unsigned long n2, unsigned long n3);
00174 tjarray (unsigned long n1, unsigned long n2, unsigned long n3, unsigned long n4);
00175 tjarray (unsigned long n1, unsigned long n2, unsigned long n3, unsigned long n4, unsigned long n5);
00176
00177
00182 tjarray (const tjarray<V,T> &ta);
00183
00184
00189 tjarray (const V& sv);
00190
00191
00196 tjarray (const ndim &nn);
00197
00198
00202 tjarray<V,T>& operator = (const tjarray<V,T>& ta);
00203
00208 tjarray<V,T>& operator = (const T& value);
00209
00210
00215 V& resize(unsigned int newsize);
00216
00217
00224 tjarray<V,T>& redim (const ndim &nn);
00225
00226
00233 tjarray<V,T>& redim (unsigned long n1);
00234 tjarray<V,T>& redim (unsigned long n1, unsigned long n2);
00235 tjarray<V,T>& redim (unsigned long n1, unsigned long n2, unsigned long n3);
00236 tjarray<V,T>& redim (unsigned long n1, unsigned long n2, unsigned long n3, unsigned long n4);
00237 tjarray<V,T>& redim (unsigned long n1, unsigned long n2, unsigned long n3, unsigned long n4, unsigned long n5);
00238
00239
00244 tjarray<V,T>& autosize () {extent.autosize(); return *this;}
00245
00246
00251 const ndim& get_extent () const;
00252
00253
00258 T& operator () (const ndim& ii);
00259
00260
00265 const T& operator () (const ndim& ii) const;
00266
00267
00272 T& operator () (unsigned long n1);
00273 T& operator () (unsigned long n1, unsigned long n2);
00274 T& operator () (unsigned long n1, unsigned long n2, unsigned long n3);
00275 T& operator () (unsigned long n1, unsigned long n2, unsigned long n3, unsigned long n4);
00276 T& operator () (unsigned long n1, unsigned long n2, unsigned long n3, unsigned long n4, unsigned long n5);
00277
00278
00283 const T& operator () (unsigned long n1) const;
00284 const T& operator () (unsigned long n1, unsigned long n2) const;
00285 const T& operator () (unsigned long n1, unsigned long n2, unsigned long n3) const;
00286 const T& operator () (unsigned long n1, unsigned long n2, unsigned long n3, unsigned long n4) const;
00287 const T& operator () (unsigned long n1, unsigned long n2, unsigned long n3, unsigned long n4, unsigned long n5) const;
00288
00289
00294 unsigned long dim() const;
00295
00296
00301 unsigned long size(unsigned long i) const;
00302
00303
00308 unsigned long total() const;
00309
00310
00315 unsigned long length() const;
00316
00321 unsigned int elementsize() const;
00322
00327 tjarray<V,T>& assignValues(const tjarray<V,T> &ta) ;
00328
00329
00334 tjarray<V,T>& copy(const tjarray<V,T> &ta) ;
00335
00336
00341 STD_string printbody() const;
00342
00343
00348 ndim create_index(unsigned long index) const;
00349
00350
00351 protected:
00352
00353 STD_ostream& printbody2stream(STD_ostream& s) const;
00354
00355
00356 private:
00357
00358 static ndim create_extent(unsigned long n1);
00359 static ndim create_extent(unsigned long n1,unsigned long n2);
00360 static ndim create_extent(unsigned long n1,unsigned long n2,unsigned long n3);
00361 static ndim create_extent(unsigned long n1,unsigned long n2,unsigned long n3,unsigned long n4);
00362 static ndim create_extent(unsigned long n1,unsigned long n2,unsigned long n3,unsigned long n4,unsigned long n5);
00363
00364 ndim extent;
00365
00366 T element_dummy;
00367 };
00368
00369
00371
00372
00376 typedef tjarray<fvector,float> farray;
00377
00381 typedef tjarray<dvector,double> darray;
00382
00386 typedef tjarray<ivector,int> iarray;
00387
00388
00392 typedef tjarray<cvector,STD_complex> carray;
00393
00394
00398 typedef tjarray<svector,STD_string> sarray;
00399
00400
00401
00403
00404
00410 STD_string print_table(const sarray& table);
00411
00412
00417 sarray parse_table(const STD_string& str);
00418
00419
00422 #endif