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)