MeteoIODoc 20241221.207bde49
mio::Array3D< T > Class Template Reference

Detailed Description

template<class T>
class mio::Array3D< T >

The template class Array3D is a 3D Array (Tensor) able to hold any type of object as datatype. It relies on the Array3DProxy2 class to provide the [][][] operator (slower than the (i,j,k) call). If the compilation flag NOSAFECHECKS is used, bounds check is turned off (leading to increased performances).

Date
2009-07-19
Author
Thomas Egger

#include <Array3D.h>

Public Member Functions

 Array3D ()
 
 Array3D (const Array3D< T > &i_array3D, const size_t &i_nx, const size_t &i_ny, const size_t &i_nz, const size_t &i_ncols, const size_t &i_nrows, const size_t &i_ndepth)
 
 Array3D (const size_t &anx, const size_t &any, const size_t &anz)
 
 Array3D (const size_t &anx, const size_t &any, const size_t &anz, const T &init)
 
void subset (const Array3D< T > &i_array3D, const size_t &i_nx, const size_t &i_ny, const size_t &i_nz, const size_t &i_ncols, const size_t &i_nrows, const size_t &i_ndepth)
 
void fill (const Array3D< T > &i_array3D, const size_t &i_nx, const size_t &i_ny, const size_t &i_nz, const size_t &i_ncols, const size_t &i_nrows, const size_t &i_ndepth)
 A method that can be used to insert a subplane into an existing Array3D object that is passed as i_array3D argument. This is exactly the opposite of the subset method an can be used to rebuild an array from subsets. More...
 
void fill (const Array3D< T > &i_array3D, const size_t &i_nx, const size_t &i_ny, const size_t &i_nz)
 
void insert (const Array2D< T > &layer, const size_t &depth)
 insert a 2D layer in an Array3D object The (nx ,ny) dimensions of the 2D and the 3D arrays must match and the insertion depth must exist in the Array3D. More...
 
void setKeepNodata (const bool i_keep_nodata)
 set how to process nodata values (ie: as nodata or as normal numbers) More...
 
bool getKeepNodata () const
 get how to process nodata values (ie: as nodata or as normal numbers) More...
 
void resize (const size_t &anx, const size_t &any, const size_t &anz)
 
void resize (const size_t &anx, const size_t &any, const size_t &anz, const T &init)
 
void size (size_t &anx, size_t &any, size_t &anz) const
 
size_t size () const
 
size_t getNx () const
 
size_t getNy () const
 
size_t getNz () const
 
void clear ()
 
bool empty () const
 
getMin () const
 returns the minimum value contained in the grid More...
 
getMax () const
 returns the maximum value contained in the grid More...
 
getMean () const
 returns the mean value contained in the grid More...
 
size_t getCount () const
 returns the number of points contained in the grid. If setNodataHandling(IOUtils::RAW_NODATA), then the number of points is the size of the grid. If setNodataHandling(IOUtils::PARSE_NODATA), then it is the number of non-nodata values in the grid More...
 
const Array3D< T > getAbs () const
 returns the grid of the absolute value of values contained in the grid More...
 
void abs ()
 
const std::string toString () const
 
bool checkEpsilonEquality (const Array3D< double > &rhs, const double &epsilon) const
 
T & operator() (const size_t &i)
 
const T operator() (const size_t &i) const
 
T & operator() (const size_t &x, const size_t &y, const size_t &z)
 
const T operator() (const size_t &x, const size_t &y, const size_t &z) const
 
Array3DProxy< T > operator[] (const size_t &i)
 
Array3D< T > & operator= (const T &value)
 
Array3D< T > & operator+= (const T &rhs)
 
const Array3D< T > operator+ (const T &rhs) const
 
Array3D< T > & operator+= (const Array3D< T > &rhs)
 
const Array3D< T > operator+ (const Array3D< T > &rhs) const
 
Array3D< T > & operator-= (const T &rhs)
 
const Array3D< T > operator- (const T &rhs) const
 
Array3D< T > & operator-= (const Array3D< T > &rhs)
 
const Array3D< T > operator- (const Array3D< T > &rhs) const
 
Array3D< T > & operator*= (const T &rhs)
 
