Changeset 969 in Sophya


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

Passage de NDataBlock en partage de donnees par defaut pour constructeur de copie - cmv+Reza 26/4/2000

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaLib/BaseTools/ndatablock.cc

    r946 r969  
    118118template <class T>
    119119NDataBlock<T>::NDataBlock(const NDataBlock<T>& a)
    120 // Createur par copie: partage les donnees si "a" temporaire, clone sinon.
     120// Createur par copie: partage les donnees dans tous les cas
    121121: mSz(0), mSRef(NULL), mIsTemp(false)
    122122{
     
    124124  cout<<"?_NDataBlock::NDataBlock("<<this<<",&a="<<&a<<")"<<endl;
    125125
    126 CloneOrShare(a);
     126Share(a);
    127127}
    128128
     
    486486if(this == &a) return *this;
    487487if(a.mSz==0)
    488   throw(SzMismatchError("NDataBlock::operator=A null size\n"));
    489 CloneOrShare(a);
     488  throw(SzMismatchError("NDataBlock::operator=A null size \n"));
     489if (mSz==0) { 
     490  CloneOrShare(a);
     491  return *this;
     492}
     493if (a.mSz != mSz)
     494  throw(SzMismatchError("NDataBlock::operator=A Unequal sizes \n"));
     495memcpy(Data(),a.Data(),mSz*sizeof(T));
    490496return *this;
    491497}
     
    615621// Pour A+b
    616622{
    617 NDataBlock<T> result(*this); result.SetTemp(true);
     623NDataBlock<T> result;
     624result.CloneOrShare(*this); result.SetTemp(true);
    618625result += b;
    619626return result;
     
    625632// Pour A-b
    626633{
    627 NDataBlock<T> result(*this); result.SetTemp(true);
     634NDataBlock<T> result;
     635result.CloneOrShare(*this); result.SetTemp(true);
    628636return result -= b;
    629637}
     
    634642// Pour b-A
    635643{
    636 NDataBlock<T> result(*this); result.SetTemp(true);
     644NDataBlock<T> result;
     645result.CloneOrShare(*this); result.SetTemp(true);
    637646T *p=result.Begin(), *pe=result.End();
    638647T const *pa=this->Begin();
     
    646655// Pour A*b
    647656{
    648 NDataBlock<T> result(*this); result.SetTemp(true);
     657NDataBlock<T> result;
     658result.CloneOrShare(*this); result.SetTemp(true);
    649659return result *= b;
    650660}
     
    655665// Pour A/b
    656666{
    657 NDataBlock<T> result(*this); result.SetTemp(true);
     667NDataBlock<T> result;
     668result.CloneOrShare(*this); result.SetTemp(true);
    658669return result /= b;
    659670}
     
    664675// Pour b/A
    665676{
    666 NDataBlock<T> result(*this); result.SetTemp(true);
     677NDataBlock<T> result;
     678result.CloneOrShare(*this); result.SetTemp(true);
    667679T *p=result.Begin(), *pe=result.End();
    668680T const *pa = this->Begin();
Note: See TracChangeset for help on using the changeset viewer.