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