• Main Page
  • Related Pages
  • Modules
  • Classes
  • Files
  • File List

tjarray.h

00001  /***************************************************************************
00002                           tjvector.h  -  description
00003                              -------------------
00004     begin                : Thu Feb 22 2001
00005     copyright            : (C) 2001 by Thies Jochimsen
00006     email                : jochimse@cns.mpg.de
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  *                                                                         *
00011  *   This program is free software; you can redistribute it and/or modify  *
00012  *   it under the terms of the GNU General Public License as published by  *
00013  *   the Free Software Foundation; either version 2 of the License, or     *
00014  *   (at your option) any later version.                                   *
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; // required for JDX arrays
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 //    Aliases:
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 // Helper functions:
00404 
00410   STD_string print_table(const sarray& table);
00411 
00412 
00417   sarray parse_table(const STD_string& str);
00418 
00419 
00422 #endif

Generated on Tue Dec 18 2012 15:11:15 by  doxygen 1.7.1