Changeset 268 in Sophya for trunk/SophyaLib/BaseTools/ndatablock.cc
- Timestamp:
- Apr 26, 1999, 5:32:23 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/BaseTools/ndatablock.cc
r267 r268 1 // Gestion de block de donnees avec partage de references 2 // C.Magneville 04/99 3 // LAL (Orsay) / IN2P3-CNRS DAPNIA/SPP (Saclay) / CEA 1 4 #include "machdefs.h" 2 5 #include <stdio.h> … … 7 10 #include "ndatablock.h" 8 11 9 #define DEBUG_NDATABLOCK 12 using namespace PlanckDPC; 13 14 //define DEBUG_NDATABLOCK 10 15 11 16 #ifdef DEBUG_NDATABLOCK … … 25 30 : mSz(0), mSRef(NULL), mIsTemp(false) 26 31 { 32 #ifdef DEBUG_NDATABLOCK 33 cout<<"DEBUG_NDataBlock::NDataBlock("<<this<<",n="<<n<<")"<<endl; 34 #endif 35 27 36 Alloc(n); 28 37 } … … 33 42 : mSz(0), mSRef(NULL), mIsTemp(false) 34 43 { 44 #ifdef DEBUG_NDATABLOCK 45 cout<<"DEBUG_NDataBlock::NDataBlock("<<this 46 <<",data="<<data<<",br="<<br<<")"<<endl; 47 #endif 48 35 49 Alloc(n,data,br); 36 50 } … … 41 55 : mSz(0), mSRef(NULL), mIsTemp(false) 42 56 { 43 } 44 45 template <class T> 46 NDataBlock<T>::NDataBlock(NDataBlock<T>& a) 57 #ifdef DEBUG_NDATABLOCK 58 cout<<"DEBUG_NDataBlock::NDataBlock("<<this<<") default"<<endl; 59 #endif 60 } 61 62 template <class T> 63 NDataBlock<T>::NDataBlock(const NDataBlock<T>& a) 47 64 // Createur par copie 48 65 // ATTENTION: partage les donnees avec "a" … … 51 68 : mSz(0), mSRef(NULL), mIsTemp(false) 52 69 { 70 #ifdef DEBUG_NDATABLOCK 71 cout<<"DEBUG_NDataBlock::NDataBlock("<<this<<",&a="<<&a<<") a.(mSz=" 72 <<a.mSz<<" mSRef="<<a.mSRef<<" IsTemp="<<a.IsTemp()<<")"<<endl; 73 #endif 74 53 75 Share(a); 54 76 } 55 77 56 78 template <class T> 57 NDataBlock<T>::NDataBlock( NDataBlock<T>& a,bool share)79 NDataBlock<T>::NDataBlock(const NDataBlock<T>& a,bool share) 58 80 // Createur avec choix de partager ou non 59 81 : mSz(0), mSRef(NULL), mIsTemp(false) 60 82 { 83 #ifdef DEBUG_NDATABLOCK 84 cout<<"DEBUG_NDataBlock::NDataBlock("<<this<<",&a="<<&a<<",sh=<<"<<share<<")" 85 <<" a.(mSz="<<a.mSz<<" mSRef="<<a.mSRef<<" IsTemp="<<a.IsTemp()<<")"<<endl; 86 #endif 87 61 88 if(share) Share(a); else Clone(a); 62 89 } … … 66 93 // Destructeur 67 94 { 95 #ifdef DEBUG_NDATABLOCK 96 cout<<"DEBUG_NDataBlock::~NDataBlock("<<this<<")"<<endl; 97 #endif 98 68 99 Delete(); 69 100 } 70 101 71 102 template <class T> 72 void NDataBlock<T>::SetTemp(bool temp) 103 void NDataBlock<T>::SetTemp(bool temp) const 73 104 // Set temporary 74 105 { 75 106 mIsTemp=temp; 76 #ifdef DEBUG_NDATABLOCK 77 cout<<"DEBUG_NDataBlock::SetTemp("<<this<<","<<temp 78 <<"), mSz="<<mSz<<" mSRef="<<mSRef<<" IsTemp="<<mIsTemp<<endl; 79 #endif 107 108 #ifdef DEBUG_NDATABLOCK 109 cout<<"DEBUG_NDataBlock::SetTemp("<<this<<","<<temp 110 <<"), mSz="<<mSz<<" mSRef="<<mSRef<<" IsTemp="<<mIsTemp<<endl; 111 #endif 80 112 } 81 113 … … 99 131 // NDataBlock A(5); A.FillFrom(5,x); 100 132 { 101 #ifdef DEBUG_NDATABLOCK 102 cout<<"DEBUG_NDataBlock::Alloc("<<this<<"," 103 <<n<<","<<data<<","<<br<<") mSz="<<mSz 104 <<" mSRef="<<mSRef<<" IsTemp="<<mIsTemp<<endl; 105 #endif 133 #ifdef DEBUG_NDATABLOCK 134 cout<<"DEBUG_NDataBlock::Alloc("<<this<<"," 135 <<n<<","<<data<<","<<br<<") mSz="<<mSz 136 <<" mSRef="<<mSRef<<" IsTemp="<<mIsTemp<<endl; 137 #endif 138 106 139 if(n==0) throw(SzMismatchError("NDataBlock::Alloc n==0\n")); 107 140 if(mSRef) Delete(); … … 111 144 if(data) mSRef->data = data; else mSRef->data = new T[n]; 112 145 mSRef->bridge = br; 113 #ifdef DEBUG_NDATABLOCK 114 if(!data) NallocData++; NallocSRef++; 115 cout<<"...DEBUG_NDataBlock::Alloc mSz="<<mSz<<" mSRef="<<mSRef 116 <<" mSRef->nref="<<mSRef->nref<<" mSRef->data="<< mSRef->data 117 <<" mSRef->bridge="<<mSRef->bridge<<" IsTemp="<<mIsTemp 118 <<" Total("<<NallocData<<","<<NallocSRef<<")"<<endl; 119 #endif 120 } 121 122 template <class T> 123 void NDataBlock<T>::Clone(NDataBlock<T>& a) 146 147 #ifdef DEBUG_NDATABLOCK 148 if(!data) NallocData++; NallocSRef++; 149 cout<<"...DEBUG_NDataBlock::Alloc mSz="<<mSz<<" mSRef="<<mSRef 150 <<" mSRef->nref="<<mSRef->nref<<" mSRef->data="<< mSRef->data 151 <<" mSRef->bridge="<<mSRef->bridge<<" IsTemp="<<mIsTemp 152 <<" Total("<<NallocData<<","<<NallocSRef<<")"<<endl; 153 #endif 154 } 155 156 template <class T> 157 void NDataBlock<T>::Clone(const NDataBlock<T>& a) 124 158 // Clone (copie de donnee) a partir de "a" 125 159 { … … 135 169 136 170 template <class T> 137 void NDataBlock<T>::Share( NDataBlock<T>& a)171 void NDataBlock<T>::Share(const NDataBlock<T>& a) 138 172 // Partage des donnees avec "a" 139 173 { 140 #ifdef DEBUG_NDATABLOCK 141 cout<<"DEBUG_NDataBlock::Share("<<this<<","<<&a<<")"; 142 if(&a!=NULL) cout<<" a.(mSz="<<a.mSz<<" mSRef="<<a.mSRef 143 <<" IsTemp="<<a.IsTemp()<<")"; 144 cout<<", mSz="<<mSz<<" mSRef="<<mSRef<<" IsTemp="<<mIsTemp<<endl; 145 #endif 174 #ifdef DEBUG_NDATABLOCK 175 cout<<"DEBUG_NDataBlock::Share("<<this<<","<<&a<<")"; 176 if(&a!=NULL) cout<<" a.(mSz="<<a.mSz<<" mSRef="<<a.mSRef 177 <<" IsTemp="<<a.IsTemp()<<")"; 178 cout<<", mSz="<<mSz<<" mSRef="<<mSRef<<" IsTemp="<<mIsTemp<<endl; 179 #endif 180 146 181 if(&a==NULL) throw(NullPtrError("NDataBlock::Share &a==NULL\n")); 147 182 // on ne peut partager si "a" pas alloue … … 149 184 if(mSRef) Delete(); 150 185 mSz = a.mSz; mSRef = a.mSRef; mSRef->nref++; 151 #ifdef DEBUG_NDATABLOCK 152 cout<<"...DEBUG_NDataBlock::Share mSz="<<mSz<<" mSRef="<<mSRef 153 <<" mSRef->nref="<<mSRef->nref<<" mSRef->data="<< mSRef->data 154 <<" mSRef->bridge="<<mSRef->bridge<<" IsTemp="<<mIsTemp<<endl; 155 #endif 186 187 #ifdef DEBUG_NDATABLOCK 188 cout<<"...DEBUG_NDataBlock::Share mSz="<<mSz<<" mSRef="<<mSRef 189 <<" mSRef->nref="<<mSRef->nref<<" mSRef->data="<< mSRef->data 190 <<" mSRef->bridge="<<mSRef->bridge<<" IsTemp="<<mIsTemp<<endl; 191 #endif 156 192 } 157 193 … … 160 196 // Pour detruire les pointeurs en tenant compte des references 161 197 { 162 #ifdef DEBUG_NDATABLOCK 163 cout<<"DEBUG_NDataBlock::Delete("<<this<<") mSz="<<mSz 164 <<" mSRef="<<mSRef<<" IsTemp="<<mIsTemp; 165 if(mSRef) 166 cout<<" mSRef->nref="<<mSRef->nref<<" mSRef->data=" 167 <<mSRef->data<<" mSRef->bridge="<<mSRef->bridge; 168 cout<<endl; 169 #endif 198 #ifdef DEBUG_NDATABLOCK 199 cout<<"DEBUG_NDataBlock::Delete("<<this<<") mSz="<<mSz 200 <<" mSRef="<<mSRef<<" IsTemp="<<mIsTemp; 201 if(mSRef) 202 cout<<" mSRef->nref="<<mSRef->nref<<" mSRef->data=" 203 <<mSRef->data<<" mSRef->bridge="<<mSRef->bridge; 204 cout<<endl; 205 #endif 206 170 207 if(mSRef==NULL) return; // cas du createur par defaut 171 208 mSRef->nref--; 172 209 if(mSRef->nref != 0) { 173 #ifdef DEBUG_NDATABLOCK 174 cout<<"...DEBUG_NDataBlock::Delete() pas de desallocation il reste nref=" 175 <<mSRef->nref<<endl; 176 #endif 210 211 #ifdef DEBUG_NDATABLOCK 212 cout<<"...DEBUG_NDataBlock::Delete() pas de desallocation il reste nref=" 213 <<mSRef->nref<<endl; 214 #endif 215 177 216 return; 178 217 } 179 #ifdef DEBUG_NDATABLOCK 180 if(!mSRef->bridge) NallocData--; NallocSRef--; 181 cout<<"...DEBUG_NDataBlock::Delete() desallocation complete il reste nref=" 182 <<mSRef->nref<<" Total("<<NallocData<<","<<NallocSRef<<")"<<endl; 183 #endif 218 219 #ifdef DEBUG_NDATABLOCK 220 if(!mSRef->bridge) NallocData--; NallocSRef--; 221 cout<<"...DEBUG_NDataBlock::Delete() desallocation complete il reste nref=" 222 <<mSRef->nref<<" Total("<<NallocData<<","<<NallocSRef<<")"<<endl; 223 #endif 224 184 225 // Si il y a un Bridge les donnees ne n'appartiennent pas, on detruit le Bridge 185 226 if(mSRef->bridge) delete mSRef->bridge; … … 223 264 224 265 template <class T> 225 void NDataBlock<T>::Print( size_t i1,size_t n)266 void NDataBlock<T>::Print(ostream& os,size_t i1,size_t n) const 226 267 // Impression de n elements a partir de i1 227 268 { … … 229 270 T* p = NULL; Bridge* br = NULL; 230 271 if(mSRef) {nr = mSRef->nref; p = mSRef->data; br = mSRef->bridge;} 231 cout<<"NDataBlock::Print("<<this<<",Sz="<<mSz<<",IsTemp="<<mIsTemp<<")\n"232 233 272 os<<"NDataBlock::Print("<<this<<",Sz="<<mSz<<",IsTemp="<<mIsTemp<<")\n" 273 <<" mSRef="<<mSRef<<"(nref="<<nr<<",data="<<p 274 <<",bridge="<<br<<")"<<endl; 234 275 if(i1>=mSz || n<=0 || !p) return; 235 276 size_t i2 = i1+n; if(i2>mSz) i2=mSz; … … 237 278 while(i1<i2) { 238 279 enl = false; 239 cout<<" "<<(*this)(i1); i1++;240 if(im== 10) {cout<<"\n"; im=1; enl=true;} else im++;241 } 242 if(!enl) cout<<endl;280 os<<" "<<(*this)(i1); i1++; 281 if(im==8) {os<<"\n"; im=1; enl=true;} else im++; 282 } 283 if(!enl) os<<endl; 243 284 } 244 285 … … 246 287 247 288 template <class T> 248 NDataBlock<T>& NDataBlock<T>::operator = ( NDataBlock<T>& a)289 NDataBlock<T>& NDataBlock<T>::operator = (const NDataBlock<T>& a) 249 290 // surcharge avec partage des donnees 250 291 // Ecriture: NDataBlock a; a = b; 251 292 // NDataBlock a(10); a = b; (a est re-affecte) 252 293 { 294 #ifdef DEBUG_NDATABLOCK 295 cout<<"DEBUG_NDataBlock::operator=("<<this<<","<<&a<<") a.(mSz=" 296 <<a.mSz<<" mSRef="<<a.mSRef<<" IsTemp="<<a.IsTemp() 297 <<"), mSz="<<mSz<<" mSRef="<<mSRef<<" IsTemp="<<mIsTemp<<endl; 298 #endif 299 253 300 if(this == &a) return *this; 254 301 if(a.mSz!=mSz) … … 264 311 // NDataBlock a; a = v; ou bien NDataBlock a(10); a = v; 265 312 { 313 #ifdef DEBUG_NDATABLOCK 314 cout<<"DEBUG_NDataBlock::operator=("<<this<<","<<v<<")" 315 <<" mSz="<<mSz<<" mSRef="<<mSRef<<" IsTemp="<<mIsTemp<<endl; 316 #endif 317 266 318 if(mSz==0) throw(SzMismatchError("NDataBlock::operator=v null size\n")); 267 319 T *p=Begin(), *pe=End(); 268 320 while (p<pe) *p++ = v; 269 321 return *this; 322 } 323 324 template <class T> 325 T NDataBlock<T>::Sum(size_t i1,size_t n) const 326 // Somme des elements de i1 a i1+n-1 327 { 328 if(i1>=mSz) return 0; 329 if(n>mSz) n = mSz; if(n==0) n = mSz-i1; 330 T const *p=Begin()+i1, *pe=p+n; 331 T val = 0; 332 while (p<pe) val += *p++; 333 return val; 334 } 335 336 template <class T> 337 T NDataBlock<T>::Product(size_t i1,size_t n) const 338 // Produit des elements de i1 a i1+n-1 339 { 340 if(i1>=mSz) return 0; 341 if(n>mSz) n = mSz; if(n==0) n = mSz-i1; 342 T const *p=Begin()+i1, *pe=p+n; 343 T val = 0; 344 while (p<pe) val *= *p++; 345 return val; 270 346 } 271 347 … … 312 388 313 389 template <class T> 314 NDataBlock<T>& NDataBlock<T>::operator += ( NDataBlock<T>& a)390 NDataBlock<T>& NDataBlock<T>::operator += (const NDataBlock<T>& a) 315 391 { 316 392 if(mSz==0 || mSz!=a.mSz) 317 393 throw(SzMismatchError("NDataBlock::operator+=A size mismatch/null")); 318 T *p=Begin(), *pe=End(), *pa=a.Begin(); 394 T *p=Begin(), *pe=End(); 395 T const * pa=a.Begin(); 319 396 while (p<pe) *p++ += *pa++; // ca marche meme si *this=a 320 397 return *this; … … 322 399 323 400 template <class T> 324 NDataBlock<T>& NDataBlock<T>::operator -= ( NDataBlock<T>& a)401 NDataBlock<T>& NDataBlock<T>::operator -= (const NDataBlock<T>& a) 325 402 { 326 403 if(mSz==0 || mSz!=a.mSz) 327 404 throw(SzMismatchError("NDataBlock::operator-=A size mismatch/null")); 328 T *p=Begin(), *pe=End(), *pa=a.Begin(); 405 T *p=Begin(), *pe=End(); 406 T const *pa=a.Begin(); 329 407 while (p<pe) *p++ -= *pa++; // ca marche meme si *this=a 330 408 return *this; … … 332 410 333 411 template <class T> 334 NDataBlock<T>& NDataBlock<T>::operator *= ( NDataBlock<T>& a)412 NDataBlock<T>& NDataBlock<T>::operator *= (const NDataBlock<T>& a) 335 413 { 336 414 if(mSz==0 || mSz!=a.mSz) 337 415 throw(SzMismatchError("NDataBlock::operator*=A size mismatch/null")); 338 T *p=Begin(), *pe=End(), *pa=a.Begin(); 416 T *p=Begin(), *pe=End(); 417 T const *pa=a.Begin(); 339 418 while (p<pe) *p++ *= *pa++; // ca marche meme si *this=a 340 419 return *this; … … 342 421 343 422 template <class T> 344 NDataBlock<T>& NDataBlock<T>::operator /= ( NDataBlock<T>& a)423 NDataBlock<T>& NDataBlock<T>::operator /= (const NDataBlock<T>& a) 345 424 { 346 425 if(mSz==0 || mSz!=a.mSz) 347 426 throw(SzMismatchError("NDataBlock::operator/=A size mismatch/null")); 348 T *p=Begin(), *pe=End(), *pa=a.Begin(); 427 T *p=Begin(), *pe=End(); 428 T const *pa=a.Begin(); 349 429 while (p<pe) *p++ /= *pa++; 350 430 return *this; … … 355 435 356 436 template <class T> 357 NDataBlock<T> NDataBlock<T>::Add(T b) 437 NDataBlock<T> NDataBlock<T>::Add(T b) const 358 438 // Pour A+b 359 439 { 360 NDataBlock<T> & a = *this;361 NDataBlock<T> result(a,false); result.SetTemp(true);362 return result += b;363 } 364 365 template <class T> 366 NDataBlock<T> NDataBlock<T>::Sub(T b) 440 NDataBlock<T> result(*this,false); result.SetTemp(true); 441 result += b; 442 return result; 443 } 444 445 template <class T> 446 NDataBlock<T> NDataBlock<T>::Sub(T b) const 367 447 // Pour A-b 368 448 { 369 NDataBlock<T>& a = *this; 370 NDataBlock<T> result(a,false); result.SetTemp(true); 449 NDataBlock<T> result(*this,false); result.SetTemp(true); 371 450 return result -= b; 372 451 } 373 452 374 453 template <class T> 375 NDataBlock<T> NDataBlock<T>::SubInv(T b) 454 NDataBlock<T> NDataBlock<T>::SubInv(T b) const 376 455 // Pour b-A 377 456 { 378 NDataBlock<T> & a = *this;379 NDataBlock<T> result(a,false); result.SetTemp(true);380 T *p=result.Begin(), *pe=result.End(), *pa=a.Begin();457 NDataBlock<T> result(*this,false); result.SetTemp(true); 458 T *p=result.Begin(), *pe=result.End(); 459 T const *pa=this->Begin(); 381 460 while(p<pe) {*p++ = b - *pa++;} 382 461 return result; … … 384 463 385 464 template <class T> 386 NDataBlock<T> NDataBlock<T>::Mul(T b) 465 NDataBlock<T> NDataBlock<T>::Mul(T b) const 387 466 // Pour A*b 388 467 { 389 NDataBlock<T>& a = *this; 390 NDataBlock<T> result(a,false); result.SetTemp(true); 468 NDataBlock<T> result(*this,false); result.SetTemp(true); 391 469 return result *= b; 392 470 } 393 471 394 472 template <class T> 395 NDataBlock<T> NDataBlock<T>::Div(T b) 473 NDataBlock<T> NDataBlock<T>::Div(T b) const 396 474 // Pour A/b 397 475 { 398 NDataBlock<T>& a = *this; 399 NDataBlock<T> result(a,false); result.SetTemp(true); 476 NDataBlock<T> result(*this,false); result.SetTemp(true); 400 477 return result /= b; 401 478 } 402 479 403 480 template <class T> 404 NDataBlock<T> NDataBlock<T>::DivInv(T b) 481 NDataBlock<T> NDataBlock<T>::DivInv(T b) const 405 482 // Pour b/A 406 483 { 407 NDataBlock<T> & a = *this;408 NDataBlock<T> result(a,false); result.SetTemp(true);409 T *p=result.Begin(), *pe=result.End(), *pa=a.Begin();484 NDataBlock<T> result(*this,false); result.SetTemp(true); 485 T *p=result.Begin(), *pe=result.End(); 486 T const *pa = this->Begin(); 410 487 while(p<pe) {*p++ = b / *pa++;} 411 488 return result; … … 415 492 416 493 template <class T> 417 NDataBlock<T> NDataBlock<T>::Add( NDataBlock<T>& b)494 NDataBlock<T> NDataBlock<T>::Add(const NDataBlock<T>& b) const 418 495 // Pour A+B 419 496 { 420 NDataBlock<T>& a = *this; 421 if(a.mSz!=b.mSz) 497 if(this->mSz!=b.mSz) 422 498 throw(SzMismatchError("NDataBlock operator C=A+B size mismatch/null\n")); 499 NDataBlock<T> result; result.SetTemp(true); 423 500 if(b.IsTemp()) { 424 NDataBlock<T> result(b,true); result.SetTemp(true);425 re turn result += a;501 result.Share(b); 502 result += *this; 426 503 } else { 427 NDataBlock<T> result(a,false); result.SetTemp(true); 428 return result += b; 429 } 430 } 431 432 template <class T> 433 NDataBlock<T> NDataBlock<T>::Mul(NDataBlock<T>& b) 504 result.Clone(*this); 505 result += b; 506 } 507 return result; 508 } 509 510 template <class T> 511 NDataBlock<T> NDataBlock<T>::Mul(const NDataBlock<T>& b) const 434 512 // Pour A*B 435 513 { 436 NDataBlock<T>& a = *this; 437 if(a.mSz!=b.mSz) 514 if(this->mSz!=b.mSz) 438 515 throw(SzMismatchError("NDataBlock operator C=A*B size mismatch/null\n")); 516 NDataBlock<T> result; result.SetTemp(true); 439 517 if(b.IsTemp()) { 440 NDataBlock<T> result(b,true); result.SetTemp(true);441 re turn result *= a;518 result.Share(b); 519 result *= *this; 442 520 } else { 443 NDataBlock<T> result(a,false); result.SetTemp(true); 444 return result *= b; 445 } 446 } 447 448 template <class T> 449 NDataBlock<T> NDataBlock<T>::Sub(NDataBlock<T>& b) 521 result.Clone(*this); 522 result *= b; 523 } 524 return result; 525 } 526 527 template <class T> 528 NDataBlock<T> NDataBlock<T>::Sub(const NDataBlock<T>& b) const 450 529 // Pour A-B 451 530 { 452 NDataBlock<T>& a = *this; 453 if(a.mSz!=b.mSz) 531 if(this->mSz!=b.mSz) 454 532 throw(SzMismatchError("NDataBlock operator C=A-B size mismatch/null\n")); 533 NDataBlock<T> result; result.SetTemp(true); 455 534 if(b.IsTemp()) { 456 NDataBlock<T> result(b,true); result.SetTemp(true); 457 T *p=result.Begin(), *pe=result.End(), *pa=a.Begin(); 535 result.Share(b); 536 T *p=result.Begin(), *pe=result.End(); 537 T const *pa=this->Begin(); 458 538 while(p<pe) {*p = *pa++ - *p; p++;} 459 return result;460 539 } else { 461 NDataBlock<T> result(a,false); result.SetTemp(true); 462 return result -= b; 463 } 464 } 465 466 template <class T> 467 NDataBlock<T> NDataBlock<T>::Div(NDataBlock<T>& b) 540 result.Clone(*this); 541 result -= b; 542 } 543 return result; 544 } 545 546 template <class T> 547 NDataBlock<T> NDataBlock<T>::Div(const NDataBlock<T>& b) const 468 548 // Pour A/B 469 549 { 470 NDataBlock<T>& a = *this; 471 if(a.mSz!=b.mSz) 550 if(this->mSz!=b.mSz) 472 551 throw(SzMismatchError("NDataBlock operator C=A/B size mismatch/null\n")); 552 NDataBlock<T> result; result.SetTemp(true); 473 553 if(b.IsTemp()) { 474 NDataBlock<T> result(b,true); result.SetTemp(true); 475 T *p=result.Begin(), *pe=result.End(), *pa=a.Begin(); 554 result.Share(b); 555 T *p=result.Begin(), *pe=result.End(); 556 T const *pa=this->Begin(); 476 557 while(p<pe) {*p = *pa++ / *p; p++;} 477 return result;478 558 } else { 479 NDataBlock<T> result(a,false); result.SetTemp(true); 480 return result /= b; 481 } 559 result.Clone(*this); 560 result /= b; 561 } 562 return result; 482 563 } 483 564 … … 494 575 #pragma define_template NDataBlock<r_4> 495 576 #pragma define_template NDataBlock<r_8> 496 // pas de definitions de cout pour les complex ?? 497 //#pragma define_template NDataBlock< complex<float> > 498 //#pragma define_template NDataBlock< complex<double> > 577 #pragma define_template NDataBlock< complex<float> > 578 #pragma define_template NDataBlock< complex<double> > 499 579 #endif 500 580
Note:
See TracChangeset
for help on using the changeset viewer.