Changeset 257 in Sophya for trunk/SophyaLib/BaseTools


Ignore:
Timestamp:
Apr 23, 1999, 2:49:50 PM (26 years ago)
Author:
ansari
Message:

version qui compile cmv 23/4/99

Location:
trunk/SophyaLib/BaseTools
Files:
2 edited

Legend:

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

    r249 r257  
    7676// Si br==NULL   : les donnees nous appartiennent
    7777//    br!=NULL   : les donnees ne nous appartiennent pas (ex Blitz)
    78 {
    79 #ifdef DEBUG_NDATABLOCK
    80 cout<<"NDataBlock::Alloc("<<n<<") mSRef="<<mSRef<<endl;
     78// Exemple: on veut connecter a un tableau de T*
     79// -- On veut que NDataBlock ne desalloue pas le tableau
     80//   float *x = new float[5]; ... remplissage de x[] ...;
     81//   NDataBlock A(5,x,new Bridge);
     82//   delete [] x;   // Il faut deleter explicitement
     83// -- On veut que NDataBlock desalloue le tableau
     84//          ( Ne Pas Faire "delete [] x;" )
     85//   float *x = new float[5]; ... remplissage de x[] ...;
     86//   NDataBlock A(5,x);
     87//   -- Autre solution:
     88//   NDataBlock A(5); A.FillFrom(5,x);
     89{
     90#ifdef DEBUG_NDATABLOCK
     91cout<<"DEBUG_NDataBlock::Alloc("<<n<<") mSRef="<<mSRef<<endl;
    8192#endif
    8293if(n==0) throw(SzMismatchError("NDataBlock::Alloc n==0\n"));
     
    89100#ifdef DEBUG_NDATABLOCK
    90101if(!data) NallocData++; NallocSRef++;
    91 cout<<"NDataBlock::Alloc("<<n<<") mSRef="<<mSRef
    92     <<" mSRef->nref"<<mSRef->nref<<" mSRef->data"<< mSRef->data
     102cout<<"DEBUG_NDataBlock::Alloc("<<n<<") mSRef="<<mSRef
     103    <<" mSRef->nref"<<mSRef->nref<<" mSRef->data "<< mSRef->data
    93104    <<" Total("<<NallocData<<","<<NallocSRef<<")"<<endl;
    94105#endif
     
    100111{
    101112#ifdef DEBUG_NDATABLOCK
    102 cout<<"NDataBlock::Clone("<<&a<<endl;
     113  cout<<"DEBUG_NDataBlock::Clone("<<&a<<")"<<endl;
    103114#endif
    104115if(!a.mSRef) {mSz=0; mSRef=NULL;} // cas ou "a" est cree par defaut
     
    112123{
    113124#ifdef DEBUG_NDATABLOCK
    114 cout<<"NDataBlock::Share("<<&a<<") a.mSRef="<<a.mSRef<<" mSRef="<<mSRef<<endl;
     125cout<<"DEBUG_NDataBlock::Share("<<&a<<") a.mSRef="<<a.mSRef<<" mSRef="<<mSRef<<endl;
    115126#endif
    116127if(&a==NULL) throw(NullPtrError("NDataBlock::Share  &a==NULL\n"));
     
    120131mSz = a.mSz; mSRef = a.mSRef; mSRef->nref++;
    121132#ifdef DEBUG_NDATABLOCK
    122 cout<<"...NDataBlock::Share("<<&a<<") mSRef="<<mSRef
    123     <<" mSRef->nref"<<mSRef->nref<<" mSRef->data"<< mSRef->data<<endl;
     133cout<<"DEBUG_...NDataBlock::Share("<<&a<<") mSRef="<<mSRef
     134    <<" mSRef->nref"<<mSRef->nref<<" mSRef->data "<< mSRef->data<<endl;
    124135#endif
    125136}
     
    129140// Pour detruire les pointeurs en tenant compte des references
    130141{
    131 #ifdef DEBUG_NDATABLOCK
    132 cout<<"NDataBlock::Delete() mSRef="<<mSRef;
    133 if(mSRef) cout<<" mSRef->nref"<<mSRef->nref<<" mSRef->data"<<mSRef->data;
    134 cout<<endl;
    135 #endif
     142    #ifdef DEBUG_NDATABLOCK
     143    cout<<"DEBUG_NDataBlock::Delete() mSRef="<<mSRef;
     144    if(mSRef) cout<<" mSRef->nref"<<mSRef->nref<<" mSRef->data "<<mSRef->data;
     145    cout<<endl;
     146    #endif
    136147if(mSRef==NULL) return; // cas du createur par defaut
    137148mSRef->nref--;
    138149if(mSRef->nref != 0) {
    139150#ifdef DEBUG_NDATABLOCK
    140   cout<<"...NDataBlock::Delete() pas de desallocation il reste nref="<<mSRef->nref<<endl;
     151  cout<<"DEBUG_...NDataBlock::Delete() pas de desallocation il reste nref="<<mSRef->nref<<endl;
    141152#endif
    142153  return;
     
    144155#ifdef DEBUG_NDATABLOCK
    145156if(!mSRef->bridge) NallocData--; NallocSRef--;
    146 cout<<"...NNDataBlock::Delete() desallocation complete il reste nref="<<mSRef->nref
     157cout<<"DEBUG_...NNDataBlock::Delete() desallocation complete il reste nref="<<mSRef->nref
    147158    <<" Total("<<NallocData<<","<<NallocSRef<<")"<<endl;
    148159#endif
     
    162173}
    163174
     175template <class T>
     176void NDataBlock<T>::FillFrom(size_t n,T* data)
     177// Remplissage par un tableau de donnees
     178// - Si classe vide : creation de l'espace memoire
     179// - Si classe connectee : on ecrit selon la longueur
     180{
     181if(data==NULL) throw(NullPtrError("NDataBlock::FillFrom  data==NULL\n"));
     182if(n==0) throw(ParmError("NDataBlock::FillFrom  n<=0\n"));
     183if(mSRef==NULL) Alloc(n); // cas du createur par default
     184if(mSz<n) n= mSz;
     185memcpy(Data(),data,n*sizeof(T));
     186}
     187
    164188//**** Impression
    165189
     
    174198if(i1>=mSz || n<=0 || !p) return;
    175199size_t i2 = i1+n; if(i2>mSz) i2=mSz;
    176 size_t im = 1;
     200size_t im = 1; bool enl;
    177201while(i1<i2) {
     202  enl = false;
    178203  cout<<" "<<(*this)(i1);  i1++;
    179   if(im==10) {cout<<"\n"; im=1;} else im++;
    180 }
     204  if(im==10) {cout<<"\n"; im=1; enl=true;} else im++;
     205}
     206if(!enl) cout<<endl;
    181207}
    182208
     
    284310}
    285311
    286 //**** FIN DES METHODES DE LA CLASSE
    287 
    288312//**** Surcharge de +,-,*,/ : NDataBlock = NDataBlock+<T>b; NDataBlock = <T>b+NDataBlock;
    289313// ATTENTION: re-affectation imposee
    290314
    291315template <class T>
    292 NDataBlock<T> operator + (const NDataBlock<T>& a, T b)
    293 {
     316NDataBlock<T>& Add(T b)
     317// Pour A+b
     318{
     319NDataBlock<T>& a = *this;
    294320NDataBlock<T> result(a,false); result.SetTemp(true);
    295321return (result += b);
     
    297323
    298324template <class T>
    299 NDataBlock<T> operator + (T b, const NDataBlock<T>& a)
    300 {
    301 NDataBlock<T> result(a,false); result.SetTemp(true);
    302 return (result += b);
    303 }
    304 
    305 template <class T>
    306 NDataBlock<T> operator - (const NDataBlock<T>& a, T b)
    307 {
     325NDataBlock<T>& Sub(T b)
     326// Pour A-b
     327{
     328NDataBlock<T>& a = *this;
    308329NDataBlock<T> result(a,false); result.SetTemp(true);
    309330return (result -= b);
     
    311332
    312333template <class T>
    313 NDataBlock<T> operator - (T b, const NDataBlock<T>& a)
    314 {
     334NDataBlock<T>& SubInv(T b)
     335// Pour b-A
     336{
     337NDataBlock<T>& a = *this;
    315338NDataBlock<T> result(a,false); result.SetTemp(true);
    316339T *p=result.Begin(), *pe=result.End(), *pa=a.Begin();
     
    320343
    321344template <class T>
    322 NDataBlock<T> operator * (const NDataBlock<T>& a, T b)
    323 {
     345NDataBlock<T>& Mult(T b)
     346// Pour A*b
     347{
     348NDataBlock<T>& a = *this;
    324349NDataBlock<T> result(a,false); result.SetTemp(true);
    325350return (result *= b);
     
    327352
    328353template <class T>
    329 NDataBlock<T> operator * (T b, const NDataBlock<T>& a)
    330 {
    331 NDataBlock<T> result(a,false); result.SetTemp(true);
    332 return (result *= b);
    333 }
    334 
    335 template <class T>
    336 NDataBlock<T> operator / (const NDataBlock<T>& a, T b)
    337 {
     354NDataBlock<T>& Div(T b)
     355// Pour A/b
     356{
     357NDataBlock<T>& a = *this;
    338358NDataBlock<T> result(a,false); result.SetTemp(true);
    339359return (result /= b);
     
    341361
    342362template <class T>
    343 NDataBlock<T> operator / (T b, const NDataBlock<T>& a)
    344 {
     363NDataBlock<T>& DivInv(T b)
     364// Pour b/A
     365{
     366NDataBlock<T>& a = *this;
    345367NDataBlock<T> result(a,false); result.SetTemp(true);
    346368T *p=result.Begin(), *pe=result.End(), *pa=a.Begin();
     
    352374
    353375template <class T>
    354 NDataBlock<T> operator + (const NDataBlock<T>& a, const NDataBlock<T>& b)
    355 {
     376NDataBlock<T>& Add(const NDataBlock<T>& b)
     377// Pour A+B
     378{
     379NDataBlock<T>& a = *this;
    356380if(a.mSz!=b.mSz) throw(SzMismatchError("NDataBlock operator C=A+B size mismatch/null\n"));
    357381if(b.IsTemp()) {
     
    365389
    366390template <class T>
    367 NDataBlock<T> operator * (const NDataBlock<T>& a, const NDataBlock<T>& b)
    368 {
     391NDataBlock<T>& Mul(const NDataBlock<T>& b)
     392// Pour A*B
     393{
     394NDataBlock<T>& a = *this;
    369395if(a.mSz!=b.mSz) throw(SzMismatchError("NDataBlock operator C=A*B size mismatch/null\n"));
    370396if(b.IsTemp()) {
     
    378404
    379405template <class T>
    380 NDataBlock<T> operator - (const NDataBlock<T>& a, const NDataBlock<T>& b)
    381 {
     406NDataBlock<T>& Sub(const NDataBlock<T>& b)
     407// Pour A-B
     408{
     409NDataBlock<T>& a = *this;
    382410if(a.mSz!=b.mSz) throw(SzMismatchError("NDataBlock operator C=A-B size mismatch/null\n"));
    383411if(b.IsTemp()) {
     
    393421
    394422template <class T>
    395 NDataBlock<T> operator / (const NDataBlock<T>& a, const NDataBlock<T>& b)
    396 {
     423NDataBlock<T>& Div(const NDataBlock<T>& b)
     424// Pour A/B
     425{
     426NDataBlock<T>& a = *this;
    397427if(a.mSz!=b.mSz) throw(SzMismatchError("NDataBlock operator C=A/B size mismatch/null\n"));
    398428if(b.IsTemp()) {
     
    406436}
    407437}
    408 
    409 
    410438
    411439
     
    421449#pragma define_template NDataBlock<r_4>
    422450#pragma define_template NDataBlock<r_8>
    423 #pragma define_template NDataBlock< complex<float> >
    424 #pragma define_template NDataBlock< complex<double> >
     451// pas de definitions de cout pour les complex ??
     452//#pragma define_template NDataBlock< complex<float> >
     453//#pragma define_template NDataBlock< complex<double> >
    425454#endif
    426455
     
    454483template class NDataBlock< complex<double> >;
    455484#endif
    456 
    457 #ifdef __CXX_PRAGMA_TEMPLATES__
    458 #pragma define_template (operator+) <float,float> mais comment on fait ca! CMV_A_FAIRE
    459 #endif
    460 
    461 #ifdef __GNU_TEMPLATES__
    462 template NDataBlock<T> operator + (const NDataBlock<T>&, const NDataBlock<T>&); mais comment on fait ca! CMV_A_FAIRE
    463 #endif
    464 
    465 #if defined(__ANSI_TEMPLATES__)
    466 #endif
  • trunk/SophyaLib/BaseTools/ndatablock.h

    r249 r257  
    3030  inline void SetTemp(bool temp) {mIsTemp=temp;}
    3131
    32   // Gestion taille
     32  // Gestion taille/Remplissage
    3333  void Clone(NDataBlock<T>& a);
    3434  void ReSize(size_t n);
     35  void FillFrom(size_t n,T* data);
    3536 
    3637  // Informations pointeur/data
     
    6263  NDataBlock<T>& operator /= (NDataBlock<T>& a);
    6364
     65  NDataBlock<T>& Add(T b);
     66  NDataBlock<T>& Sub(T b);
     67  NDataBlock<T>& SubInv(T b);
     68  NDataBlock<T>& Mul(T b);
     69  NDataBlock<T>& Div(T b);
     70  NDataBlock<T>& DivInv(T b);
     71
     72  NDataBlock<T>& Add(const NDataBlock<T>& b);
     73  NDataBlock<T>& Sub(const NDataBlock<T>& b);
     74  NDataBlock<T>& SubInv(const NDataBlock<T>& b);
     75  NDataBlock<T>& Mul(const NDataBlock<T>& b);
     76  NDataBlock<T>& Div(const NDataBlock<T>& b);
     77  NDataBlock<T>& DivInv(const NDataBlock<T>& b);
    6478
    6579protected:
     
    7791
    7892
    79 template<class T> NDataBlock<T> operator + (const NDataBlock<T>& a, T b);
    80 template<class T> NDataBlock<T> operator + (T b,const NDataBlock<T>& a);
    81 template<class T> NDataBlock<T> operator - (const NDataBlock<T>& a, T b);
    82 template<class T> NDataBlock<T> operator - (T b,const NDataBlock<T>& a);
    83 template<class T> NDataBlock<T> operator * (const NDataBlock<T>& a, T b);
    84 template<class T> NDataBlock<T> operator * (T b, const NDataBlock<T>& a);
    85 template<class T> NDataBlock<T> operator / (const NDataBlock<T>& a, T b);
     93template<class T> inline NDataBlock<T> operator + (const NDataBlock<T>& a,T b)
     94                                                  {return a.Add(b);}
     95template<class T> inline NDataBlock<T> operator + (T b,const NDataBlock<T>& a)
     96                                                  {return a.Add(b);}
     97template<class T> inline NDataBlock<T> operator - (const NDataBlock<T>& a,T b)
     98                                                  {return a.Sub(b);}
     99template<class T> inline NDataBlock<T> operator - (T b,const NDataBlock<T>& a)
     100                                                  {return a.SubInv(b);}
     101template<class T> inline NDataBlock<T> operator * (const NDataBlock<T>& a,T b)
     102                                                  {return a.Mul(b);}
     103template<class T> inline NDataBlock<T> operator * (T b,const NDataBlock<T>& a)
     104                                                  {return a.Mul(b);}
     105template<class T> inline NDataBlock<T> operator / (const NDataBlock<T>& a,T b)
     106                                                  {return a.Div(b);}
     107template<class T> inline NDataBlock<T> operator / (T b,const NDataBlock<T>& a)
     108                                                  {return a.DivInv(b);}
    86109
    87 template<class T> NDataBlock<T> operator + (const NDataBlock<T>& a, const NDataBlock<T>& b);
    88 template<class T> NDataBlock<T> operator - (const NDataBlock<T>& a, const NDataBlock<T>& b);
    89 template<class T> NDataBlock<T> operator * (const NDataBlock<T>& a, const NDataBlock<T>& b);
    90 template<class T> NDataBlock<T> operator / (const NDataBlock<T>& a, const NDataBlock<T>& b);
     110template<class T> inline NDataBlock<T> operator + (const NDataBlock<T>& a,const NDataBlock<T>& b)
     111                                                  {return a.Add(b);}
     112template<class T> inline NDataBlock<T> operator - (const NDataBlock<T>& a,const NDataBlock<T>& b)
     113                                                  {return a.Sub(b);}
     114template<class T> inline NDataBlock<T> operator * (const NDataBlock<T>& a,const NDataBlock<T>& b)
     115                                                  {return a.Mul(b);}
     116template<class T> inline NDataBlock<T> operator / (const NDataBlock<T>& a,const NDataBlock<T>& b)
     117                                                  {return a.Div(b);}
     118
    91119
    92120#endif
Note: See TracChangeset for help on using the changeset viewer.