const Array3D< T > operator* (const T &rhs) const
 
Array3D< T > & operator*= (const Array3D< T > &rhs)
 
const Array3D< T > operator* (const Array3D< T > &rhs) const
 
Array3D< T > & operator/= (const T &rhs)
 
const Array3D< T > operator/ (const T &rhs) const
 
Array3D< T > & operator/= (const Array3D< T > &rhs)
 
const Array3D< T > operator/ (const Array3D< T > &rhs) const
 
bool operator== (const Array3D< T > &) const
 Operator that tests for equality. More...
 
bool operator!= (const Array3D< T > &) const
 Operator that tests for inequality. More...
 

Static Public Member Functions

static bool checkEpsilonEquality (const Array3D< double > &rhs1, const Array3D< double > &rhs2, const double &epsilon)
 

Protected Attributes

std::vector< T > vecData
 The actual objects are stored in a one-dimensional vector. More...
 
size_t nx
 
size_t ny
 
size_t nz
 
size_t nxny
 
bool keep_nodata
 

Friends

template<class P >
std::ostream & operator<< (std::ostream &os, const Array3D< P > &array)
 
template<class P >
std::istream & operator>> (std::istream &is, Array3D< P > &array)
 

Constructor & Destructor Documentation

◆ Array3D() [1/4]

template<class T >
mio::Array3D< T >::Array3D

◆ Array3D() [2/4]

template<class T >
mio::Array3D< T >::Array3D ( const Array3D< T > &  i_array3D,
const size_t &  i_nx,
const size_t &  i_ny,
const size_t &  i_nz,
const size_t &  i_ncols,
const size_t &  i_nrows,
const size_t &  i_ndepth 
)

A constructor that can be used to create an Array3D object that is contained in the one passed as i_array3D argument. The resulting Array3D object is a by value copy of a subvolume of the volume spanned by the i_array3D

Parameters
i_array3Darray containing to extract the values from
i_nxlower left corner cell X index
i_nylower left corner cell Y index
i_nzlower left corner cell Z index
i_ncolsnumber of columns of the new array
i_nrowsnumber of rows of the new array
i_ndepthnumber of depths of the new array

◆ Array3D() [3/4]

template<class T >
mio::Array3D< T >::Array3D ( const size_t &  anx,
const size_t &  any,
const size_t &  anz 
)

A constructor that creates an array of a given size

Parameters
anxnumber of columns of the new array
anynumber of rows of the new array
anznumber of rows of the new array

◆ Array3D() [4/4]

template<class T >
mio::Array3D< T >::Array3D ( const size_t &  anx,
const size_t &  any,
const size_t &  anz,
const T &  init 
)

A constructor that creates an array filled with constant values

Parameters
anxnumber of columns of the new array
anynumber of rows of the new array
anznumber of depths of the new array
initinitial value to fill the array with

Member Function Documentation

◆ abs()

template<class T >
void mio::Array3D< T >::abs

◆ checkEpsilonEquality() [1/2]

template<class T >
bool mio::Array3D< T >::checkEpsilonEquality ( const Array3D< double > &  rhs,
const double &  epsilon 
) const

◆ checkEpsilonEquality() [2/2]

template<class T >
bool mio::Array3D< T >::checkEpsilonEquality ( const Array3D< double > &  rhs1,
const Array3D< double > &  rhs2,
const double &  epsilon 
)
static

◆ clear()

template<class T >
void mio::Array3D< T >::clear

◆ empty()

template<class T >
bool mio::Array3D< T >::empty

◆ fill() [1/2]

template<class T >
void mio::Array3D< T >::fill ( const Array3D< T > &  i_array3D,
const size_t &  i_nx,
const size_t &  i_ny,
const size_t &  i_nz 
)

◆ fill() [2/2]

template<class T >
void mio::Array3D< T >::fill ( const Array3D< T > &  i_array3D,
const size_t &  i_nx,
const size_t &  i_ny,
const size_t &  i_nz,
const size_t &  i_ncols,
const size_t &  i_nrows,
const size_t &  i_ndepth 
)

