00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef _MV_VECTOR_$TYPE_H
00030 #define _MV_VECTOR_$TYPE_H
00031
00032
00033
00034 #include <stdlib.h>
00035 #include <sstream>
00036
00037
00038 #ifdef MV_VECTOR_BOUNDS_CHECK
00039 # include <assert.h>
00040 #endif
00041
00042 #include "mvvind.h"
00043
00044
00045
00046
00047
00048
00049
00050 #include "mvvrf.h"
00051
00052 class MV_Vector_$TYPE
00053 {
00054 protected:
00055 $TYPE *p_;
00056 int dim_;
00057 int ref_;
00058 public:
00059
00060
00061
00062
00063
00064
00065 MV_Vector_$TYPE();
00066 MV_Vector_$TYPE( int);
00067 MV_Vector_$TYPE( int, const $TYPE&);
00068
00069
00070 MV_Vector_$TYPE($TYPE*, int);
00071 MV_Vector_$TYPE(const $TYPE*, int);
00072 MV_Vector_$TYPE(const MV_Vector_$TYPE &);
00073
00074
00075
00076
00077
00078
00079
00080
00081 MV_Vector_$TYPE($TYPE* d, int N, MV_Vector_::ref_type i) :
00082 p_(d), dim_(N), ref_(i) {}
00083
00084 MV_Vector_$TYPE(const MV_Vector_$TYPE &V, MV_Vector_::ref_type i) :
00085 p_(V.p_), dim_(V.dim_), ref_(i) {}
00086
00087 ~MV_Vector_$TYPE();
00088
00089
00090
00091
00092
00093
00094 $TYPE& operator()( int i)
00095 {
00096 # ifdef MV_VECTOR_BOUNDS_CHECK
00097 assert(i < dim_);
00098 # endif
00099 return p_[i];
00100 }
00101 const $TYPE& operator()( int i) const
00102 {
00103 # ifdef MV_VECTOR_BOUNDS_CHECK
00104 assert(i < dim_);
00105 # endif
00106 return p_[i];
00107 }
00108
00109 $TYPE& operator[]( int i)
00110 {
00111 # ifdef MV_VECTOR_BOUNDS_CHECK
00112 assert(i < dim_);
00113 # endif
00114 return p_[i];
00115 }
00116 const $TYPE& operator[]( int i) const
00117 {
00118 # ifdef MV_VECTOR_BOUNDS_CHECK
00119 assert(i < dim_);
00120 # endif
00121 return p_[i];
00122 }
00123
00124
00125 MV_Vector_$TYPE operator()(const MV_VecIndex &I) ;
00126 MV_Vector_$TYPE operator()(void);
00127 const MV_Vector_$TYPE operator()(void) const;
00128 const MV_Vector_$TYPE operator()(const MV_VecIndex &I) const;
00129
00130 inline int size() const { return dim_;}
00131 inline int dim() const { return dim_;}
00132 inline int ref() const { return ref_;}
00133 inline int null() const {return dim_== 0;}
00134
00135
00136 MV_Vector_$TYPE & newsize( int );
00137
00138
00139
00140
00141
00142 MV_Vector_$TYPE & operator=(const MV_Vector_$TYPE&);
00143 MV_Vector_$TYPE & operator=(const $TYPE&);
00144
00145
00146 friend std::ostream& operator<<(std::ostream &s, const MV_Vector_$TYPE &A);
00147
00148 };
00149
00150
00151
00152 #endif