synaps/linalg/rep1d.h

00001 /*********************************************************************
00002  *
00003 *      This file is part of the source code of SYNAPS kernel.        *
00004 *   Author(s): B. Mourrain, GALAAD, INRIA                            *
00005 **********************************************************************
00006 History: 
00007 $Id: rep1d.h,v 1.1 2005/07/11 08:33:35 mourrain Exp $
00008 **********************************************************************/
00009 #ifndef SYNAPS_LINALG_ARRAY1D_H
00010 #define SYNAPS_LINALG_ARRAY1D_H
00011 //---------------------------------------------------------------------
00012 #include <fstream>
00013 #include <sstream>
00014 #include <iterator>
00015 #include <cassert>
00016 #include <synaps/init.h>
00017 //#include <base/MinMax.h>
00018 
00019 
00020 __BEGIN_NAMESPACE_SYNAPS
00021 
00022 //---------------------------------------------------------------------
00024 namespace linalg {  
00025 
00027 template <class C> struct rep1d 
00028 {
00029 public:
00030   typedef C            value_type;
00031   typedef unsigned int size_type;
00032   typedef C*           iterator;
00033   typedef iterator     const_iterator;
00034   typedef std::reverse_iterator<const_iterator>  const_reverse_iterator;
00035   typedef std::reverse_iterator<iterator>        reverse_iterator;
00036 
00037   size_type size_;
00038   C * tab_;
00039 
00040   rep1d() : size_(0), tab_(0) {}
00041   rep1d(const rep1d<C> & v);
00042   rep1d(size_type i);
00043   rep1d(size_type i, C* t);
00044   rep1d(C* b, C* e);
00045   rep1d(size_type, const char * nm);
00046 
00047   //  void reserve(size_type i);
00048   void resize(const size_type & n);
00049   rep1d<C> & operator=(const rep1d<C> & v);
00050   //  rep1d<C> & operator=(rep1d<C>*  v);
00051 
00052   size_type size() const {return size_;}
00053 
00054   iterator        begin()       {return iterator(tab_); }
00055   const_iterator  begin() const {return const_iterator(tab_); }
00056   iterator        end()         {return iterator(tab_+size_); }
00057   const_iterator  end()   const {return const_iterator(tab_+size_); }
00058 
00059   reverse_iterator       rbegin()       {return reverse_iterator(tab_+size_); }
00060   const_reverse_iterator rbegin() const {return reverse_iterator(tab_+size_); }
00061   reverse_iterator       rend()         {return reverse_iterator(tab_); }
00062   const_reverse_iterator rend()   const {return reverse_iterator(tab_); }
00063 
00064   inline       C & operator[] (size_type i)       {return tab_[i];}
00065   inline const C & operator[] (size_type i) const {return tab_[i];}
00066   // No test {if(i<size_) return tab_[i]; else return C(0);}
00067 
00068   ~rep1d () { delete[] tab_;}
00069 
00070 };
00071 //----------------------------------------------------------------------
00072 template<class C> void assign(rep1d<C> & r, const rep1d<C>* t);
00073 template<class C> typename rep1d<C>::iterator 
00074     create(typename rep1d<C>::iterator s, const rep1d<C> & a, unsigned int i);
00075 //----------------------------------------------------------------------
00076 } //CLOSE linalg
00077 
00078 
00079 __END_NAMESPACE_SYNAPS
00080 
00081 //======================================================================
00082 #ifndef SEPARATE_COMPILATION
00083         #include <synaps/linalg/array1d.C>
00084 #endif
00085 
00086 #endif // SYNAPS_LINALG_ARRAY1D_H
00087 

SYNAPS DOCUMENTATION
logo