Changeset 970 in Sophya for trunk/SophyaLib/TArray/tarray.h


Ignore:
Timestamp:
Apr 26, 2000, 7:55:11 PM (25 years ago)
Author:
ansari
Message:

Passage des TArray en partage de donnees par defaut pour constructeur de copie - Copie pour l'operateur = , cmv+Reza 26/4/2000

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaLib/TArray/tarray.h

    r967 r970  
    4646  // Gestion taille/Remplissage
    4747  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);
    4853  void ReSize(uint_4 ndim, uint_4 * siz, uint_4 step=1);
    4954  void Realloc(uint_4 ndim, uint_4 * siz, uint_4 step=1, bool force=false);
     
    122127  //! Add \b x to all elements
    123128  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);
    125130  //! Substract \b x to all elements
    126131  inline  TArray<T>&  operator -= (T x)            { return Sub(x); }
     
    128133  //! Multiply all elements by \b x
    129134  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);
    131136  //! Divide all elements by \b x
    132137  inline  TArray<T>&  operator /= (T x)            { return Div(x); }
    133   virtual TArray<T>&  SubInv(T x);  //   A ---> x-A
    134   virtual TArray<T>&  DivInv(T x);  //   A ---> x/A
    135138
    136139// A += -=  (ajoute, soustrait element par element les deux tableaux )
     
    138141  //! Operator TArray += TArray
    139142  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);
    141144  //! Operator TArray -= TArray
    142145  inline  TArray<T>&  operator -= (const TArray<T>& a)  { return SubElt(a); }
    143146// Multiplication, division element par element les deux tableaux
    144147  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);
    146149// Recopie des valeurs, element par element
    147150  virtual TArray<T>&  CopyElt(const TArray<T>& a);
     
    159162
    160163protected:
    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);
    165164
    166165  NDataBlock<T> mNDBlock; //!< Block for datas
     
    180179  \brief Operator TArray = TArray + constant */
    181180template <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;}
    183183
    184184/*! \ingroup TArray \fn operator+(T,const TArray<T>&)
    185185  \brief Operator TArray = constant + TArray */
    186186template <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;}
    188189
    189190/*! \ingroup TArray \fn operator-(const TArray<T>&,T)
    190191  \brief Operator TArray = TArray - constant */
    191192template <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;}
    193195
    194196/*! \ingroup TArray \fn operator-(T,const TArray<T>&)
    195197  \brief Operator TArray = constant - TArray */
    196198template <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;}
    198201
    199202/*! \ingroup TArray \fn operator*(const TArray<T>&,T)
    200203  \brief Operator TArray = TArray * constant */
    201204template <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;}
    203207
    204208/*! \ingroup TArray \fn operator*(T,const TArray<T>&)
    205209  \brief Operator TArray = constant * TArray */
    206210template <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;}
    208213
    209214/*! \ingroup TArray \fn operator/(const TArray<T>&,T)
    210215  \brief Operator TArray = TArray / constant */
    211216template <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  */
     222template <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;}
    213225
    214226////////////////////////////////////////////////////////////////
     
    219231template <class T>
    220232inline 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; }
    222237
    223238/*! \ingroup TArray \fn operator-(const TArray<T>&,const TArray<T>&)
     
    225240template <class T>
    226241inline 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; }
    228246
    229247
Note: See TracChangeset for help on using the changeset viewer.