A method that can be used to insert a subplane into an existing Array3D object that is passed as i_array3D argument. This is exactly the opposite of the subset method an can be used to rebuild an array from subsets.

Parameters
i_array3Darray containing to extract the values from
i_nxlower left corner cell X index
i_nylower left corner cell Y index
i_nzlower left corner cell Z index
i_ncolsnumber of columns of the new array
i_nrowsnumber of rows of the new array
i_ndepthnumber of depths of the new array

◆ getAbs()

template<class T >
const Array3D< T > mio::Array3D< T >::getAbs

returns the grid of the absolute value of values contained in the grid

Returns
grid of abs(grid)

◆ getCount()

template<class T >
size_t mio::Array3D< T >::getCount

returns the number of points contained in the grid. If setNodataHandling(IOUtils::RAW_NODATA), then the number of points is the size of the grid. If setNodataHandling(IOUtils::PARSE_NODATA), then it is the number of non-nodata values in the grid

Returns
count

◆ getKeepNodata()

template<class T >
bool mio::Array3D< T >::getKeepNodata

get how to process nodata values (ie: as nodata or as normal numbers)

Returns
true means that NODATA is interpreted as NODATA, false means that it is a normal number

◆ getMax()

template<class T >
T mio::Array3D< T >::getMax

returns the maximum value contained in the grid

Returns
maximum value

◆ getMean()

template<class T >
T mio::Array3D< T >::getMean

returns the mean value contained in the grid

Returns
mean value

◆ getMin()

template<class T >
T mio::Array3D< T >::getMin

returns the minimum value contained in the grid

Returns
minimum value

◆ getNx()

template<class T >
size_t mio::Array3D< T >::getNx

◆ getNy()

template<class T >
size_t mio::Array3D< T >::getNy

◆ getNz()

template<class T >
size_t mio::Array3D< T >::getNz

◆ insert()

template<class T >
void mio::Array3D< T >::insert ( const Array2D< T > &  layer,
const size_t &  depth 
)

insert a 2D layer in an Array3D object The (nx ,ny) dimensions of the 2D and the 3D arrays must match and the insertion depth must exist in the Array3D.

Parameters
layerlayer to insert
depthdepth where the insertion should take place

◆ operator!=()

template<class T >
bool mio::Array3D< T >::operator!= ( const Array3D< T > &  in) const

Operator that tests for inequality.

◆ operator()() [1/4]

template<class T >
T & mio::Array3D< T >::operator() ( const size_t &  i)
inline

◆ operator()() [2/4]

template<class T >
const T mio::Array3D< T >::operator() ( const size_t &  i) const
inline

◆ operator()() [3/4]

template<class T >
T & mio::Array3D< T >::operator() ( const size_t &  x,
const size_t &  y,
const size_t &  z 
)
inline

◆ operator()() [4/4]

template<class T >
const T mio::Array3D< T >::operator() ( const size_t &  x,
const size_t &  y,
const size_t &  z 
) const
inline

◆ operator*() [1/2]

template<class T >
const Array3D< T > mio::Array3D< T >::operator* ( const Array3D< T > &  rhs) const

◆ operator*() [2/2]

template<class T >
const Array3D< T > mio::Array3D< T >::operator* ( const T &  rhs) const

◆ operator*=() [1/2]

template<class T >
Array3D< T > & mio::Array3D< T >::operator*= ( const Array3D< T > &  rhs)

◆ operator*=() [2/2]

template<class T >
Array3D< T > & mio::Array3D< T >::operator*= ( const T &  rhs)

◆ operator+() [1/2]

template<class T >
const Array3D< T > mio::Array3D< T >::operator+ ( const Array3D< T > &  rhs) const

◆ operator+() [2/2]

template<class T >
const Array3D< T > mio::Array3D< T >::operator+ ( const T &  rhs) const

◆ operator+=() [1/2]

template<class T >
Array3D< T > & mio::Array3D< T >::operator+= ( const Array3D< T > &  rhs)

◆ operator+=() [2/2]

template<class T >
Array3D< T > & mio::Array3D< T >::operator+= ( const T &  rhs)

◆ operator-() [1/2]

template<class T >
const Array3D< T > mio::Array3D< T >::operator- ( const Array3D< T > &  rhs) const

