Changeset 970 in Sophya for trunk/SophyaLib/TArray/tarray.h
- Timestamp:
- Apr 26, 2000, 7:55:11 PM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/TArray/tarray.h
r967 r970 46 46 // Gestion taille/Remplissage 47 47 virtual void Clone(const TArray<T>& a); 48 // partage les donnees si "a" temporaire, clone sinon. 49 void CloneOrShare(const TArray<T>& a); 50 // Share: partage les donnees de "a" 51 52 void Share(const TArray<T>& a); 48 53 void ReSize(uint_4 ndim, uint_4 * siz, uint_4 step=1); 49 54 void Realloc(uint_4 ndim, uint_4 * siz, uint_4 step=1, bool force=false); … … 122 127 //! Add \b x to all elements 123 128 inline TArray<T>& operator += (T x) { return Add(x); } 124 virtual TArray<T>& Sub(T x );129 virtual TArray<T>& Sub(T x, bool fginv=false); 125 130 //! Substract \b x to all elements 126 131 inline TArray<T>& operator -= (T x) { return Sub(x); } … … 128 133 //! Multiply all elements by \b x 129 134 inline TArray<T>& operator *= (T x) { return Mul(x); } 130 virtual TArray<T>& Div(T x );135 virtual TArray<T>& Div(T x, bool fginv=false); 131 136 //! Divide all elements by \b x 132 137 inline TArray<T>& operator /= (T x) { return Div(x); } 133 virtual TArray<T>& SubInv(T x); // A ---> x-A134 virtual TArray<T>& DivInv(T x); // A ---> x/A135 138 136 139 // A += -= (ajoute, soustrait element par element les deux tableaux ) … … 138 141 //! Operator TArray += TArray 139 142 inline TArray<T>& operator += (const TArray<T>& a) { return AddElt(a); } 140 virtual TArray<T>& SubElt(const TArray<T>& a );143 virtual TArray<T>& SubElt(const TArray<T>& a, bool fginv=false); 141 144 //! Operator TArray -= TArray 142 145 inline TArray<T>& operator -= (const TArray<T>& a) { return SubElt(a); } 143 146 // Multiplication, division element par element les deux tableaux 144 147 virtual TArray<T>& MulElt(const TArray<T>& a); 145 virtual TArray<T>& DivElt(const TArray<T>& a );148 virtual TArray<T>& DivElt(const TArray<T>& a, bool fginv=false); 146 149 // Recopie des valeurs, element par element 147 150 virtual TArray<T>& CopyElt(const TArray<T>& a); … … 159 162 160 163 protected: 161 // partage les donnees si "a" temporaire, clone sinon.162 void CloneOrShare(const TArray<T>& a);163 // Share: partage les donnees de "a"164 void Share(const TArray<T>& a);165 164 166 165 NDataBlock<T> mNDBlock; //!< Block for datas … … 180 179 \brief Operator TArray = TArray + constant */ 181 180 template <class T> inline TArray<T> operator + (const TArray<T>& a, T b) 182 {TArray<T> result(a); result.SetTemp(true); result.Add(b); return result;} 181 {TArray<T> result; result.CloneOrShare(a); result.SetTemp(true); 182 result.Add(b); return result;} 183 183 184 184 /*! \ingroup TArray \fn operator+(T,const TArray<T>&) 185 185 \brief Operator TArray = constant + TArray */ 186 186 template <class T> inline TArray<T> operator + (T b,const TArray<T>& a) 187 {TArray<T> result(a); result.SetTemp(true); result.Add(b); return result;} 187 {TArray<T> result; result.CloneOrShare(a); result.SetTemp(true); 188 result.Add(b); return result;} 188 189 189 190 /*! \ingroup TArray \fn operator-(const TArray<T>&,T) 190 191 \brief Operator TArray = TArray - constant */ 191 192 template <class T> inline TArray<T> operator - (const TArray<T>& a, T b) 192 {TArray<T> result(a); result.SetTemp(true); result.Sub(b); return result;} 193 {TArray<T> result; result.CloneOrShare(a); result.SetTemp(true); 194 result.Sub(b); return result;} 193 195 194 196 /*! \ingroup TArray \fn operator-(T,const TArray<T>&) 195 197 \brief Operator TArray = constant - TArray */ 196 198 template <class T> inline TArray<T> operator - (T b,const TArray<T>& a) 197 {TArray<T> result(a); result.SetTemp(true); result.SubInv(b); return result;} 199 {TArray<T> result; result.CloneOrShare(a); result.SetTemp(true); 200 result.Sub(b,true); return result;} 198 201 199 202 /*! \ingroup TArray \fn operator*(const TArray<T>&,T) 200 203 \brief Operator TArray = TArray * constant */ 201 204 template <class T> inline TArray<T> operator * (const TArray<T>& a, T b) 202 {TArray<T> result(a); result.SetTemp(true); result.Mul(b); return result;} 205 {TArray<T> result; result.CloneOrShare(a); result.SetTemp(true); 206 result.Mul(b); return result;} 203 207 204 208 /*! \ingroup TArray \fn operator*(T,const TArray<T>&) 205 209 \brief Operator TArray = constant * TArray */ 206 210 template <class T> inline TArray<T> operator * (T b,const TArray<T>& a) 207 {TArray<T> result(a); result.SetTemp(true); result.Mul(b); return result;} 211 {TArray<T> result; result.CloneOrShare(a); result.SetTemp(true); 212 result.Mul(b); return result;} 208 213 209 214 /*! \ingroup TArray \fn operator/(const TArray<T>&,T) 210 215 \brief Operator TArray = TArray / constant */ 211 216 template <class T> inline TArray<T> operator / (const TArray<T>& a, T b) 212 {TArray<T> result(a); result.SetTemp(true); result.DivInv(b); return result;} 217 {TArray<T> result; result.CloneOrShare(a); result.SetTemp(true); 218 result.Div(b); return result;} 219 220 /*! \ingroup TArray \fn operator/(T,const TArray<T>&) 221 \brief Operator TArray = constant / TArray */ 222 template <class T> inline TArray<T> operator / (T b, const TArray<T>& a) 223 {TArray<T> result; result.CloneOrShare(a); result.SetTemp(true); 224 result.Div(b, true); return result;} 213 225 214 226 //////////////////////////////////////////////////////////////// … … 219 231 template <class T> 220 232 inline TArray<T> operator + (const TArray<T>& a,const TArray<T>& b) 221 {TArray<T> result(a); result.SetTemp(true); result.AddElt(b); return result;} 233 { TArray<T> result; result.SetTemp(true); 234 if (b.IsTemp()) { result.Share(b); result.AddElt(a); } 235 else { result.CloneOrShare(a); result.AddElt(b); } 236 return result; } 222 237 223 238 /*! \ingroup TArray \fn operator-(const TArray<T>&,const TArray<T>&) … … 225 240 template <class T> 226 241 inline TArray<T> operator - (const TArray<T>& a,const TArray<T>& b) 227 {TArray<T> result(a); result.SetTemp(true); result.SubElt(b); return result;} 242 { TArray<T> result; result.SetTemp(true); 243 if (b.IsTemp()) { result.Share(b); result.SubElt(a, true); } 244 else { result.CloneOrShare(a); result.SubElt(b); } 245 return result; } 228 246 229 247
Note:
See TracChangeset
for help on using the changeset viewer.