00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00025 #include "matpackV.h"
00026
00027
00028
00029
00031 Index ConstTensor5View::nshelves() const
00032 {
00033 return msr.mextent;
00034 }
00035
00037 Index ConstTensor5View::nbooks() const
00038 {
00039 return mbr.mextent;
00040 }
00041
00043 Index ConstTensor5View::npages() const
00044 {
00045 return mpr.mextent;
00046 }
00047
00049 Index ConstTensor5View::nrows() const
00050 {
00051 return mrr.mextent;
00052 }
00053
00055 Index ConstTensor5View::ncols() const
00056 {
00057 return mcr.mextent;
00058 }
00059
00063 ConstTensor5View ConstTensor5View::operator()(const Range& s,
00064 const Range& b,
00065 const Range& p,
00066 const Range& r,
00067 const Range& c) const
00068 {
00069 return ConstTensor5View(mdata,
00070 msr, mbr, mpr, mrr, mcr,
00071 s, b, p, r, c);
00072 }
00073
00076 ConstTensor4View ConstTensor5View::operator()(const Range& s,
00077 const Range& b,
00078 const Range& p,
00079 const Range& r,
00080 Index c ) const
00081 {
00082
00083 assert( 0 <= c );
00084 assert( c < mcr.mextent );
00085
00086 return ConstTensor4View(mdata +
00087 mcr.mstart + c * mcr.mstride,
00088 msr, mbr, mpr, mrr,
00089 s, b, p, r);
00090 }
00091
00094 ConstTensor4View ConstTensor5View::operator()(const Range& s,
00095 const Range& b,
00096 const Range& p,
00097 Index r,
00098 const Range& c) const
00099 {
00100
00101 assert( 0 <= r );
00102 assert( r < mrr.mextent );
00103
00104 return ConstTensor4View(mdata +
00105 mrr.mstart + r * mrr.mstride,
00106 msr, mbr, mpr, mcr,
00107 s, b, p, c);
00108 }
00109
00112 ConstTensor4View ConstTensor5View::operator()(const Range& s,
00113 const Range& b,
00114 Index p,
00115 const Range& r,
00116 const Range& c) const
00117 {
00118
00119 assert( 0 <= p );
00120 assert( p < mpr.mextent );
00121
00122 return ConstTensor4View(mdata +
00123 mpr.mstart + p * mpr.mstride,
00124 msr, mbr, mrr, mcr,
00125 s, b, r, c);
00126 }
00127
00130 ConstTensor4View ConstTensor5View::operator()(const Range& s,
00131 Index b,
00132 const Range& p,
00133 const Range& r,
00134 const Range& c) const
00135 {
00136
00137 assert( 0 <= b );
00138 assert( b < mbr.mextent );
00139
00140 return ConstTensor4View(mdata +
00141 mbr.mstart + b * mbr.mstride,
00142 msr, mpr, mrr, mcr,
00143 s, p, r, c);
00144 }
00145
00148 ConstTensor4View ConstTensor5View::operator()(Index s,
00149 const Range& b,
00150 const Range& p,
00151 const Range& r,
00152 const Range& c) const
00153 {
00154
00155 assert( 0 <= s );
00156 assert( s < msr.mextent );
00157
00158 return ConstTensor4View(mdata +
00159 msr.mstart + s * msr.mstride,
00160 mbr, mpr, mrr, mcr,
00161 b, p, r, c);
00162 }
00163
00166 ConstTensor3View ConstTensor5View::operator()(const Range& s,
00167 const Range& b,
00168 const Range& p,
00169 Index r,
00170 Index c ) const
00171 {
00172
00173 assert( 0 <= r );
00174 assert( 0 <= c );
00175 assert( r < mrr.mextent );
00176 assert( c < mcr.mextent );
00177
00178 return ConstTensor3View(mdata +
00179 mrr.mstart + r * mrr.mstride +
00180 mcr.mstart + c * mcr.mstride,
00181 msr, mbr, mpr,
00182 s, b, p);
00183 }
00184
00187 ConstTensor3View ConstTensor5View::operator()(const Range& s,
00188 const Range& b,
00189 Index p,
00190 const Range& r,
00191 Index c ) const
00192 {
00193
00194 assert( 0 <= p );
00195 assert( 0 <= c );
00196 assert( p < mpr.mextent );
00197 assert( c < mcr.mextent );
00198
00199 return ConstTensor3View(mdata +
00200 mpr.mstart + p * mpr.mstride +
00201 mcr.mstart + c * mcr.mstride,
00202 msr, mbr, mrr,
00203 s, b, r);
00204 }
00205
00208 ConstTensor3View ConstTensor5View::operator()(const Range& s,
00209 const Range& b,
00210 Index p,
00211 Index r,
00212 const Range& c) const
00213 {
00214
00215 assert( 0 <= p );
00216 assert( 0 <= r );
00217 assert( p < mpr.mextent );
00218 assert( r < mrr.mextent );
00219
00220 return ConstTensor3View(mdata +
00221 mpr.mstart + p * mpr.mstride +
00222 mrr.mstart + r * mrr.mstride,
00223 msr, mbr, mcr,
00224 s, b, c);
00225 }
00226
00229 ConstTensor3View ConstTensor5View::operator()(const Range& s,
00230 Index b,
00231 const Range& p,
00232 Index r,
00233 const Range& c) const
00234 {
00235
00236 assert( 0 <= b );
00237 assert( 0 <= r );
00238 assert( b < mbr.mextent );
00239 assert( r < mrr.mextent );
00240
00241 return ConstTensor3View(mdata +
00242 mbr.mstart + b * mbr.mstride +
00243 mrr.mstart + r * mrr.mstride,
00244 msr, mpr, mcr,
00245 s, p, c);
00246 }
00247
00250 ConstTensor3View ConstTensor5View::operator()(const Range& s,
00251 Index b,
00252 const Range& p,
00253 const Range& r,
00254 Index c ) const
00255 {
00256
00257 assert( 0 <= b );
00258 assert( 0 <= c );
00259 assert( b < mbr.mextent );
00260 assert( c < mcr.mextent );
00261
00262 return ConstTensor3View(mdata +
00263 mbr.mstart + b * mbr.mstride +
00264 mcr.mstart + c * mcr.mstride,
00265 msr, mpr, mrr,
00266 s, p, r);
00267 }
00268
00271 ConstTensor3View ConstTensor5View::operator()(const Range& s,
00272 Index b,
00273 Index p,
00274 const Range& r,
00275 const Range& c) const
00276 {
00277
00278 assert( 0 <= b );
00279 assert( 0 <= p );
00280 assert( b < mbr.mextent );
00281 assert( p < mpr.mextent );
00282
00283 return ConstTensor3View(mdata +
00284 mbr.mstart + b * mbr.mstride +
00285 mpr.mstart + p * mpr.mstride,
00286 msr, mrr, mcr,
00287 s, r, c);
00288 }
00289
00292 ConstTensor3View ConstTensor5View::operator()(Index s,
00293 const Range& b,
00294 Index p,
00295 const Range& r,
00296 const Range& c) const
00297 {
00298
00299 assert( 0 <= s );
00300 assert( 0 <= p );
00301 assert( s < msr.mextent );
00302 assert( p < mpr.mextent );
00303
00304 return ConstTensor3View(mdata +
00305 msr.mstart + s * msr.mstride +
00306 mpr.mstart + p * mpr.mstride,
00307 mbr, mrr, mcr,
00308 b, r, c);
00309 }
00310
00313 ConstTensor3View ConstTensor5View::operator()(Index s,
00314 const Range& b,
00315 const Range& p,
00316 Index r,
00317 const Range& c) const
00318 {
00319
00320 assert( 0 <= s );
00321 assert( 0 <= r );
00322 assert( s < msr.mextent );
00323 assert( r < mrr.mextent );
00324
00325 return ConstTensor3View(mdata +
00326 msr.mstart + s * msr.mstride +
00327 mrr.mstart + r * mrr.mstride,
00328 mbr, mpr, mcr,
00329 b, p, c);
00330 }
00331
00334 ConstTensor3View ConstTensor5View::operator()(Index s,
00335 const Range& b,
00336 const Range& p,
00337 const Range& r,
00338 Index c ) const
00339 {
00340
00341 assert( 0 <= s );
00342 assert( 0 <= c );
00343 assert( s < msr.mextent );
00344 assert( c < mcr.mextent );
00345
00346 return ConstTensor3View(mdata +
00347 msr.mstart + s * msr.mstride +
00348 mcr.mstart + c * mcr.mstride,
00349 mbr, mpr, mrr,
00350 b, p, r);
00351 }
00352
00355 ConstTensor3View ConstTensor5View::operator()(Index s,
00356 Index b,
00357 const Range& p,
00358 const Range& r,
00359 const Range& c) const
00360 {
00361
00362 assert( 0 <= s );
00363 assert( 0 <= b );
00364 assert( s < msr.mextent );
00365 assert( b < mbr.mextent );
00366
00367 return ConstTensor3View(mdata +
00368 msr.mstart + s * msr.mstride +
00369 mbr.mstart + b * mbr.mstride,
00370 mpr, mrr, mcr,
00371 p, r, c);
00372 }
00373
00376 ConstMatrixView ConstTensor5View::operator()(const Range& s,
00377 const Range& b,
00378 Index p,
00379 Index r,
00380 Index c ) const
00381 {
00382
00383 assert( 0 <= p );
00384 assert( 0 <= r );
00385 assert( 0 <= c );
00386 assert( p < mpr.mextent );
00387 assert( r < mrr.mextent );
00388 assert( c < mcr.mextent );
00389
00390 return ConstMatrixView(mdata +
00391 mpr.mstart + p * mpr.mstride +
00392 mrr.mstart + r * mrr.mstride +
00393 mcr.mstart + c * mcr.mstride,
00394 msr, mbr,
00395 s, b);
00396 }
00397
00400 ConstMatrixView ConstTensor5View::operator()(const Range& s,
00401 Index b,
00402 const Range& p,
00403 Index r,
00404 Index c ) const
00405 {
00406
00407 assert( 0 <= b );
00408 assert( 0 <= r );
00409 assert( 0 <= c );
00410 assert( b < mbr.mextent );
00411 assert( r < mrr.mextent );
00412 assert( c < mcr.mextent );
00413
00414 return ConstMatrixView(mdata +
00415 mbr.mstart + b * mbr.mstride +
00416 mrr.mstart + r * mpr.mstride +
00417 mcr.mstart + c * mcr.mstride,
00418 msr, mpr,
00419 s, p);
00420 }
00421
00424 ConstMatrixView ConstTensor5View::operator()(const Range& s,
00425 Index b,
00426 Index p,
00427 const Range& r,
00428 Index c ) const
00429 {
00430
00431 assert( 0 <= b );
00432 assert( 0 <= p );
00433 assert( 0 <= c );
00434 assert( b < mbr.mextent );
00435 assert( p < mpr.mextent );
00436 assert( c < mcr.mextent );
00437
00438 return ConstMatrixView(mdata +
00439 mbr.mstart + b * mbr.mstride +
00440 mpr.mstart + p * mpr.mstride +
00441 mcr.mstart + c * mcr.mstride,
00442 msr, mrr,
00443 s, r);
00444 }
00445
00448 ConstMatrixView ConstTensor5View::operator()(const Range& s,
00449 Index b,
00450 Index p,
00451 Index r,
00452 const Range& c) const
00453 {
00454
00455 assert( 0 <= b );
00456 assert( 0 <= p );
00457 assert( 0 <= r );
00458 assert( b < mbr.mextent );
00459 assert( p < mpr.mextent );
00460 assert( r < mrr.mextent );
00461
00462 return ConstMatrixView(mdata +
00463 mbr.mstart + b * mbr.mstride +
00464 mpr.mstart + p * mpr.mstride +
00465 mrr.mstart + r * mrr.mstride,
00466 msr, mcr,
00467 s, c);
00468 }
00469
00472 ConstMatrixView ConstTensor5View::operator()(Index s,
00473 const Range& b,
00474 Index p,
00475 Index r,
00476 const Range& c) const
00477 {
00478
00479 assert( 0 <= s );
00480 assert( 0 <= p );
00481 assert( 0 <= r );
00482 assert( s < msr.mextent );
00483 assert( p < mpr.mextent );
00484 assert( r < mrr.mextent );
00485
00486 return ConstMatrixView(mdata +
00487 msr.mstart + s * msr.mstride +
00488 mpr.mstart + p * mpr.mstride +
00489 mrr.mstart + r * mrr.mstride,
00490 mbr, mcr,
00491 b, c);
00492 }
00493
00496 ConstMatrixView ConstTensor5View::operator()(Index s,
00497 const Range& b,
00498 Index p,
00499 const Range& r,
00500 Index c ) const
00501 {
00502
00503 assert( 0 <= s );
00504 assert( 0 <= p );
00505 assert( 0 <= c );
00506 assert( s < msr.mextent );
00507 assert( p < mpr.mextent );
00508 assert( c < mcr.mextent );
00509
00510 return ConstMatrixView(mdata +
00511 msr.mstart + s * msr.mstride +
00512 mpr.mstart + p * mpr.mstride +
00513 mcr.mstart + c * mcr.mstride,
00514 mbr, mrr,
00515 b, r);
00516 }
00517
00520 ConstMatrixView ConstTensor5View::operator()(Index s,
00521 const Range& b,
00522 const Range& p,
00523 Index r,
00524 Index c ) const
00525 {
00526
00527 assert( 0 <= s );
00528 assert( 0 <= r );
00529 assert( 0 <= c );
00530 assert( s < msr.mextent );
00531 assert( r < mrr.mextent );
00532 assert( c < mcr.mextent );
00533
00534 return ConstMatrixView(mdata +
00535 msr.mstart + s * msr.mstride +
00536 mrr.mstart + r * mrr.mstride +
00537 mcr.mstart + c * mcr.mstride,
00538 mbr, mpr,
00539 b, p);
00540 }
00541
00544 ConstMatrixView ConstTensor5View::operator()(Index s,
00545 Index b,
00546 const Range& p,
00547 const Range& r,
00548 Index c ) const
00549 {
00550
00551 assert( 0 <= s );
00552 assert( 0 <= b );
00553 assert( 0 <= c );
00554 assert( s < msr.mextent );
00555 assert( b < mbr.mextent );
00556 assert( c < mcr.mextent );
00557
00558 return ConstMatrixView(mdata +
00559 msr.mstart + s * msr.mstride +
00560 mbr.mstart + b * mbr.mstride +
00561 mcr.mstart + c * mcr.mstride,
00562 mpr, mrr,
00563 p, r);
00564 }
00565
00568 ConstMatrixView ConstTensor5View::operator()(Index s,
00569 Index b,
00570 const Range& p,
00571 Index r,
00572 const Range& c) const
00573 {
00574
00575 assert( 0 <= s );
00576 assert( 0 <= b );
00577 assert( 0 <= r );
00578 assert( s < msr.mextent );
00579 assert( b < mbr.mextent );
00580 assert( r < mrr.mextent );
00581
00582 return ConstMatrixView(mdata +
00583 msr.mstart + s * msr.mstride +
00584 mbr.mstart + b * mbr.mstride +
00585 mrr.mstart + r * mrr.mstride,
00586 mpr, mcr,
00587 p, c);
00588 }
00589
00592 ConstMatrixView ConstTensor5View::operator()(Index s,
00593 Index b,
00594 Index p,
00595 const Range& r,
00596 const Range& c) const
00597 {
00598
00599 assert( 0 <= s );
00600 assert( 0 <= b );
00601 assert( 0 <= p );
00602 assert( s < msr.mextent );
00603 assert( b < mbr.mextent );
00604 assert( p < mpr.mextent );
00605
00606 return ConstMatrixView(mdata +
00607 msr.mstart + s * msr.mstride +
00608 mbr.mstart + b * mbr.mstride +
00609 mpr.mstart + p * mpr.mstride,
00610 mrr, mcr,
00611 r, c);
00612 }
00613
00616 ConstVectorView ConstTensor5View::operator()(const Range& s,
00617 Index b,
00618 Index p,
00619 Index r,
00620 Index c ) const
00621 {
00622
00623 assert( 0 <= b );
00624 assert( 0 <= p );
00625 assert( 0 <= r );
00626 assert( 0 <= c );
00627 assert( b < mbr.mextent );
00628 assert( p < mpr.mextent );
00629 assert( r < mrr.mextent );
00630 assert( c < mcr.mextent );
00631
00632 return ConstVectorView(mdata +
00633 mbr.mstart + b * mbr.mstride +
00634 mpr.mstart + p * mpr.mstride +
00635 mrr.mstart + r * mrr.mstride +
00636 mcr.mstart + c * mcr.mstride,
00637 msr,
00638 s);
00639 }
00640
00643 ConstVectorView ConstTensor5View::operator()(Index s,
00644 const Range& b,
00645 Index p,
00646 Index r,
00647 Index c ) const
00648 {
00649
00650 assert( 0 <= s );
00651 assert( 0 <= p );
00652 assert( 0 <= r );
00653 assert( 0 <= c );
00654 assert( s < msr.mextent );
00655 assert( p < mpr.mextent );
00656 assert( r < mrr.mextent );
00657 assert( c < mcr.mextent );
00658
00659 return ConstVectorView(mdata +
00660 msr.mstart + s * msr.mstride +
00661 mpr.mstart + p * mpr.mstride +
00662 mrr.mstart + r * mrr.mstride +
00663 mcr.mstart + c * mcr.mstride,
00664 mbr,
00665 b);
00666 }
00667
00670 ConstVectorView ConstTensor5View::operator()(Index s,
00671 Index b,
00672 const Range& p,
00673 Index r,
00674 Index c ) const
00675 {
00676
00677 assert( 0 <= s );
00678 assert( 0 <= b );
00679 assert( 0 <= r );
00680 assert( 0 <= c );
00681 assert( s < msr.mextent );
00682 assert( b < mbr.mextent );
00683 assert( r < mrr.mextent );
00684 assert( c < mcr.mextent );
00685
00686 return ConstVectorView(mdata +
00687 msr.mstart + s * msr.mstride +
00688 mbr.mstart + b * mbr.mstride +
00689 mrr.mstart + r * mrr.mstride +
00690 mcr.mstart + c * mcr.mstride,
00691 mpr,
00692 p);
00693 }
00694
00697 ConstVectorView ConstTensor5View::operator()(Index s,
00698 Index b,
00699 Index p,
00700 const Range& r,
00701 Index c ) const
00702 {
00703
00704 assert( 0 <= s );
00705 assert( 0 <= b );
00706 assert( 0 <= p );
00707 assert( 0 <= c );
00708 assert( s < msr.mextent );
00709 assert( b < mbr.mextent );
00710 assert( p < mpr.mextent );
00711 assert( c < mcr.mextent );
00712
00713 return ConstVectorView(mdata +
00714 msr.mstart + s * msr.mstride +
00715 mbr.mstart + b * mbr.mstride +
00716 mpr.mstart + p * mpr.mstride +
00717 mcr.mstart + c * mcr.mstride,
00718 mrr,
00719 r);
00720 }
00721
00724 ConstVectorView ConstTensor5View::operator()(Index s,
00725 Index b,
00726 Index p,
00727 Index r,
00728 const Range& c) const
00729 {
00730
00731 assert( 0 <= s );
00732 assert( 0 <= b );
00733 assert( 0 <= p );
00734 assert( 0 <= r );
00735 assert( s < msr.mextent );
00736 assert( b < mbr.mextent );
00737 assert( p < mpr.mextent );
00738 assert( r < mrr.mextent );
00739
00740 return ConstVectorView(mdata +
00741 msr.mstart + s * msr.mstride +
00742 mbr.mstart + b * mbr.mstride +
00743 mpr.mstart + p * mpr.mstride +
00744 mrr.mstart + r * mrr.mstride,
00745 mcr,
00746 c);
00747 }
00748
00750 ConstIterator5D ConstTensor5View::begin() const
00751 {
00752 return ConstIterator5D( ConstTensor4View(mdata + msr.mstart,
00753 mbr, mpr, mrr, mcr),
00754 msr.mstride );
00755 }
00756
00758 ConstIterator5D ConstTensor5View::end() const
00759 {
00760 return ConstIterator5D( ConstTensor4View(mdata + msr.mstart +
00761 (msr.mextent) * msr.mstride,
00762 mbr, mpr, mrr, mcr),
00763 msr.mstride );
00764 }
00765
00767 ConstTensor5View::ConstTensor5View(const ConstTensor4View& a) :
00768 msr(0,1,
00769 a.mbr.mextent*
00770 a.mpr.mextent*
00771 a.mrr.mextent*
00772 a.mcr.mextent),
00773 mbr(a.mbr),
00774 mpr(a.mpr),
00775 mrr(a.mrr),
00776 mcr(a.mcr),
00777 mdata(a.mdata)
00778 {
00779
00780 }
00781
00784 ConstTensor5View::ConstTensor5View() :
00785 msr(0,0,1),
00786 mbr(0,0,1),
00787 mpr(0,0,1),
00788 mrr(0,0,1),
00789 mcr(0,0,1),
00790 mdata(NULL)
00791 {
00792
00793 }
00794
00799 ConstTensor5View::ConstTensor5View(Numeric *data,
00800 const Range& sr,
00801 const Range& br,
00802 const Range& pr,
00803 const Range& rr,
00804 const Range& cr) :
00805 msr(sr),
00806 mbr(br),
00807 mpr(pr),
00808 mrr(rr),
00809 mcr(cr),
00810 mdata(data)
00811 {
00812
00813 }
00814
00822 ConstTensor5View::ConstTensor5View(Numeric *data,
00823 const Range& ps,
00824 const Range& pb,
00825 const Range& pp,
00826 const Range& pr,
00827 const Range& pc,
00828 const Range& ns,
00829 const Range& nb,
00830 const Range& np,
00831 const Range& nr,
00832 const Range& nc) :
00833 msr(ps,ns),
00834 mbr(pb,nb),
00835 mpr(pp,np),
00836 mrr(pr,nr),
00837 mcr(pc,nc),
00838 mdata(data)
00839 {
00840
00841 }
00842
00846 ostream& operator<<(ostream& os, const ConstTensor5View& v)
00847 {
00848
00849 ConstIterator5D is = v.begin();
00850 const ConstIterator5D end_shelf = v.end();
00851
00852 if ( is != end_shelf ) {
00853 os << *is;
00854 ++is;
00855 }
00856
00857 for ( ; is != end_shelf; ++is ) {
00858 os << "\n\n";
00859 os << *is;
00860 }
00861
00862 return os;
00863 }
00864
00865
00866
00867
00868
00873 ConstTensor5View Tensor5View::operator()(const Range& s,
00874 const Range& b,
00875 const Range& p,
00876 const Range& r,
00877 const Range& c) const
00878 {
00879 return ConstTensor5View::operator()(s,b,p,r,c);
00880 }
00881
00886 ConstTensor4View Tensor5View::operator()(const Range& s,
00887 const Range& b,
00888 const Range& p,
00889 const Range& r,
00890 Index c ) const
00891 {
00892 return ConstTensor5View::operator()(s,b,p,r,c);
00893 }
00894
00899 ConstTensor4View Tensor5View::operator()(const Range& s,
00900 const Range& b,
00901 const Range& p,
00902 Index r,
00903 const Range& c) const
00904 {
00905 return ConstTensor5View::operator()(s,b,p,r,c);
00906 }
00907
00912 ConstTensor4View Tensor5View::operator()(const Range& s,
00913 const Range& b,
00914 Index p,
00915 const Range& r,
00916 const Range& c) const
00917 {
00918 return ConstTensor5View::operator()(s,b,p,r,c);
00919 }
00920
00925 ConstTensor4View Tensor5View::operator()(const Range& s,
00926 Index b,
00927 const Range& p,
00928 const Range& r,
00929 const Range& c) const
00930 {
00931 return ConstTensor5View::operator()(s,b,p,r,c);
00932 }
00933
00938 ConstTensor4View Tensor5View::operator()(Index s,
00939 const Range& b,
00940 const Range& p,
00941 const Range& r,
00942 const Range& c) const
00943 {
00944 return ConstTensor5View::operator()(s,b,p,r,c);
00945 }
00946
00951 ConstTensor3View Tensor5View::operator()(const Range& s,
00952 const Range& b,
00953 const Range& p,
00954 Index r,
00955 Index c ) const
00956 {
00957 return ConstTensor5View::operator()(s,b,p,r,c);
00958 }
00959
00964 ConstTensor3View Tensor5View::operator()(const Range& s,
00965 const Range& b,
00966 Index p,
00967 const Range& r,
00968 Index c ) const
00969 {
00970 return ConstTensor5View::operator()(s,b,p,r,c);
00971 }
00972
00977 ConstTensor3View Tensor5View::operator()(const Range& s,
00978 const Range& b,
00979 Index p,
00980 Index r,
00981 const Range& c) const
00982 {
00983 return ConstTensor5View::operator()(s,b,p,r,c);
00984 }
00985
00990 ConstTensor3View Tensor5View::operator()(const Range& s,
00991 Index b,
00992 const Range& p,
00993 Index r,
00994 const Range& c) const
00995 {
00996 return ConstTensor5View::operator()(s,b,p,r,c);
00997 }
00998
01003 ConstTensor3View Tensor5View::operator()(const Range& s,
01004 Index b,
01005 const Range& p,
01006 const Range& r,
01007 Index c ) const
01008 {
01009 return ConstTensor5View::operator()(s,b,p,r,c);
01010 }
01011
01016 ConstTensor3View Tensor5View::operator()(const Range& s,
01017 Index b,
01018 Index p,
01019 const Range& r,
01020 const Range& c) const
01021 {
01022 return ConstTensor5View::operator()(s,b,p,r,c);
01023 }
01024
01029 ConstTensor3View Tensor5View::operator()(Index s,
01030 const Range& b,
01031 Index p,
01032 const Range& r,
01033 const Range& c) const
01034 {
01035 return ConstTensor5View::operator()(s,b,p,r,c);
01036 }
01037
01042 ConstTensor3View Tensor5View::operator()(Index s,
01043 const Range& b,
01044 const Range& p,
01045 Index r,
01046 const Range& c) const
01047 {
01048 return ConstTensor5View::operator()(s,b,p,r,c);
01049 }
01050
01055 ConstTensor3View Tensor5View::operator()(Index s,
01056 const Range& b,
01057 const Range& p,
01058 const Range& r,
01059 Index c ) const
01060 {
01061 return ConstTensor5View::operator()(s,b,p,r,c);
01062 }
01063
01068 ConstTensor3View Tensor5View::operator()(Index s,
01069 Index b,
01070 const Range& p,
01071 const Range& r,
01072 const Range& c) const
01073 {
01074 return ConstTensor5View::operator()(s,b,p,r,c);
01075 }
01076
01081 ConstMatrixView Tensor5View::operator()(const Range& s,
01082 const Range& b,
01083 Index p,
01084 Index r,
01085 Index c ) const
01086 {
01087 return ConstTensor5View::operator()(s,b,p,r,c);
01088 }
01089
01094 ConstMatrixView Tensor5View::operator()(const Range& s,
01095 Index b,
01096 const Range& p,
01097 Index r,
01098 Index c ) const
01099 {
01100 return ConstTensor5View::operator()(s,b,p,r,c);
01101 }
01102
01107 ConstMatrixView Tensor5View::operator()(const Range& s,
01108 Index b,
01109 Index p,
01110 const Range& r,
01111 Index c ) const
01112 {
01113 return ConstTensor5View::operator()(s,b,p,r,c);
01114 }
01115
01120 ConstMatrixView Tensor5View::operator()(const Range& s,
01121 Index b,
01122 Index p,
01123 Index r,
01124 const Range& c) const
01125 {
01126 return ConstTensor5View::operator()(s,b,p,r,c);
01127 }
01128
01133 ConstMatrixView Tensor5View::operator()(Index s,
01134 const Range& b,
01135 Index p,
01136 Index r,
01137 const Range& c) const
01138 {
01139 return ConstTensor5View::operator()(s,b,p,r,c);
01140 }
01141
01146 ConstMatrixView Tensor5View::operator()(Index s,
01147 const Range& b,
01148 Index p,
01149 const Range& r,
01150 Index c ) const
01151 {
01152 return ConstTensor5View::operator()(s,b,p,r,c);
01153 }
01154
01159 ConstMatrixView Tensor5View::operator()(Index s,
01160 const Range& b,
01161 const Range& p,
01162 Index r,
01163 Index c ) const
01164 {
01165 return ConstTensor5View::operator()(s,b,p,r,c);
01166 }
01167
01172 ConstMatrixView Tensor5View::operator()(Index s,
01173 Index b,
01174 const Range& p,
01175 const Range& r,
01176 Index c ) const
01177 {
01178 return ConstTensor5View::operator()(s,b,p,r,c);
01179 }
01180
01185 ConstMatrixView Tensor5View::operator()(Index s,
01186 Index b,
01187 const Range& p,
01188 Index r,
01189 const Range& c) const
01190 {
01191 return ConstTensor5View::operator()(s,b,p,r,c);
01192 }
01193
01198 ConstMatrixView Tensor5View::operator()(Index s,
01199 Index b,
01200 Index p,
01201 const Range& r,
01202 const Range& c) const
01203 {
01204 return ConstTensor5View::operator()(s,b,p,r,c);
01205 }
01206
01211 ConstVectorView Tensor5View::operator()(const Range& s,
01212 Index b,
01213 Index p,
01214 Index r,
01215 Index c ) const
01216 {
01217 return ConstTensor5View::operator()(s,b,p,r,c);
01218 }
01219
01224 ConstVectorView Tensor5View::operator()(Index s,
01225 const Range& b,
01226 Index p,
01227 Index r,
01228 Index c ) const
01229 {
01230 return ConstTensor5View::operator()(s,b,p,r,c);
01231 }
01232
01237 ConstVectorView Tensor5View::operator()(Index s,
01238 Index b,
01239 const Range& p,
01240 Index r,
01241 Index c ) const
01242 {
01243 return ConstTensor5View::operator()(s,b,p,r,c);
01244 }
01245
01250 ConstVectorView Tensor5View::operator()(Index s,
01251 Index b,
01252 Index p,
01253 const Range& r,
01254 Index c ) const
01255 {
01256 return ConstTensor5View::operator()(s,b,p,r,c);
01257 }
01258
01263 ConstVectorView Tensor5View::operator()(Index s,
01264 Index b,
01265 Index p,
01266 Index r,
01267 const Range& c) const
01268 {
01269 return ConstTensor5View::operator()(s,b,p,r,c);
01270 }
01271
01275 Tensor5View Tensor5View::operator()(const Range& s,
01276 const Range& b,
01277 const Range& p,
01278 const Range& r,
01279 const Range& c)
01280 {
01281 return Tensor5View(mdata,
01282 msr, mbr, mpr, mrr, mcr,
01283 s, b, p, r, c);
01284 }
01285
01288 Tensor4View Tensor5View::operator()(const Range& s,
01289 const Range& b,
01290 const Range& p,
01291 const Range& r,
01292 Index c)
01293 {
01294
01295 assert( 0 <= c );
01296 assert( c < mcr.mextent );
01297
01298 return Tensor4View(mdata +
01299 mcr.mstart + c * mcr.mstride,
01300 msr, mbr, mpr, mrr,
01301 s, b, p, r);
01302 }
01303
01306 Tensor4View Tensor5View::operator()(const Range& s,
01307 const Range& b,
01308 const Range& p,
01309 Index r,
01310 const Range& c)
01311 {
01312
01313 assert( 0 <= r );
01314 assert( r < mrr.mextent );
01315
01316 return Tensor4View(mdata +
01317 mrr.mstart + r * mrr.mstride,
01318 msr, mbr, mpr, mcr,
01319 s, b, p, c);
01320 }
01321
01324 Tensor4View Tensor5View::operator()(const Range& s,
01325 const Range& b,
01326 Index p,
01327 const Range& r,
01328 const Range& c)
01329 {
01330
01331 assert( 0 <= p );
01332 assert( p < mpr.mextent );
01333
01334 return Tensor4View(mdata +
01335 mpr.mstart + p * mpr.mstride,
01336 msr, mbr, mrr, mcr,
01337 s, b, r, c);
01338 }
01339
01342 Tensor4View Tensor5View::operator()(const Range& s,
01343 Index b,
01344 const Range& p,
01345 const Range& r,
01346 const Range& c)
01347 {
01348
01349 assert( 0 <= b );
01350 assert( b < mbr.mextent );
01351
01352 return Tensor4View(mdata +
01353 mbr.mstart + b * mbr.mstride,
01354 msr, mpr, mrr, mcr,
01355 s, p, r, c);
01356 }
01357
01360 Tensor4View Tensor5View::operator()(Index s,
01361 const Range& b,
01362 const Range& p,
01363 const Range& r,
01364 const Range& c)
01365 {
01366
01367 assert( 0 <= s );
01368 assert( s < msr.mextent );
01369
01370 return Tensor4View(mdata +
01371 msr.mstart + s * msr.mstride,
01372 mbr, mpr, mrr, mcr,
01373 b, p, r, c);
01374 }
01375
01378 Tensor3View Tensor5View::operator()(const Range& s,
01379 const Range& b,
01380 const Range& p,
01381 Index r,
01382 Index c)
01383 {
01384
01385 assert( 0 <= r );
01386 assert( 0 <= c );
01387 assert( r < mrr.mextent );
01388 assert( c < mcr.mextent );
01389
01390 return Tensor3View(mdata +
01391 mrr.mstart + r * mrr.mstride +
01392 mcr.mstart + c * mcr.mstride,
01393 msr, mbr, mpr,
01394 s, b, p);
01395 }
01396
01399 Tensor3View Tensor5View::operator()(const Range& s,
01400 const Range& b,
01401 Index p,
01402 const Range& r,
01403 Index c)
01404 {
01405
01406 assert( 0 <= p );
01407 assert( 0 <= c );
01408 assert( p < mpr.mextent );
01409 assert( c < mcr.mextent );
01410
01411 return Tensor3View(mdata +
01412 mpr.mstart + p * mpr.mstride +
01413 mcr.mstart + c * mcr.mstride,
01414 msr, mbr, mrr,
01415 s, b, r);
01416 }
01417
01420 Tensor3View Tensor5View::operator()(const Range& s,
01421 const Range& b,
01422 Index p,
01423 Index r,
01424 const Range& c)
01425 {
01426
01427 assert( 0 <= p );
01428 assert( 0 <= r );
01429 assert( p < mpr.mextent );
01430 assert( r < mrr.mextent );
01431
01432 return Tensor3View(mdata +
01433 mpr.mstart + p * mpr.mstride +
01434 mrr.mstart + r * mrr.mstride,
01435 msr, mbr, mcr,
01436 s, b, c);
01437 }
01438
01441 Tensor3View Tensor5View::operator()(const Range& s,
01442 Index b,
01443 const Range& p,
01444 Index r,
01445 const Range& c)
01446 {
01447
01448 assert( 0 <= b );
01449 assert( 0 <= r );
01450 assert( b < mbr.mextent );
01451 assert( r < mrr.mextent );
01452
01453 return Tensor3View(mdata +
01454 mbr.mstart + b * mbr.mstride +
01455 mrr.mstart + r * mrr.mstride,
01456 msr, mpr, mcr,
01457 s, p, c);
01458 }
01459
01462 Tensor3View Tensor5View::operator()(const Range& s,
01463 Index b,
01464 const Range& p,
01465 const Range& r,
01466 Index c)
01467 {
01468
01469 assert( 0 <= b );
01470 assert( 0 <= c );
01471 assert( b < mbr.mextent );
01472 assert( c < mcr.mextent );
01473
01474 return Tensor3View(mdata +
01475 mbr.mstart + b * mbr.mstride +
01476 mcr.mstart + c * mcr.mstride,
01477 msr, mpr, mrr,
01478 s, p, r);
01479 }
01480
01483 Tensor3View Tensor5View::operator()(const Range& s,
01484 Index b,
01485 Index p,
01486 const Range& r,
01487 const Range& c)
01488 {
01489
01490 assert( 0 <= b );
01491 assert( 0 <= p );
01492 assert( b < mbr.mextent );
01493 assert( p < mpr.mextent );
01494
01495 return Tensor3View(mdata +
01496 mbr.mstart + b * mbr.mstride +
01497 mpr.mstart + p * mpr.mstride,
01498 msr, mrr, mcr,
01499 s, r, c);
01500 }
01501
01504 Tensor3View Tensor5View::operator()(Index s,
01505 const Range& b,
01506 Index p,
01507 const Range& r,
01508 const Range& c)
01509 {
01510
01511 assert( 0 <= s );
01512 assert( 0 <= p );
01513 assert( s < msr.mextent );
01514 assert( p < mpr.mextent );
01515
01516 return Tensor3View(mdata +
01517 msr.mstart + s * msr.mstride +
01518 mpr.mstart + p * mpr.mstride,
01519 mbr, mrr, mcr,
01520 b, r, c);
01521 }
01522
01525 Tensor3View Tensor5View::operator()(Index s,
01526 const Range& b,
01527 const Range& p,
01528 Index r,
01529 const Range& c)
01530 {
01531
01532 assert( 0 <= s );
01533 assert( 0 <= r );
01534 assert( s < msr.mextent );
01535 assert( r < mrr.mextent );
01536
01537 return Tensor3View(mdata +
01538 msr.mstart + s * msr.mstride +
01539 mrr.mstart + r * mrr.mstride,
01540 mbr, mpr, mcr,
01541 b, p, c);
01542 }
01543
01546 Tensor3View Tensor5View::operator()(Index s,
01547 const Range& b,
01548 const Range& p,
01549 const Range& r,
01550 Index c)
01551 {
01552
01553 assert( 0 <= s );
01554 assert( 0 <= c );
01555 assert( s < msr.mextent );
01556 assert( c < mcr.mextent );
01557
01558 return Tensor3View(mdata +
01559 msr.mstart + s * msr.mstride +
01560 mcr.mstart + c * mcr.mstride,
01561 mbr, mpr, mrr,
01562 b, p, r);
01563 }
01564
01567 Tensor3View Tensor5View::operator()(Index s,
01568 Index b,
01569 const Range& p,
01570 const Range& r,
01571 const Range& c)
01572 {
01573
01574 assert( 0 <= s );
01575 assert( 0 <= b );
01576 assert( s < msr.mextent );
01577 assert( b < mbr.mextent );
01578
01579 return Tensor3View(mdata +
01580 msr.mstart + s * msr.mstride +
01581 mbr.mstart + b * mbr.mstride,
01582 mpr, mrr, mcr,
01583 p, r, c);
01584 }
01585
01588 MatrixView Tensor5View::operator()(const Range& s,
01589 const Range& b,
01590 Index p,
01591 Index r,
01592 Index c)
01593 {
01594
01595 assert( 0 <= p );
01596 assert( 0 <= r );
01597 assert( 0 <= c );
01598 assert( p < mpr.mextent );
01599 assert( r < mrr.mextent );
01600 assert( c < mcr.mextent );
01601
01602 return MatrixView(mdata +
01603 mpr.mstart + p * mpr.mstride +
01604 mrr.mstart + r * mrr.mstride +
01605 mcr.mstart + c * mcr.mstride,
01606 msr, mbr,
01607 s, b);
01608 }
01609
01612 MatrixView Tensor5View::operator()(const Range& s,
01613 Index b,
01614 const Range& p,
01615 Index r,
01616 Index c)
01617 {
01618
01619 assert( 0 <= b );
01620 assert( 0 <= r );
01621 assert( 0 <= c );
01622 assert( b < mbr.mextent );
01623 assert( r < mrr.mextent );
01624 assert( c < mcr.mextent );
01625
01626 return MatrixView(mdata +
01627 mbr.mstart + b * mbr.mstride +
01628 mrr.mstart + r * mpr.mstride +
01629 mcr.mstart + c * mcr.mstride,
01630 msr, mpr,
01631 s, p);
01632 }
01633
01636 MatrixView Tensor5View::operator()(const Range& s,
01637 Index b,
01638 Index p,
01639 const Range& r,
01640 Index c)
01641 {
01642
01643 assert( 0 <= b );
01644 assert( 0 <= p );
01645 assert( 0 <= c );
01646 assert( b < mbr.mextent );
01647 assert( p < mpr.mextent );
01648 assert( c < mcr.mextent );
01649
01650 return MatrixView(mdata +
01651 mbr.mstart + b * mbr.mstride +
01652 mpr.mstart + p * mpr.mstride +
01653 mcr.mstart + c * mcr.mstride,
01654 msr, mrr,
01655 s, r);
01656 }
01657
01660 MatrixView Tensor5View::operator()(const Range& s,
01661 Index b,
01662 Index p,
01663 Index r,
01664 const Range& c)
01665 {
01666
01667 assert( 0 <= b );
01668 assert( 0 <= p );
01669 assert( 0 <= r );
01670 assert( b < mbr.mextent );
01671 assert( p < mpr.mextent );
01672 assert( r < mrr.mextent );
01673
01674 return MatrixView(mdata +
01675 mbr.mstart + b * mbr.mstride +
01676 mpr.mstart + p * mpr.mstride +
01677 mrr.mstart + r * mrr.mstride,
01678 msr, mcr,
01679 s, c);
01680 }
01681
01684 MatrixView Tensor5View::operator()(Index s,
01685 const Range& b,
01686 Index p,
01687 Index r,
01688 const Range& c)
01689 {
01690
01691 assert( 0 <= s );
01692 assert( 0 <= p );
01693 assert( 0 <= r );
01694 assert( s < msr.mextent );
01695 assert( p < mpr.mextent );
01696 assert( r < mrr.mextent );
01697
01698 return MatrixView(mdata +
01699 msr.mstart + s * msr.mstride +
01700 mpr.mstart + p * mpr.mstride +
01701 mrr.mstart + r * mrr.mstride,
01702 mbr, mcr,
01703 b, c);
01704 }
01705
01708 MatrixView Tensor5View::operator()(Index s,
01709 const Range& b,
01710 Index p,
01711 const Range& r,
01712 Index c )
01713 {
01714
01715 assert( 0 <= s );
01716 assert( 0 <= p );
01717 assert( 0 <= c );
01718 assert( s < msr.mextent );
01719 assert( p < mpr.mextent );
01720 assert( c < mcr.mextent );
01721
01722 return MatrixView(mdata +
01723 msr.mstart + s * msr.mstride +
01724 mpr.mstart + p * mpr.mstride +
01725 mcr.mstart + c * mcr.mstride,
01726 mbr, mrr,
01727 b, r);
01728 }
01729
01732 MatrixView Tensor5View::operator()(Index s,
01733 const Range& b,
01734 const Range& p,
01735 Index r,
01736 Index c )
01737 {
01738
01739 assert( 0 <= s );
01740 assert( 0 <= r );
01741 assert( 0 <= c );
01742 assert( s < msr.mextent );
01743 assert( r < mrr.mextent );
01744 assert( c < mcr.mextent );
01745
01746 return MatrixView(mdata +
01747 msr.mstart + s * msr.mstride +
01748 mrr.mstart + r * mrr.mstride +
01749 mcr.mstart + c * mcr.mstride,
01750 mbr, mpr,
01751 b, p);
01752 }
01753
01756 MatrixView Tensor5View::operator()(Index s,
01757 Index b,
01758 const Range& p,
01759 const Range& r,
01760 Index c )
01761 {
01762
01763 assert( 0 <= s );
01764 assert( 0 <= b );
01765 assert( 0 <= c );
01766 assert( s < msr.mextent );
01767 assert( b < mbr.mextent );
01768 assert( c < mcr.mextent );
01769
01770 return MatrixView(mdata +
01771 msr.mstart + s * msr.mstride +
01772 mbr.mstart + b * mbr.mstride +
01773 mcr.mstart + c * mcr.mstride,
01774 mpr, mrr,
01775 p, r);
01776 }
01777
01780 MatrixView Tensor5View::operator()(Index s,
01781 Index b,
01782 const Range& p,
01783 Index r,
01784 const Range& c)
01785 {
01786
01787 assert( 0 <= s );
01788 assert( 0 <= b );
01789 assert( 0 <= r );
01790 assert( s < msr.mextent );
01791 assert( b < mbr.mextent );
01792 assert( r < mrr.mextent );
01793
01794 return MatrixView(mdata +
01795 msr.mstart + s * msr.mstride +
01796 mbr.mstart + b * mbr.mstride +
01797 mrr.mstart + r * mrr.mstride,
01798 mpr, mcr,
01799 p, c);
01800 }
01801
01804 MatrixView Tensor5View::operator()(Index s,
01805 Index b,
01806 Index p,
01807 const Range& r,
01808 const Range& c)
01809 {
01810
01811 assert( 0 <= s );
01812 assert( 0 <= b );
01813 assert( 0 <= p );
01814 assert( s < msr.mextent );
01815 assert( b < mbr.mextent );
01816 assert( p < mpr.mextent );
01817
01818 return MatrixView(mdata +
01819 msr.mstart + s * msr.mstride +
01820 mbr.mstart + b * mbr.mstride +
01821 mpr.mstart + p * mpr.mstride,
01822 mrr, mcr,
01823 r, c);
01824 }
01825
01828 VectorView Tensor5View::operator()(const Range& s,
01829 Index b,
01830 Index p,
01831 Index r,
01832 Index c)
01833 {
01834
01835 assert( 0 <= b );
01836 assert( 0 <= p );
01837 assert( 0 <= r );
01838 assert( 0 <= c );
01839 assert( b < mbr.mextent );
01840 assert( p < mpr.mextent );
01841 assert( r < mrr.mextent );
01842 assert( c < mcr.mextent );
01843
01844 return VectorView(mdata +
01845 mbr.mstart + b * mbr.mstride +
01846 mpr.mstart + p * mpr.mstride +
01847 mrr.mstart + r * mrr.mstride +
01848 mcr.mstart + c * mcr.mstride,
01849 msr,
01850 s);
01851 }
01852
01855 VectorView Tensor5View::operator()(Index s,
01856 const Range& b,
01857 Index p,
01858 Index r,
01859 Index c)
01860 {
01861
01862 assert( 0 <= s );
01863 assert( 0 <= p );
01864 assert( 0 <= r );
01865 assert( 0 <= c );
01866 assert( s < msr.mextent );
01867 assert( p < mpr.mextent );
01868 assert( r < mrr.mextent );
01869 assert( c < mcr.mextent );
01870
01871 return VectorView(mdata +
01872 msr.mstart + s * msr.mstride +
01873 mpr.mstart + p * mpr.mstride +
01874 mrr.mstart + r * mrr.mstride +
01875 mcr.mstart + c * mcr.mstride,
01876 mbr,
01877 b);
01878 }
01879
01882 VectorView Tensor5View::operator()(Index s,
01883 Index b,
01884 const Range& p,
01885 Index r,
01886 Index c)
01887 {
01888
01889 assert( 0 <= s );
01890 assert( 0 <= b );
01891 assert( 0 <= r );
01892 assert( 0 <= c );
01893 assert( s < msr.mextent );
01894 assert( b < mbr.mextent );
01895 assert( r < mrr.mextent );
01896 assert( c < mcr.mextent );
01897
01898 return VectorView(mdata +
01899 msr.mstart + s * msr.mstride +
01900 mbr.mstart + b * mbr.mstride +
01901 mrr.mstart + r * mrr.mstride +
01902 mcr.mstart + c * mcr.mstride,
01903 mpr,
01904 p);
01905 }
01906
01909 VectorView Tensor5View::operator()(Index s,
01910 Index b,
01911 Index p,
01912 const Range& r,
01913 Index c)
01914 {
01915
01916 assert( 0 <= s );
01917 assert( 0 <= b );
01918 assert( 0 <= p );
01919 assert( 0 <= c );
01920 assert( s < msr.mextent );
01921 assert( b < mbr.mextent );
01922 assert( p < mpr.mextent );
01923 assert( c < mcr.mextent );
01924
01925 return VectorView(mdata +
01926 msr.mstart + s * msr.mstride +
01927 mbr.mstart + b * mbr.mstride +
01928 mpr.mstart + p * mpr.mstride +
01929 mcr.mstart + c * mcr.mstride,
01930 mrr,
01931 r);
01932 }
01933
01936 VectorView Tensor5View::operator()(Index s,
01937 Index b,
01938 Index p,
01939 Index r,
01940 const Range& c)
01941 {
01942
01943 assert( 0 <= s );
01944 assert( 0 <= b );
01945 assert( 0 <= p );
01946 assert( 0 <= r );
01947 assert( s < msr.mextent );
01948 assert( b < mbr.mextent );
01949 assert( p < mpr.mextent );
01950 assert( r < mrr.mextent );
01951
01952 return VectorView(mdata +
01953 msr.mstart + s * msr.mstride +
01954 mbr.mstart + b * mbr.mstride +
01955 mpr.mstart + p * mpr.mstride +
01956 mrr.mstart + r * mrr.mstride,
01957 mcr,
01958 c);
01959 }
01960
01961
01964 ConstIterator5D Tensor5View::begin() const
01965 {
01966 return ConstTensor5View::begin();
01967 }
01968
01970 ConstIterator5D Tensor5View::end() const
01971 {
01972 return ConstTensor5View::end();
01973 }
01974
01976 Iterator5D Tensor5View::begin()
01977 {
01978 return Iterator5D( Tensor4View(mdata + msr.mstart,
01979 mbr, mpr, mrr, mcr),
01980 msr.mstride );
01981 }
01982
01984 Iterator5D Tensor5View::end()
01985 {
01986 return Iterator5D( Tensor4View(mdata + msr.mstart +
01987 (msr.mextent) * msr.mstride,
01988 mbr, mpr, mrr, mcr),
01989 msr.mstride );
01990 }
01991
01996 Tensor5View& Tensor5View::operator=(const ConstTensor5View& m)
01997 {
01998
01999 assert( msr.mextent == m.msr.mextent );
02000 assert( mbr.mextent == m.mbr.mextent );
02001 assert( mpr.mextent == m.mpr.mextent );
02002 assert( mrr.mextent == m.mrr.mextent );
02003 assert( mcr.mextent == m.mcr.mextent );
02004
02005 copy( m.begin(), m.end(), begin() );
02006 return *this;
02007 }
02008
02014 Tensor5View& Tensor5View::operator=(const Tensor5View& m)
02015 {
02016
02017 assert( msr.mextent == m.msr.mextent );
02018 assert( mbr.mextent == m.mbr.mextent );
02019 assert( mpr.mextent == m.mpr.mextent );
02020 assert( mrr.mextent == m.mrr.mextent );
02021 assert( mcr.mextent == m.mcr.mextent );
02022
02023 copy( m.begin(), m.end(), begin() );
02024 return *this;
02025 }
02026
02030 Tensor5View& Tensor5View::operator=(const Tensor5& m)
02031 {
02032
02033 assert( msr.mextent == m.msr.mextent );
02034 assert( mbr.mextent == m.mbr.mextent );
02035 assert( mpr.mextent == m.mpr.mextent );
02036 assert( mrr.mextent == m.mrr.mextent );
02037 assert( mcr.mextent == m.mcr.mextent );
02038
02039 copy( m.begin(), m.end(), begin() );
02040 return *this;
02041 }
02042
02045 Tensor5View& Tensor5View::operator=(Numeric x)
02046 {
02047 copy( x, begin(), end() );
02048 return *this;
02049 }
02050
02051
02052
02053
02055 Tensor5View& Tensor5View::operator*=(Numeric x)
02056 {
02057 const Iterator5D es = end();
02058 for ( Iterator5D s = begin(); s != es ; ++s )
02059 {
02060 *s *= x;
02061 }
02062 return *this;
02063 }
02064
02066 Tensor5View& Tensor5View::operator/=(Numeric x)
02067 {
02068 const Iterator5D es = end();
02069 for ( Iterator5D s = begin(); s != es ; ++s )
02070 {
02071 *s /= x;
02072 }
02073 return *this;
02074 }
02075
02077 Tensor5View& Tensor5View::operator+=(Numeric x)
02078 {
02079 const Iterator5D es = end();
02080 for ( Iterator5D s = begin(); s != es ; ++s )
02081 {
02082 *s += x;
02083 }
02084 return *this;
02085 }
02086
02088 Tensor5View& Tensor5View::operator-=(Numeric x)
02089 {
02090 const Iterator5D es = end();
02091 for ( Iterator5D s = begin(); s != es ; ++s )
02092 {
02093 *s -= x;
02094 }
02095 return *this;
02096 }
02097
02099 Tensor5View& Tensor5View::operator*=(const ConstTensor5View& x)
02100 {
02101 assert( nshelves() == x.nshelves() );
02102 assert( nbooks() == x.nbooks() );
02103 assert( npages() == x.npages() );
02104 assert( nrows() == x.nrows() );
02105 assert( ncols() == x.ncols() );
02106 ConstIterator5D xs = x.begin();
02107 Iterator5D s = begin();
02108 const Iterator5D es = end();
02109 for ( ; s != es ; ++s, ++xs )
02110 {
02111 *s *= *xs;
02112 }
02113 return *this;
02114 }
02115
02117 Tensor5View& Tensor5View::operator/=(const ConstTensor5View& x)
02118 {
02119 assert( nshelves() == x.nshelves() );
02120 assert( nbooks() == x.nbooks() );
02121 assert( npages() == x.npages() );
02122 assert( nrows() == x.nrows() );
02123 assert( ncols() == x.ncols() );
02124 ConstIterator5D xs = x.begin();
02125 Iterator5D s = begin();
02126 const Iterator5D es = end();
02127 for ( ; s != es ; ++s, ++xs )
02128 {
02129 *s /= *xs;
02130 }
02131 return *this;
02132 }
02133
02135 Tensor5View& Tensor5View::operator+=(const ConstTensor5View& x)
02136 {
02137 assert( nshelves() == x.nshelves() );
02138 assert( nbooks() == x.nbooks() );
02139 assert( npages() == x.npages() );
02140 assert( nrows() == x.nrows() );
02141 assert( ncols() == x.ncols() );
02142 ConstIterator5D xs = x.begin();
02143 Iterator5D s = begin();
02144 const Iterator5D es = end();
02145 for ( ; s != es ; ++s, ++xs )
02146 {
02147 *s += *xs;
02148 }
02149 return *this;
02150 }
02151
02153 Tensor5View& Tensor5View::operator-=(const ConstTensor5View& x)
02154 {
02155 assert( nshelves() == x.nshelves() );
02156 assert( nbooks() == x.nbooks() );
02157 assert( npages() == x.npages() );
02158 assert( nrows() == x.nrows() );
02159 assert( ncols() == x.ncols() );
02160 ConstIterator5D xs = x.begin();
02161 Iterator5D s = begin();
02162 const Iterator5D es = end();
02163 for ( ; s != es ; ++s, ++xs )
02164 {
02165 *s -= *xs;
02166 }
02167 return *this;
02168 }
02169
02171 Tensor5View::Tensor5View(const Tensor4View& a) :
02172 ConstTensor5View( a.mdata,
02173 Range(0,1,
02174 a.mbr.mextent*
02175 a.mpr.mextent*
02176 a.mrr.mextent*
02177 a.mcr.mextent),
02178 a.mbr,
02179 a.mpr,
02180 a.mrr,
02181 a.mcr )
02182 {
02183
02184 }
02185
02188 Tensor5View::Tensor5View() :
02189 ConstTensor5View()
02190 {
02191
02192 }
02193
02197 Tensor5View::Tensor5View(Numeric *data,
02198 const Range& sr,
02199 const Range& br,
02200 const Range& pr,
02201 const Range& rr,
02202 const Range& cr) :
02203 ConstTensor5View(data, sr, br, pr, rr, cr)
02204 {
02205
02206 }
02207
02228 Tensor5View::Tensor5View(Numeric *data,
02229 const Range& ps,
02230 const Range& pb,
02231 const Range& pp,
02232 const Range& pr,
02233 const Range& pc,
02234 const Range& ns,
02235 const Range& nb,
02236 const Range& np,
02237 const Range& nr,
02238 const Range& nc) :
02239 ConstTensor5View(data, ps, pb, pp, pr, pc, ns, nb, np, nr, nc)
02240 {
02241
02242 }
02243
02248 void copy(ConstIterator5D origin,
02249 const ConstIterator5D& end,
02250 Iterator5D target)
02251 {
02252 for ( ; origin != end ; ++origin, ++target )
02253 {
02254
02255
02256 copy( origin->begin(), origin->end(), target->begin() );
02257 }
02258 }
02259
02261 void copy(Numeric x,
02262 Iterator5D target,
02263 const Iterator5D& end)
02264 {
02265 for ( ; target != end ; ++target )
02266 {
02267
02268
02269 copy( x, target->begin(), target->end() );
02270 }
02271 }
02272
02273
02274
02275
02276
02278 Tensor5::Tensor5() :
02279 Tensor5View::Tensor5View()
02280 {
02281
02282
02283
02284
02285 }
02286
02289 Tensor5::Tensor5(Index s, Index b, Index p, Index r, Index c) :
02290 Tensor5View( new Numeric[s*b*p*r*c],
02291 Range( 0, s, b*p*r*c ),
02292 Range( 0, b, p*r*c ),
02293 Range( 0, p, r*c ),
02294 Range( 0, r, c ),
02295 Range( 0, c) )
02296 {
02297
02298 }
02299
02301 Tensor5::Tensor5(Index s, Index b, Index p, Index r, Index c, Numeric fill) :
02302 Tensor5View( new Numeric[s*b*p*r*c],
02303 Range( 0, s, b*p*r*c ),
02304 Range( 0, b, p*r*c ),
02305 Range( 0, p, r*c ),
02306 Range( 0, r, c ),
02307 Range( 0, c) )
02308 {
02309
02310
02311 const Numeric *stop = mdata + s*b*p*r*c;
02312 for ( Numeric *x = mdata; x < stop; ++x )
02313 *x = fill;
02314 }
02315
02318 Tensor5::Tensor5(const ConstTensor5View& m) :
02319 Tensor5View( new Numeric[m.nshelves()*m.nbooks()*m.npages()*m.nrows()*m.ncols()],
02320 Range( 0, m.nshelves(), m.nbooks()*m.npages()*m.nrows()*m.ncols() ),
02321 Range( 0, m.nbooks(), m.npages()*m.nrows()*m.ncols() ),
02322 Range( 0, m.npages(), m.nrows()*m.ncols() ),
02323 Range( 0, m.nrows(), m.ncols() ),
02324 Range( 0, m.ncols() ) )
02325 {
02326 copy( m.begin(), m.end(), begin() );
02327 }
02328
02331 Tensor5::Tensor5(const Tensor5& m) :
02332 Tensor5View( new Numeric[m.nshelves()*m.nbooks()*m.npages()*m.nrows()*m.ncols()],
02333 Range( 0, m.nshelves(), m.nbooks()*m.npages()*m.nrows()*m.ncols() ),
02334 Range( 0, m.nbooks(), m.npages()*m.nrows()*m.ncols() ),
02335 Range( 0, m.npages(), m.nrows()*m.ncols() ),
02336 Range( 0, m.nrows(), m.ncols() ),
02337 Range( 0, m.ncols() ) )
02338 {
02339
02340
02341
02342
02343
02344 copy( m.begin(), m.end(), begin() );
02345 }
02346
02348
02371 Tensor5& Tensor5::operator=(const Tensor5& m)
02372 {
02373
02374
02375
02376 resize( m.msr.mextent,
02377 m.mbr.mextent,
02378 m.mpr.mextent,
02379 m.mrr.mextent,
02380 m.mcr.mextent );
02381 copy( m.begin(), m.end(), begin() );
02382 return *this;
02383 }
02384
02387 Tensor5& Tensor5::operator=(Numeric x)
02388 {
02389 copy( x, begin(), end() );
02390 return *this;
02391 }
02392
02396 void Tensor5::resize(Index s, Index b, Index p, Index r, Index c)
02397 {
02398 assert( 0 <= s );
02399 assert( 0 <= b );
02400 assert( 0 <= p );
02401 assert( 0 <= r );
02402 assert( 0 <= c );
02403
02404 if ( msr.mextent != s ||
02405 mbr.mextent != b ||
02406 mpr.mextent != p ||
02407 mrr.mextent != r ||
02408 mcr.mextent != c )
02409 {
02410 delete[] mdata;
02411 mdata = new Numeric[s*b*p*r*c];
02412
02413 msr.mstart = 0;
02414 msr.mextent = s;
02415 msr.mstride = b*p*r*c;
02416
02417 mbr.mstart = 0;
02418 mbr.mextent = b;
02419 mbr.mstride = p*r*c;
02420
02421 mpr.mstart = 0;
02422 mpr.mextent = p;
02423 mpr.mstride = r*c;
02424
02425 mrr.mstart = 0;
02426 mrr.mextent = r;
02427 mrr.mstride = c;
02428
02429 mcr.mstart = 0;
02430 mcr.mextent = c;
02431 mcr.mstride = 1;
02432 }
02433 }
02434
02437 Tensor5::~Tensor5()
02438 {
02439
02440
02441 delete[] mdata;
02442 }
02443
02444
02460 void transform( Tensor5View y,
02461 double (&my_func)(double),
02462 ConstTensor5View x )
02463 {
02464
02465 assert( y.nshelves() == x.nshelves() );
02466 assert( y.nbooks() == x.nbooks() );
02467 assert( y.npages() == x.npages() );
02468 assert( y.nrows() == x.nrows() );
02469 assert( y.ncols() == x.ncols() );
02470
02471 const ConstIterator5D xe = x.end();
02472 ConstIterator5D xi = x.begin();
02473 Iterator5D yi = y.begin();
02474 for ( ; xi != xe; ++xi, ++yi )
02475 {
02476
02477
02478 transform( *yi, my_func, *xi );
02479 }
02480 }
02481
02483 Numeric max(const ConstTensor5View& x)
02484 {
02485 const ConstIterator5D xe = x.end();
02486 ConstIterator5D xi = x.begin();
02487
02488
02489 Numeric themax = max(*xi);
02490 ++xi;
02491
02492 for ( ; xi != xe ; ++xi )
02493 {
02494
02495
02496 Numeric maxi = max(*xi);
02497 if ( maxi > themax )
02498 themax = maxi;
02499 }
02500
02501 return themax;
02502 }
02503
02505 Numeric min(const ConstTensor5View& x)
02506 {
02507 const ConstIterator5D xe = x.end();
02508 ConstIterator5D xi = x.begin();
02509
02510
02511 Numeric themin = min(*xi);
02512 ++xi;
02513
02514 for ( ; xi != xe ; ++xi )
02515 {
02516
02517
02518 Numeric mini = min(*xi);
02519 if ( mini < themin )
02520 themin = mini;
02521 }
02522
02523 return themin;
02524 }
02525
02526
02528
02529 #ifndef NDEBUG
02530
02547 Numeric debug_tensor5view_get_elem (Tensor5View& tv, Index s, Index b, Index p,
02548 Index r, Index c)
02549 {
02550 return tv(s, b, p, r, c);
02551 }
02552
02553 #endif
02555