Changeset 3385 in Sophya for trunk/SophyaLib/BaseTools


Ignore:
Timestamp:
Nov 21, 2007, 6:59:05 PM (18 years ago)
Author:
ansari
Message:

protection pour I/O PPF de NDataBlock, lorsque taille (Size()) == 0, Reza 21/11/2007

Location:
trunk/SophyaLib/BaseTools
Files:
3 edited

Legend:

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

    r2867 r3385  
    145145uint_8 itab[3];
    146146is.Get(itab, 3);
    147 if (dobj == NULL) dobj = new NDataBlock<T>(itab[1]);
    148 else if (itab[1] != dobj->Size()) dobj->ReSize(itab[1]);
     147if (dobj == NULL) {
     148  if (itab[1] > 0) dobj = new NDataBlock<T>(itab[1]);
     149  else dobj = new NDataBlock<T>();
     150}
     151else {
     152  if (itab[1] != dobj->Size()) {
     153    if (itab[1] > 0)  dobj->ReSize(itab[1]);
     154    else dobj->Dealloc();
     155  }
     156}
     157if (dobj->Size() < 1)  return;  // Pas de donnees a lire ...
    149158// On lit le tableau de nombres
    150159if (is.Version() <= 2)   // lecture ancienne version PPF
     
    166175os.Put(itab, 3);
    167176//  On ecrit le tableau de nombres
    168 os.Put(dobj->Data(), dobj->Size());
     177if (dobj->Size() > 0)   // On ecrit les donnees, s'il y en a ... (sz>0)
     178  os.Put(dobj->Data(), dobj->Size());
    169179}
    170180
  • trunk/SophyaLib/BaseTools/ndatablock.h

    r3213 r3385  
    152152
    153153  //! Return thye associated object Id (or DataRef Id)
    154   inline uint_8 DRefId() { return mSRef->dsid; }
     154  inline uint_8 DRefId() { return ((mSRef)?mSRef->dsid:0); }
    155155  //! assign a new object Id (or DataRef Id) - useful for PPF write operations
    156   inline void RenewDRefId() { mSRef->dsid = AnyDataObj::getUniqueId(); }
     156  inline void RenewDRefId() { if (mSRef) mSRef->dsid = AnyDataObj::getUniqueId(); }
    157157  //! assign a new object Id (or DataRef Id) - useful for PPF write operations
    158   inline void RenewObjId() { mSRef->dsid = AnyDataObj::getUniqueId(); }
     158  inline void RenewObjId() { if (mSRef) mSRef->dsid = AnyDataObj::getUniqueId(); }
    159159 
    160160
  • trunk/SophyaLib/BaseTools/segdatablock.h

    r3214 r3385  
    244244
    245245  //! Returns the unique object identifier
    246   inline uint_8 DRefId() const { return mSRef->dsid; }
     246  inline uint_8 DRefId() const { return ((mSRef)?mSRef->dsid:0); }
    247247
    248248protected:
Note: See TracChangeset for help on using the changeset viewer.