Changeset 268 in Sophya for trunk/SophyaLib/BaseTools/ndatablock.h
- Timestamp:
- Apr 26, 1999, 5:32:23 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/BaseTools/ndatablock.h
r267 r268 1 // This may look like C code, but it is really -*- C++ -*- 2 // Gestion de block de donnees avec partage de references 3 // C.Magneville 04/99 4 // LAL (Orsay) / IN2P3-CNRS DAPNIA/SPP (Saclay) / CEA 1 5 #ifndef NDATABLOCK_H 2 6 #define NDATABLOCK_H 3 7 4 8 #include "machdefs.h" 9 #include "anydataobj.h" 10 #include <iostream.h> 11 12 namespace PlanckDPC { 5 13 6 14 // Classe pour permettre de partager des donnees avec … … 14 22 // classe de container avec partage de reference 15 23 template <class T> 16 class NDataBlock {24 class NDataBlock : public AnyDataObj { 17 25 18 26 public: … … 22 30 NDataBlock(size_t n, T* data, Bridge* br=NULL); 23 31 NDataBlock(); 24 NDataBlock( NDataBlock<T>& a);25 NDataBlock( NDataBlock<T>& a,bool share);32 NDataBlock(const NDataBlock<T>& a); 33 NDataBlock(const NDataBlock<T>& a,bool share); 26 34 virtual ~NDataBlock(); 27 35 28 36 // Temporaire? 29 inline bool IsTemp(void) {return mIsTemp;}30 void SetTemp(bool temp=false) ;37 inline bool IsTemp(void) const {return mIsTemp;} 38 void SetTemp(bool temp=false) const; 31 39 32 40 // Gestion taille/Remplissage 33 void Clone( NDataBlock<T>& a);41 void Clone(const NDataBlock<T>& a); 34 42 void Reset(T v=0); 35 43 void ReSize(size_t n); … … 39 47 inline T* Data() 40 48 {if(mSRef) return mSRef->data; else return NULL;} 49 inline T* Data() const 50 {if(mSRef) return mSRef->data; else return NULL;} 41 51 inline size_t Size() const {return mSz;} 42 inline T& operator()(size_t i) {return *(mSRef->data+i);} 52 inline T& operator()(size_t i) {return *(mSRef->data+i);} 53 inline T operator()(size_t i) const {return *(mSRef->data+i);} 43 54 44 55 inline T* Begin() {return mSRef->data;} 45 inline T const* Begin() const {return mSRef->data;} 56 inline T const* Begin() const {return mSRef->data;} 46 57 inline T* End() {return mSRef->data+mSz;} 47 58 inline T const* End() const {return mSRef->data+mSz;} 48 59 49 60 // Impression 50 void Print(size_t i1=0,size_t n=0); 61 void Print(ostream& os, size_t i1=0,size_t n=10) const; 62 inline void Print(size_t i1=0,size_t n=0) const {Print(cout,i1,n);} 63 64 // 65 T Sum(size_t i1=0,size_t n=0) const; 66 T Product(size_t i1=0,size_t n=0) const; 51 67 52 68 // Surcharge d operateurs 53 NDataBlock<T>& operator = ( NDataBlock<T>& a);69 NDataBlock<T>& operator = (const NDataBlock<T>& a); 54 70 NDataBlock<T>& operator = (T v); 55 71 … … 59 75 NDataBlock<T>& operator /= (T b); 60 76 61 NDataBlock<T>& operator += ( NDataBlock<T>& a);62 NDataBlock<T>& operator -= ( NDataBlock<T>& a);63 NDataBlock<T>& operator *= ( NDataBlock<T>& a);64 NDataBlock<T>& operator /= ( NDataBlock<T>& a);77 NDataBlock<T>& operator += (const NDataBlock<T>& a); 78 NDataBlock<T>& operator -= (const NDataBlock<T>& a); 79 NDataBlock<T>& operator *= (const NDataBlock<T>& a); 80 NDataBlock<T>& operator /= (const NDataBlock<T>& a); 65 81 66 NDataBlock<T> Add(T b) ;67 NDataBlock<T> Sub(T b) ;68 NDataBlock<T> SubInv(T b) ;69 NDataBlock<T> Mul(T b) ;70 NDataBlock<T> Div(T b) ;71 NDataBlock<T> DivInv(T b) ;82 NDataBlock<T> Add(T b) const; 83 NDataBlock<T> Sub(T b) const; 84 NDataBlock<T> SubInv(T b) const; 85 NDataBlock<T> Mul(T b) const; 86 NDataBlock<T> Div(T b) const; 87 NDataBlock<T> DivInv(T b) const; 72 88 73 NDataBlock<T> Add( NDataBlock<T>& b);74 NDataBlock<T> Sub( NDataBlock<T>& b);75 NDataBlock<T> SubInv( NDataBlock<T>& b);76 NDataBlock<T> Mul( NDataBlock<T>& b);77 NDataBlock<T> Div( NDataBlock<T>& b);78 NDataBlock<T> DivInv( NDataBlock<T>& b);89 NDataBlock<T> Add(const NDataBlock<T>& b) const; 90 NDataBlock<T> Sub(const NDataBlock<T>& b) const; 91 NDataBlock<T> SubInv(const NDataBlock<T>& b) const; 92 NDataBlock<T> Mul(const NDataBlock<T>& b) const; 93 NDataBlock<T> Div(const NDataBlock<T>& b) const; 94 NDataBlock<T> DivInv(const NDataBlock<T>& b) const; 79 95 80 96 protected: … … 83 99 84 100 void Alloc(size_t n,T* data=NULL,Bridge* br=NULL); 85 void Share( NDataBlock<T>& a);101 void Share(const NDataBlock<T>& a); 86 102 void Delete(void); 87 103 88 104 size_t mSz; 89 105 NDREF* mSRef; 90 bool mIsTemp;106 mutable bool mIsTemp; 91 107 }; 92 108 93 109 94 110 template<class T> 95 inline NDataBlock<T> operator + (NDataBlock<T>& a,T b) 111 inline ostream& operator << (ostream& os, const NDataBlock<T>& a) 112 {Print(os); return(os);} 113 template<class T> 114 inline NDataBlock<T> operator + (const NDataBlock<T>& a,T b) 96 115 {return a.Add(b);} 97 116 template<class T> 98 inline NDataBlock<T> operator + (T b, NDataBlock<T>& a)117 inline NDataBlock<T> operator + (T b,const NDataBlock<T>& a) 99 118 {return a.Add(b);} 100 119 template<class T> 101 inline NDataBlock<T> operator - ( NDataBlock<T>& a,T b)120 inline NDataBlock<T> operator - (const NDataBlock<T>& a,T b) 102 121 {return a.Sub(b);} 103 122 template<class T> 104 inline NDataBlock<T> operator - (T b, NDataBlock<T>& a)123 inline NDataBlock<T> operator - (T b,const NDataBlock<T>& a) 105 124 {return a.SubInv(b);} 106 125 template<class T> 107 inline NDataBlock<T> operator * ( NDataBlock<T>& a,T b)126 inline NDataBlock<T> operator * (const NDataBlock<T>& a,T b) 108 127 {return a.Mul(b);} 109 128 template<class T> 110 inline NDataBlock<T> operator * (T b, NDataBlock<T>& a)129 inline NDataBlock<T> operator * (T b,const NDataBlock<T>& a) 111 130 {return a.Mul(b);} 112 131 template<class T> 113 inline NDataBlock<T> operator / ( NDataBlock<T>& a,T b)132 inline NDataBlock<T> operator / (const NDataBlock<T>& a,T b) 114 133 {return a.Div(b);} 115 134 template<class T> 116 inline NDataBlock<T> operator / (T b, NDataBlock<T>& a)135 inline NDataBlock<T> operator / (T b,const NDataBlock<T>& a) 117 136 {return a.DivInv(b);} 118 137 119 138 template<class T> 120 inline NDataBlock<T> operator + ( NDataBlock<T>& a,NDataBlock<T>& b)139 inline NDataBlock<T> operator + (const NDataBlock<T>& a,const NDataBlock<T>& b) 121 140 {return a.Add(b);} 122 141 template<class T> 123 inline NDataBlock<T> operator - ( NDataBlock<T>& a,NDataBlock<T>& b)142 inline NDataBlock<T> operator - (const NDataBlock<T>& a,const NDataBlock<T>& b) 124 143 {return a.Sub(b);} 125 144 template<class T> 126 inline NDataBlock<T> operator * ( NDataBlock<T>& a,NDataBlock<T>& b)145 inline NDataBlock<T> operator * (const NDataBlock<T>& a,const NDataBlock<T>& b) 127 146 {return a.Mul(b);} 128 147 template<class T> 129 inline NDataBlock<T> operator / ( NDataBlock<T>& a,NDataBlock<T>& b)148 inline NDataBlock<T> operator / (const NDataBlock<T>& a,const NDataBlock<T>& b) 130 149 {return a.Div(b);} 131 150 151 } // Fin du namespace 132 152 133 153 #endif
Note:
See TracChangeset
for help on using the changeset viewer.