Changeset 275 in Sophya for trunk/SophyaLib/BaseTools


Ignore:
Timestamp:
Apr 27, 1999, 7:51:47 PM (26 years ago)
Author:
ansari
Message:

modif ReSize() cmv 27/4/99

Location:
trunk/SophyaLib/BaseTools
Files:
2 edited

Legend:

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

    r273 r275  
    1313using namespace PlanckDPC;
    1414
    15 //define DEBUG_NDATABLOCK
     15// define DEBUG_NDATABLOCK
    1616
    1717#ifdef DEBUG_NDATABLOCK
     
    2424//   - gestion du partage de reference
    2525
     26////////////////////////////////////////////////////////////////
    2627//************ Createur, Destructeur, gestion des donnees
    2728
     
    4142NDataBlock<T>::NDataBlock(size_t n, T* data, Bridge* br)
    4243// Createur d'une structure de "n" donnees, avec donnees preallouees
     44//  (Voir explications dans Alloc())
    4345: mSz(0), mSRef(NULL), mIsTemp(false)
    4446{
     
    101103}
    102104
     105////////////////////////////////////////////////////////////////
     106
    103107template <class T>
    104108void NDataBlock<T>::SetTemp(bool temp) const
     
    116120void NDataBlock<T>::Alloc(size_t n,T* data,Bridge* br)
    117121// Allocation d'un NOUVEL espace de stoquage
    118 // Si data==NULL : allocation de l'espace memoire
     122// Si data==NULL : allocation de l'espace memoire (vide)
    119123//    data!=NULL : partage des donnees avec l'adresse data
    120124// Si br==NULL   : les donnees nous appartiennent
    121 //    br!=NULL   : les donnees ne nous appartiennent pas (ex Blitz)
     125//    br!=NULL   : les donnees ne nous appartiennent pas (ex: Blitz)
     126//
    122127// Exemple: on veut connecter a un tableau de T*
    123 // -- On veut que NDataBlock ne desalloue pas le tableau
    124 //   float *x = new float[5]; ... remplissage de x[] ...;
    125 //   NDataBlock A(5,x,new Bridge);
    126 //   delete [] x;   // Il faut deleter explicitement
    127 // -- On veut que NDataBlock desalloue le tableau
    128 //          ( Ne Pas Faire "delete [] x;" )
    129 //   float *x = new float[5]; ... remplissage de x[] ...;
    130 //   NDataBlock A(5,x);
    131 //   -- Autre solution:
    132 //   NDataBlock A(5); A.FillFrom(5,x);
     128// 1- On veut que NDataBlock NE DESALLOUE PAS le tableau "data"
     129//    a- Premiere solution
     130//       float *x = new float[5]; ... remplissage de x[] ...;
     131//       NDataBlock A(5,x,new Bridge);
     132//       delete [] x;   // Il faut deleter explicitement
     133//       (et Bridge est delete par le destructeur de la classe)
     134//    b- Autre solution:
     135//       NDataBlock A(5); A.FillFrom(5,x);
     136//       delete [] x;   // Il faut deleter explicitement
     137// 2- On veut que NDataBlock desalloue le tableau
     138//       float *x = new float[5]; ... remplissage de x[] ...;
     139//       NDataBlock A(5,x);
     140//       (Ne Pas Faire "delete [] x;")
    133141{
    134142#ifdef DEBUG_NDATABLOCK
     
    138146#endif
    139147
     148if(br && !data)
     149  throw(NullPtrError("NDataBlock::Alloc br!=NULL && data==NULL\n"));
    140150if(n==0) throw(SzMismatchError("NDataBlock::Alloc n==0\n"));
    141151if(mSRef) Delete();
     
    147157
    148158#ifdef DEBUG_NDATABLOCK
    149 if(!data) NallocData++; NallocSRef++;
     159// Meme dans le cas data!=0 et br==0 (connexion d'un tableau
     160// avec destruction geree par ~NDataBlock (cas 2-) on compte
     161// comme si on avait fait une allocation du tableau (ce qui a ete
     162// fait au niveau du dessus!).
     163if(!br) NallocData++; NallocSRef++;
    150164cout<<"...DEBUG_NDataBlock::Alloc mSz="<<mSz<<" mSRef="<<mSRef
    151165    <<" mSRef->nref="<<mSRef->nref<<" mSRef->data="<< mSRef->data
     
    158172void NDataBlock<T>::Clone(const NDataBlock<T>& a)
    159173// Clone (copie de donnee) a partir de "a"
    160 {
    161     #ifdef DEBUG_NDATABLOCK
    162     cout<<"DEBUG_NDataBlock::Clone("<<this<<","<<&a<<") a.(mSz="
    163         <<a.mSz<<" mSRef="<<a.mSRef<<" IsTemp="<<a.IsTemp()
    164         <<"), mSz="<<mSz<<" mSRef="<<mSRef<<" IsTemp="<<mIsTemp<<endl;
    165     #endif
     174// sauf si "a" est une classe temporaire (dans ce cas share!)
     175{
     176#ifdef DEBUG_NDATABLOCK
     177cout<<"DEBUG_NDataBlock::Clone("<<this<<","<<&a<<") a.(mSz="
     178    <<a.mSz<<" mSRef="<<a.mSRef<<" IsTemp="<<a.IsTemp()
     179    <<"), mSz="<<mSz<<" mSRef="<<mSRef<<" IsTemp="<<mIsTemp<<endl;
     180#endif
     181
    166182if(!a.mSRef) {mSz=0; mSRef=NULL;} // cas ou "a" est cree par defaut
    167183else if(a.IsTemp()) Share(a);
     
    212228#ifdef DEBUG_NDATABLOCK
    213229cout<<"...DEBUG_NDataBlock::Delete() pas de desallocation il reste nref="
    214     <<mSRef->nref<<endl;
     230    <<mSRef->nref<<" Total("<<NallocData<<","<<NallocSRef<<")"<<endl;
    215231#endif
    216232
     
    232248}
    233249
     250////////////////////////////////////////////////////////////////
     251
    234252template <class T>
    235253void NDataBlock<T>::Reset(T v)
     
    243261
    244262template <class T>
    245 void NDataBlock<T>::ReSize(size_t n)
    246 // Re-dimension, dans ce cas re-allocation de la place
    247 {
    248 // Pas de realloc, si pas de changement de taille ?
    249 if (n == mSz)  return;  // $CHECK$ A verifier , Reza 26/04/99
     263void NDataBlock<T>::ReSize(size_t n,bool force_alloc)
     264// Re-dimension, avec re-allocation de la place si n != mSz
     265// Si n==mSz, la place n'est re-allouee que si force_alloc=true
     266{
     267if(!force_alloc && n == mSz)  return;
    250268Alloc(n);
    251269}
     
    264282}
    265283
     284////////////////////////////////////////////////////////////////
    266285//**** Impression
    267286
     
    287306}
    288307
     308////////////////////////////////////////////////////////////////
    289309//**** Surcharge de = : NDataBlock=NDataBlock; NDataBlock=<T> b;
    290310
     
    324344return *this;
    325345}
     346
     347////////////////////////////////////////////////////////////////
    326348
    327349template <class T>
     
    349371}
    350372
     373////////////////////////////////////////////////////////////////
    351374//**** Surcharge de +=,-=,*=,/= (INPLACE): NDataBlock += <T> b;
    352375
     
    388411}
    389412
     413
     414////////////////////////////////////////////////////////////////
    390415//**** Surcharge de +=,-=,*=,/= (INPLACE): NDataBlock += NDataBlock;
    391416
     
    434459}
    435460
    436 //**** Surcharge de +,-,*,/ : NDataBlock = NDataBlock+<T>b; NDataBlock = <T>b+NDataBlock;
     461
     462////////////////////////////////////////////////////////////////
     463//**** Surcharge de +,-,*,/ : NDataBlock = NDataBlock+<T>b;
     464//                            NDataBlock = <T>b+NDataBlock;
    437465// ATTENTION: re-affectation imposee
    438466
     
    492520}
    493521
     522
     523////////////////////////////////////////////////////////////////
    494524//**** Surcharge de +,-,*,/ : NDataBlock = NDataBlock+NDataBlock;
    495525
     
    566596}
    567597
    568 
     598////////////////////////////////////////////////////////////////
    569599// -------------------------------------------------------------------------
    570600//   Les objets delegues pour la gestion de persistance
     
    644674}
    645675
    646 
     676///////////////////////////////////////////////////////////////
    647677#ifdef __CXX_PRAGMA_TEMPLATES__
    648678#pragma define_template NDataBlock<uint_1>
     
    658688#pragma define_template NDataBlock< complex<float> >
    659689#pragma define_template NDataBlock< complex<double> >
    660 
    661690// Instances des delegues FileIO (PPersist)
    662691#pragma define_template FIO_NDataBlock<uint_1>
     
    672701#pragma define_template FIO_NDataBlock< complex<float> >
    673702#pragma define_template FIO_NDataBlock< complex<double> >
    674 
    675703#endif
    676704
     
    689717template class NDataBlock< complex<float> >;
    690718template class NDataBlock< complex<double> >;
    691 
    692719// Instances des delegues FileIO (PPersist)
    693720template class FIO_NDataBlock<uint_1>;
  • trunk/SophyaLib/BaseTools/ndatablock.h

    r269 r275  
    4242  void Clone(const NDataBlock<T>& a);
    4343  void Reset(T v=0);
    44   void ReSize(size_t n);
     44  void ReSize(size_t n,bool force_alloc=false);
    4545  void FillFrom(size_t n,T* data);
    4646 
Note: See TracChangeset for help on using the changeset viewer.