Changeset 265 in Sophya for trunk/SophyaLib/BaseTools
- Timestamp:
- Apr 23, 1999, 7:09:52 PM (26 years ago)
- Location:
- trunk/SophyaLib/BaseTools
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/BaseTools/ndatablock.cc
r261 r265 88 88 // NDataBlock A(5); A.FillFrom(5,x); 89 89 { 90 #ifdef DEBUG_NDATABLOCK 91 cout<<"DEBUG_NDataBlock::Alloc("<<n<<") mSRef="<<mSRef<<endl; 92 #endif 90 #ifdef DEBUG_NDATABLOCK 91 cout<<"DEBUG_NDataBlock::Alloc(" 92 <<n<<","<<data<<","<<br<<") mSRef="<<mSRef<<endl; 93 #endif 93 94 if(n==0) throw(SzMismatchError("NDataBlock::Alloc n==0\n")); 94 95 if(mSRef) Delete(); … … 98 99 if(data) mSRef->data = data; else mSRef->data = new T[n]; 99 100 mSRef->bridge = br; 100 #ifdef DEBUG_NDATABLOCK101 if(!data) NallocData++; NallocSRef++;102 cout<<"DEBUG_NDataBlock::Alloc("<<n<<") mSRef="<<mSRef103 <<" mSRef->nref="<<mSRef->nref<<" mSRef->data="<< mSRef->data104 <<" Total("<<NallocData<<","<<NallocSRef<<")"<<endl;105 #endif101 #ifdef DEBUG_NDATABLOCK 102 if(!data) NallocData++; NallocSRef++; 103 cout<<"...DEBUG_NDataBlock::Alloc("<<n<<") mSRef="<<mSRef 104 <<" mSRef->nref="<<mSRef->nref<<" mSRef->data="<< mSRef->data 105 <<" Total("<<NallocData<<","<<NallocSRef<<")"<<endl; 106 #endif 106 107 } 107 108 … … 110 111 // Clone (copie de donnee) a partir de "a" 111 112 { 112 #ifdef DEBUG_NDATABLOCK 113 cout<<"DEBUG_NDataBlock::Clone("<<&a<<")"<<endl; 114 #endif 113 #ifdef DEBUG_NDATABLOCK 114 cout<<"DEBUG_NDataBlock::Clone("<<&a<<") a.mSz=" 115 <<a.mSz<<" a.mSRef="<<a.mSRef<<" a.IsTemp="<<a.IsTemp()<<endl; 116 #endif 115 117 if(!a.mSRef) {mSz=0; mSRef=NULL;} // cas ou "a" est cree par defaut 116 118 else if(a.IsTemp()) Share(a); … … 122 124 // Partage des donnees avec "a" 123 125 { 124 #ifdef DEBUG_NDATABLOCK125 cout<<"DEBUG_NDataBlock::Share("<<&a<<") a.mSRef="<<a.mSRef<<" mSRef="<<mSRef<<endl;126 #endif126 #ifdef DEBUG_NDATABLOCK 127 cout<<"DEBUG_NDataBlock::Share("<<&a<<") a.mSRef="<<a.mSRef<<" mSRef="<<mSRef<<endl; 128 #endif 127 129 if(&a==NULL) throw(NullPtrError("NDataBlock::Share &a==NULL\n")); 128 130 // on ne peut partager si "a" pas alloue … … 130 132 if(mSRef) Delete(); 131 133 mSz = a.mSz; mSRef = a.mSRef; mSRef->nref++; 132 #ifdef DEBUG_NDATABLOCK133 cout<<"DEBUG_...NDataBlock::Share("<<&a<<") mSRef="<<mSRef134 <<" mSRef->nref="<<mSRef->nref<<" mSRef->data="<< mSRef->data<<endl;135 #endif134 #ifdef DEBUG_NDATABLOCK 135 cout<<"...DEBUG_NDataBlock::Share("<<&a<<") mSRef="<<mSRef 136 <<" mSRef->nref="<<mSRef->nref<<" mSRef->data="<< mSRef->data<<endl; 137 #endif 136 138 } 137 139 … … 140 142 // Pour detruire les pointeurs en tenant compte des references 141 143 { 142 #ifdef DEBUG_NDATABLOCK143 cout<<"DEBUG_NDataBlock::Delete() mSRef="<<mSRef;144 if(mSRef) cout<<" mSRef->nref="<<mSRef->nref<<" mSRef->data="<<mSRef->data;145 cout<<endl;146 #endif144 #ifdef DEBUG_NDATABLOCK 145 cout<<"DEBUG_NDataBlock::Delete() mSRef="<<mSRef; 146 if(mSRef) cout<<" mSRef->nref="<<mSRef->nref<<" mSRef->data="<<mSRef->data; 147 cout<<endl; 148 #endif 147 149 if(mSRef==NULL) return; // cas du createur par defaut 148 150 mSRef->nref--; 149 151 if(mSRef->nref != 0) { 150 #ifdef DEBUG_NDATABLOCK 151 cout<<"DEBUG_...NDataBlock::Delete() pas de desallocation il reste nref="<<mSRef->nref<<endl; 152 #endif 152 #ifdef DEBUG_NDATABLOCK 153 cout<<"...DEBUG_NDataBlock::Delete() pas de desallocation il reste nref=" 154 <<mSRef->nref<<endl; 155 #endif 153 156 return; 154 157 } 155 #ifdef DEBUG_NDATABLOCK156 if(!mSRef->bridge) NallocData--; NallocSRef--;157 cout<<"DEBUG_...NNDataBlock::Delete() desallocation complete il reste nref="<<mSRef->nref 158 <<" Total("<<NallocData<<","<<NallocSRef<<")"<<endl;159 #endif158 #ifdef DEBUG_NDATABLOCK 159 if(!mSRef->bridge) NallocData--; NallocSRef--; 160 cout<<"...DEBUG_NDataBlock::Delete() desallocation complete il reste nref=" 161 <<mSRef->nref<<" Total("<<NallocData<<","<<NallocSRef<<")"<<endl; 162 #endif 160 163 // Si il y a un Bridge les donnees ne n'appartiennent pas, on detruit le Bridge 161 164 if(mSRef->bridge) delete mSRef->bridge; … … 226 229 { 227 230 if(this == &a) return *this; 228 if(a.mSz!=mSz) throw(SzMismatchError("NDataBlock::operator=A size mismatch/null\n")); 231 if(a.mSz!=mSz) 232 throw(SzMismatchError("NDataBlock::operator=A size mismatch/null\n")); 229 233 Share(a); 230 234 return *this; … … 287 291 NDataBlock<T>& NDataBlock<T>::operator += (NDataBlock<T>& a) 288 292 { 289 if(mSz==0 || mSz!=a.mSz) throw(SzMismatchError("NDataBlock::operator+=A size mismatch/null")); 293 if(mSz==0 || mSz!=a.mSz) 294 throw(SzMismatchError("NDataBlock::operator+=A size mismatch/null")); 290 295 T *p=Begin(), *pe=End(), *pa=a.Begin(); 291 296 while (p<pe) *p++ += *pa++; // ca marche meme si *this=a … … 296 301 NDataBlock<T>& NDataBlock<T>::operator -= (NDataBlock<T>& a) 297 302 { 298 if(mSz==0 || mSz!=a.mSz) throw(SzMismatchError("NDataBlock::operator-=A size mismatch/null")); 303 if(mSz==0 || mSz!=a.mSz) 304 throw(SzMismatchError("NDataBlock::operator-=A size mismatch/null")); 299 305 T *p=Begin(), *pe=End(), *pa=a.Begin(); 300 306 while (p<pe) *p++ -= *pa++; // ca marche meme si *this=a … … 305 311 NDataBlock<T>& NDataBlock<T>::operator *= (NDataBlock<T>& a) 306 312 { 307 if(mSz==0 || mSz!=a.mSz) throw(SzMismatchError("NDataBlock::operator*=A size mismatch/null")); 313 if(mSz==0 || mSz!=a.mSz) 314 throw(SzMismatchError("NDataBlock::operator*=A size mismatch/null")); 308 315 T *p=Begin(), *pe=End(), *pa=a.Begin(); 309 316 while (p<pe) *p++ *= *pa++; // ca marche meme si *this=a … … 314 321 NDataBlock<T>& NDataBlock<T>::operator /= (NDataBlock<T>& a) 315 322 { 316 if(mSz==0 || mSz!=a.mSz) throw(SzMismatchError("NDataBlock::operator/=A size mismatch/null")); 323 if(mSz==0 || mSz!=a.mSz) 324 throw(SzMismatchError("NDataBlock::operator/=A size mismatch/null")); 317 325 T *p=Begin(), *pe=End(), *pa=a.Begin(); 318 326 while (p<pe) *p++ /= *pa++; … … 388 396 { 389 397 NDataBlock<T>& a = *this; 390 if(a.mSz!=b.mSz) throw(SzMismatchError("NDataBlock operator C=A+B size mismatch/null\n")); 398 if(a.mSz!=b.mSz) 399 throw(SzMismatchError("NDataBlock operator C=A+B size mismatch/null\n")); 391 400 if(b.IsTemp()) { 392 401 NDataBlock<T> result(b,true); result.SetTemp(true); … … 403 412 { 404 413 NDataBlock<T>& a = *this; 405 if(a.mSz!=b.mSz) throw(SzMismatchError("NDataBlock operator C=A*B size mismatch/null\n")); 414 if(a.mSz!=b.mSz) 415 throw(SzMismatchError("NDataBlock operator C=A*B size mismatch/null\n")); 406 416 if(b.IsTemp()) { 407 417 NDataBlock<T> result(b,true); result.SetTemp(true); … … 418 428 { 419 429 NDataBlock<T>& a = *this; 420 if(a.mSz!=b.mSz) throw(SzMismatchError("NDataBlock operator C=A-B size mismatch/null\n")); 430 if(a.mSz!=b.mSz) 431 throw(SzMismatchError("NDataBlock operator C=A-B size mismatch/null\n")); 421 432 if(b.IsTemp()) { 422 433 NDataBlock<T> result(b,true); result.SetTemp(true); … … 435 446 { 436 447 NDataBlock<T>& a = *this; 437 if(a.mSz!=b.mSz) throw(SzMismatchError("NDataBlock operator C=A/B size mismatch/null\n")); 448 if(a.mSz!=b.mSz) 449 throw(SzMismatchError("NDataBlock operator C=A/B size mismatch/null\n")); 438 450 if(b.IsTemp()) { 439 451 NDataBlock<T> result(b,true); result.SetTemp(true); -
trunk/SophyaLib/BaseTools/ndatablock.h
r259 r265 119 119 template<class T> 120 120 inline NDataBlock<T> operator + (NDataBlock<T>& a,NDataBlock<T>& b) 121 {return a.Add(b);}121 {return a.Add(b);} 122 122 template<class T> 123 123 inline NDataBlock<T> operator - (NDataBlock<T>& a,NDataBlock<T>& b)
Note:
See TracChangeset
for help on using the changeset viewer.