34 #ifndef CARTODATA_VOLUME_VOLUMEBASE_D_INLINE_H
35 #define CARTODATA_VOLUME_VOLUMEBASE_D_INLINE_H
46 template <
typename T >
56 return _blitz( blitz::TinyVector<long,4>( x, y, z, t ) );
58 const blitz::TinyVector<BlitzStridesType, Volume<T>::DIM_MAX>& bstrides
60 return _items[ x * bstrides[0] + y * bstrides[1] + z * bstrides[2]
66 template <
typename T >
70 return at( x, y, z, t );
74 template <
typename T >
84 return _blitz( blitz::TinyVector<long,4>( x, y, z, t ) );
86 const blitz::TinyVector<BlitzStridesType, Volume<T>::DIM_MAX>& bstrides
102 return _items[ x * bstrides[0] + y * bstrides[1] + z * bstrides[2]
108 template <
typename T >
112 return at( x, y, z, t );
116 template <
typename T >
120 return at( pos[0], pos[1], pos[2], pos[3] );
124 template <
typename T >
132 template <
typename T >
136 return at( pos[0], pos[1], pos[2], pos[3] );
140 template <
typename T >
148 template <
typename T >
inline
162 # if !defined( __clang__ ) && __GNUC__-0 < 5
173 switch( index.size() )
177 const blitz::TinyVector<BlitzStridesType, Volume<T>::DIM_MAX>& strides
180 return _blitz.dataZero()[ index[0] * strides[0] ];
184 const blitz::TinyVector<BlitzStridesType, Volume<T>::DIM_MAX>& strides
187 return _blitz.dataZero()[ index[0] * strides[0]
188 + index[1] * strides[1] ];
192 const blitz::TinyVector<BlitzStridesType, Volume<T>::DIM_MAX>& strides
195 return _blitz.dataZero()[ index[0]
196 + index[1] * strides[1]
197 + index[2] * strides[2] ];
201 const blitz::TinyVector<BlitzStridesType, Volume<T>::DIM_MAX>& strides
204 return _blitz.dataZero()[ index[0] * strides[0]
205 + index[1] * strides[1]
206 + index[2] * strides[2]
207 + index[3] * strides[3] ];
211 const blitz::TinyVector<BlitzStridesType, Volume<T>::DIM_MAX>& strides
214 return _blitz.dataZero()[ index[0] * strides[0]
215 + index[1] * strides[1]
216 + index[2] * strides[2]
217 + index[3] * strides[3]
218 + index[4] * strides[4] ];
222 const blitz::TinyVector<BlitzStridesType, Volume<T>::DIM_MAX>& strides
225 return _blitz.dataZero()[ index[0] * strides[0]
226 + index[1] * strides[1]
227 + index[2] * strides[2]
228 + index[3] * strides[3]
229 + index[4] * strides[4]
230 + index[5] * strides[5] ];
234 const blitz::TinyVector<BlitzStridesType, Volume<T>::DIM_MAX>& strides
237 return _blitz.dataZero()[ index[0] * strides[0]
238 + index[1] * strides[1]
239 + index[2] * strides[2]
240 + index[3] * strides[3]
241 + index[4] * strides[4]
242 + index[5] * strides[5]
243 + index[6] * strides[6] ];
247 const blitz::TinyVector<BlitzStridesType, Volume<T>::DIM_MAX>& strides
250 return _blitz.dataZero()[ index[0] * strides[0]
251 + index[1] * strides[1]
252 + index[2] * strides[2]
253 + index[3] * strides[3]
254 + index[4] * strides[4]
255 + index[5] * strides[5]
256 + index[6] * strides[6]
257 + index[7] * strides[7] ];
265 blitz::TinyVector<int, Volume<T>::DIM_MAX> pos;
266 int i, n = index.size();
267 for( i=0; i<n && i<Volume<T>::DIM_MAX; ++i )
269 for( ; i<Volume<T>::DIM_MAX; ++i )
271 return _blitz( pos );
282 return *_blitz.dataZero();
290 const blitz::TinyVector<BlitzStridesType, Volume<T>::DIM_MAX>& strides
294 for(
int i=0; i!=index.size(); ++i )
295 offset += index[i] * strides[i];
296 return _blitz.dataZero()[ offset ];
300 template <
typename T >
inline
314 # if !defined( __clang__ ) && __GNUC__-0 < 5
325 switch( index.size() )
329 const blitz::TinyVector<BlitzStridesType, Volume<T>::DIM_MAX>& strides
332 return _blitz.dataZero()[ index[0] * strides[0] ];
336 const blitz::TinyVector<BlitzStridesType, Volume<T>::DIM_MAX>& strides
339 return _blitz.dataZero()[ index[0] * strides[0]
340 + index[1] * strides[1] ];
344 const blitz::TinyVector<BlitzStridesType, Volume<T>::DIM_MAX>& strides
347 return _blitz.dataZero()[ index[0]
348 + index[1] * strides[1]
349 + index[2] * strides[2] ];
353 const blitz::TinyVector<BlitzStridesType, Volume<T>::DIM_MAX>& strides
356 return _blitz.dataZero()[ index[0] * strides[0]
357 + index[1] * strides[1]
358 + index[2] * strides[2]
359 + index[3] * strides[3] ];
363 const blitz::TinyVector<BlitzStridesType, Volume<T>::DIM_MAX>& strides
366 return _blitz.dataZero()[ index[0] * strides[0]
367 + index[1] * strides[1]
368 + index[2] * strides[2]
369 + index[3] * strides[3]
370 + index[4] * strides[4] ];
374 const blitz::TinyVector<BlitzStridesType, Volume<T>::DIM_MAX>& strides
377 return _blitz.dataZero()[ index[0] * strides[0]
378 + index[1] * strides[1]
379 + index[2] * strides[2]
380 + index[3] * strides[3]
381 + index[4] * strides[4]
382 + index[5] * strides[5] ];
386 const blitz::TinyVector<BlitzStridesType, Volume<T>::DIM_MAX>& strides
389 return _blitz.dataZero()[ index[0] * strides[0]
390 + index[1] * strides[1]
391 + index[2] * strides[2]
392 + index[3] * strides[3]
393 + index[4] * strides[4]
394 + index[5] * strides[5]
395 + index[6] * strides[6] ];
399 const blitz::TinyVector<BlitzStridesType, Volume<T>::DIM_MAX>& strides
402 return _blitz.dataZero()[ index[0] * strides[0]
403 + index[1] * strides[1]
404 + index[2] * strides[2]
405 + index[3] * strides[3]
406 + index[4] * strides[4]
407 + index[5] * strides[5]
408 + index[6] * strides[6]
409 + index[7] * strides[7] ];
417 blitz::TinyVector<int, Volume<T>::DIM_MAX> pos;
418 int i, n = index.size();
419 for( i=0; i<n && i<Volume<T>::DIM_MAX; ++i )
421 for( ; i<Volume<T>::DIM_MAX; ++i )
423 return _blitz( pos );
434 return *_blitz.dataZero();
441 const blitz::TinyVector<BlitzStridesType, Volume<T>::DIM_MAX>& strides
445 for(
int i=0; i!=index.size(); ++i )
446 offset += index[i] * strides[i];
447 return _blitz.dataZero()[ offset ];
451 template <
typename T >
inline
454 return at( position );
458 template <
typename T >
inline
461 return at( position );
464 template <
typename T >
inline
467 return _blitz( index );
470 template <
typename T >
inline
473 return _blitz( index );
476 template <
typename T >
inline
479 return _blitz( index );
482 template <
typename T >
inline
485 return _blitz( index );
488 template <
typename T >
inline
491 return _blitz( index );
494 template <
typename T >
inline
497 return _blitz( index );
500 template <
typename T >
inline
503 return _blitz( index );
506 template <
typename T >
inline
509 return _blitz( index );
512 template <
typename T >
inline
515 return _blitz( index );
518 template <
typename T >
inline
521 return _blitz( index );
524 template <
typename T >
inline
525 blitz::Array<T,Volume< T >::DIM_MAX>
528 return _blitz( subdomain );
531 template <
typename T >
inline
532 blitz::Array<T,Volume< T >::DIM_MAX>
535 return _blitz( subdomain );
538 template <
typename T >
inline
539 blitz::Array<T,Volume< T >::DIM_MAX>
545 template <
typename T >
inline
546 blitz::Array<T,Volume< T >::DIM_MAX>
549 return _blitz( r0, r1 );
552 template <
typename T >
inline
553 blitz::Array<T,Volume< T >::DIM_MAX>
555 const blitz::Range & r2 )
const
557 return _blitz( r0, r1, r2 );
560 template <
typename T >
inline
561 blitz::Array<T,Volume< T >::DIM_MAX>
563 const blitz::Range & r2,
const blitz::Range & r3 )
const
565 return _blitz( r0, r1, r2, r3 );
568 template <
typename T >
571 long x6,
long x7,
long x8 )
const
573 return _blitz( blitz::TinyVector<long,8>( x1, x2, x3, x4, x5, x6, x7,
577 template <
typename T >
580 long x5,
long x6,
long x7,
long x8 )
const
582 return at( x1, x2, x3, x4, x5, x6, x7, x8 );
585 template <
typename T >
588 long x5,
long x6,
long x7,
long x8 )
590 return _blitz( blitz::TinyVector<long,8>( x1, x2, x3, x4, x5, x6, x7,
595 template <
typename T >
598 long x5,
long x6,
long x7,
long x8 )
600 return at( x1, x2, x3, x4, x5, x6, x7, x8 );
604 template <
typename T>
610 template <
typename T>
616 return volumeout << volume;
619 template <
typename T>
625 std::vector<int> dims = volume.
getSize();
626 for(
int d=0, n=dims.size(); d<n; ++d )
635 std::string tB = ( hasT ?
"[" :
"" );
636 std::string tE = ( hasT ?
"]" :
"" );
637 std::string tS = ( hasT ?
" " :
"" );
639 std::string zB = ( hasZ ?
"[" :
"" );
640 std::string zE = ( hasZ ?
"]" :
"" );
641 std::string zS = ( hasZ ?
" " :
"" );
643 std::string yB = ( hasY ?
"[" :
"" );
644 std::string yE = ( hasY ?
"]" :
"" );
645 std::string yS = ( hasY ?
" " :
"" );
647 std::string xB = ( hasX ?
"[" :
"" );
648 std::string xE = ( hasX ?
"]" :
"" );
649 std::string xS = ( hasX ?
" " :
"" );
651 size_t sizeT =
static_cast<size_t>(volume.
getSizeT());
652 size_t sizeZ =
static_cast<size_t>(volume.
getSizeZ());
653 size_t sizeY =
static_cast<size_t>(volume.
getSizeY());
654 size_t sizeX =
static_cast<size_t>(volume.
getSizeX());
656 for(
size_t t = 0; t < sizeT; ++t )
659 if( t < out.
maxT() ) {
660 out.
ostream() << std::setw(2) << std::left << tB;
662 out.
ostream() << std::setw(3) << std::left <<
"...";
666 for(
size_t z = 0; z < sizeZ; ++z )
669 if( z < out.
maxZ() ) {
670 out.
ostream() << std::setw(2) << std::left << zB;
672 out.
ostream() << std::setw(3) << std::left <<
"...";
676 for(
size_t y = 0; y < sizeY; ++y )
678 if( y < out.
maxY() ) {
679 out.
ostream() << std::setw(2) << std::left << yB;
681 out.
ostream() << std::setw(3) << std::left <<
"...";
684 for(
size_t x = 0; x < sizeX; ++x )
686 if( x < out.
maxX() ) {
687 out.
ostream() << std::setw(10) << std::left
688 <<
toString( volume( x, y, z, t ) );
690 out.
ostream() << std::setw(10) << std::left <<
"...";
694 out.
ostream() << std::setw(2) << std::left << yE;
698 out.
ostream() << std::setw(2) << std::left << zS;
700 out.
ostream() << std::setw(2) << std::left << tS;
703 out.
ostream() << std::setw(2) << std::left << zE;
707 out.
ostream() << std::setw(2) << std::left << tS;
710 out.
ostream() << std::setw(2) << std::left << tE;
718 template <
typename T>
726 << (v->allocatorContext().isAllocated() ?
"" :
"not ")
727 <<
"allocated" << std::endl << std::flush;
730 std::vector<int> dims = v->getSize();
734 for(
int i=0; i<dims.size()-1; ++i)
735 std::cout << dims[i] <<
", ";
736 std::cout << dims[dims.size()-1] <<
"]" << std::endl << std::flush;
740 std::vector<int> borders = v->getBorders();
743 if (borders.size()>0) {
744 for(
int i=0; i<borders.size()-1; ++i)
745 std::cout << borders[i] <<
", ";
746 std::cout << borders[borders.size()-1] <<
"]" << std::endl << std::flush;
751 if (!v->refVolume().
isNull()) {
752 std::vector<int> pos = v->posInRefVolume();
754 <<
"position in parent [";
755 for(
int i=0; i<pos.size()-1; ++i)
756 std::cout << pos[i] <<
", ";
757 std::cout << pos[pos.size()-1] <<
"]" << std::endl << std::flush;
Object reference(Object &value)
const size_t & maxT() const
const size_t & maxY() const
std::ostream & ostream() const
const size_t & maxZ() const
const size_t & maxX() const
std::vector< int > getSize() const
get the 4 dimensions in a vector
std::vector< int > Position
const T & at(long x, long y=0, long z=0, long t=0) const
const T & operator()(long x, long y=0, long z=0, long t=0) const
Warning: this operator is not virtual, so may not have the expected result on inherited classes (see ...
std::ostream & operator<<(std::ostream &out, const VoxelValue< T, C > &aa)
void displayRefVolumes(const Volume< T > &vol)
Display information about volumes hierarchy.
std::string toString(const T &object)
carto::Object getObjectHeader(Headered &h)