◆ operator-() [2/2]

template<class T >
const Array3D< T > mio::Array3D< T >::operator- ( const T &  rhs) const

◆ operator-=() [1/2]

template<class T >
Array3D< T > & mio::Array3D< T >::operator-= ( const Array3D< T > &  rhs)

◆ operator-=() [2/2]

template<class T >
Array3D< T > & mio::Array3D< T >::operator-= ( const T &  rhs)

◆ operator/() [1/2]

template<class T >
const Array3D< T > mio::Array3D< T >::operator/ ( const Array3D< T > &  rhs) const

◆ operator/() [2/2]

template<class T >
const Array3D< T > mio::Array3D< T >::operator/ ( const T &  rhs) const

◆ operator/=() [1/2]

template<class T >
Array3D< T > & mio::Array3D< T >::operator/= ( const Array3D< T > &  rhs)

◆ operator/=() [2/2]

template<class T >
Array3D< T > & mio::Array3D< T >::operator/= ( const T &  rhs)

◆ operator=()

template<class T >
Array3D< T > & mio::Array3D< T >::operator= ( const T &  value)

◆ operator==()

template<class T >
bool mio::Array3D< T >::operator== ( const Array3D< T > &  in) const

Operator that tests for equality.

◆ operator[]()

template<class T >
Array3DProxy< T > mio::Array3D< T >::operator[] ( const size_t &  i)

◆ resize() [1/2]

template<class T >
void mio::Array3D< T >::resize ( const size_t &  anx,
const size_t &  any,
const size_t &  anz 
)

◆ resize() [2/2]

template<class T >
void mio::Array3D< T >::resize ( const size_t &  anx,
const size_t &  any,
const size_t &  anz,
const T &  init 
)

◆ setKeepNodata()

template<class T >
void mio::Array3D< T >::setKeepNodata ( const bool  i_keep_nodata)

set how to process nodata values (ie: as nodata or as normal numbers)

Parameters
i_keep_nodatatrue means that NODATA is interpreted as NODATA, false means that it is a normal number By default, arrays keep nodata.

◆ size() [1/2]

template<class T >
size_t mio::Array3D< T >::size

◆ size() [2/2]

template<class T >
void mio::Array3D< T >::size ( size_t &  anx,
size_t &  any,
size_t &  anz 
) const

◆ subset()

template<class T >
void mio::Array3D< T >::subset ( const Array3D< T > &  i_array3D,
const size_t &  i_nx,
const size_t &  i_ny,
const size_t &  i_nz,
const size_t &  i_ncols,
const size_t &  i_nrows,
const size_t &  i_ndepth 
)

A method that can be used to create an Array3D object that is contained in the one passed as i_array3D argument. The resulting Array3D object is a by value copy of a subvolume of the volume spanned by the i_array3D

Parameters
i_array3Darray containing to extract the values from
i_nxlower left corner cell X index
i_nylower left corner cell Y index
i_nzlower left corner cell Z index
i_ncolsnumber of columns of the new array
i_nrowsnumber of rows of the new array
i_ndepthnumber of depths of the new array

◆ toString()

template<class T >
const std::string mio::Array3D< T >::toString

Friends And Related Function Documentation

◆ operator<<

template<class T >
template<class P >
std::ostream & operator<< ( std::ostream &  os,
const Array3D< P > &  array 
)
friend

◆ operator>>

template<class T >
template<class P >
std::istream & operator>> ( std::istream &  is,
Array3D< P > &  array 
)
friend

Member Data Documentation

◆ keep_nodata

template<class T >
bool mio::Array3D< T >::keep_nodata
protected

◆ nx

template<class T >
size_t mio::Array3D< T >::nx
protected

◆ nxny

template<class T >
size_t mio::Array3D< T >::nxny
protected

◆ ny

template<class T >
size_t mio::Array3D< T >::ny
protected

◆ nz

template<class T >
size_t mio::Array3D< T >::nz
protected

◆ vecData

template<class T >
std::vector<T> mio::Array3D< T >::vecData
protected

The actual objects are stored in a one-dimensional vector.


The documentation for this class was generated from the following file: