28 #include "Array3dBoxConstRef.h"    29 #include "ConstantILayerConstRef.h"    30 #include "ConstantJLayerConstRef.h"    31 #include "ConstantKLayerConstRef.h"    32 #include "IRowConstRef.h"    33 #include "JRowConstRef.h"    34 #include "KRowConstRef.h"    35 #include "Array3dBoxVarRef.h"    36 #include "ConstantILayerVarRef.h"    37 #include "ConstantJLayerVarRef.h"    38 #include "ConstantKLayerVarRef.h"    39 #include "IRowVarRef.h"    40 #include "JRowVarRef.h"    41 #include "KRowVarRef.h"    50 template <
class Array>
    54     typedef typename Array::value_type value_type;
    55     typedef typename Array::reference reference;
    56     typedef typename Array::const_reference const_reference;
    57     typedef typename std::vector<Array>::value_type matrix_type;
    58     typedef typename std::vector<Array>::iterator iterator;
    59     typedef typename std::vector<Array>::const_iterator const_iterator;
    78     inline matrix_type &get_layer(
const size_t &iLayer)
    79       { 
return (*
this)[iLayer-1]; }
    80     inline const matrix_type &get_layer(
const size_t &iLayer)
 const    81       { 
return (*
this)[iLayer-1]; }
    85     Array3dBase(
const size_t &,
const size_t &,
const size_t &, 
const value_type &def_value= value_type());
    87     bool check_range(
const size_t &,
const size_t &,
const size_t &) 
const;
    88     void resize(
const size_t &);
    89     void resize(
const size_t &,
const size_t &,
const size_t &,
const value_type &def_value= value_type());
    90     size_t getNumberOfLayers(
void) 
const;
    91     size_t getNumberOfRows(
const size_t &layer= 1) 
const;
    92     size_t getNumberOfColumns(
const size_t &layer= 1) 
const;
    94     size_t GetDim(
void) 
const;
   102     bool Null(
void) 
const;
   106     void dim(
const size_t &,
const size_t &,
const size_t &, 
const value_type &default_value= value_type());
   108     const Array &
operator()(
const size_t &layer) 
const;
   110     inline void assign(
const size_t &i,
const size_t &j,
const size_t &k, 
const bool &value)
   111       { get_layer(i).assign(j,k,value); }
   112     inline const_reference 
operator()(
const size_t &i,
const size_t &j,
const size_t &k)
 const   113       { 
return ((*
this)(i))(j,k); }
   114     inline reference 
operator()(
const size_t &i,
const size_t &j,
const size_t &k)
   115       { 
return ((*
this)(i))(j,k); }
   116     reference getAtI(
const size_t &i);
   117     const_reference getAtI(
const size_t &) 
const;
   118     reference getAtIJ(
const size_t &,
const size_t &);
   119     const_reference getAtIJ(
const size_t &,
const size_t &) 
const;
   120     value_type getAtIJK(
const size_t &,
const size_t &,
const size_t &);
   122     box_const_ref getBoxConstRef(
size_t layer=1,
size_t f=1, 
size_t c=1) 
const;
   123     box_const_ref getBoxConstRef(
const Array3dRange &rango) 
const;
   125     constant_i_layer_const_ref getConstantILayerConstRef(
size_t layer=1,
size_t f=1, 
size_t c=1) 
const;
   126     constant_i_layer_const_ref getConstantILayerConstRef(
size_t layer,
const RangoIndice &,
const RangoIndice &) 
const;
   127     constant_j_layer_const_ref getConstantJLayerConstRef(
size_t f=1,
size_t layer=1, 
size_t c=1) 
const;
   128     constant_j_layer_const_ref getConstantJLayerConstRef(
const RangoIndice &,
const size_t &f,
const RangoIndice &) 
const;
   129     constant_k_layer_const_ref getConstantKLayerConstRef(
size_t c=1,
size_t layer=1, 
size_t f=1) 
const;
   130     constant_k_layer_const_ref getConstantKLayerConstRef(
const RangoIndice &,
const RangoIndice &,
const size_t &) 
const;
   132     const_ref_i_row getIRowConstRef(
size_t f=1,
size_t c=1) 
const;
   133     const_ref_i_row getIRowConstRef(
const RangoIndice &,
const size_t &f,
const size_t &c) 
const;
   134     const_ref_j_row getJRowConstRef(
size_t layer=1,
size_t c=1) 
const;
   135     const_ref_j_row getJRowConstRef(
const size_t &layer,
const RangoIndice &,
const size_t &c) 
const;
   136     const_ref_k_row getKRowConstRef(
size_t layer=1,
size_t f=1) 
const;
   137     const_ref_k_row getKRowConstRef(
const size_t &layer,
const size_t &f,
const RangoIndice &) 
const;
   139     box_var_ref getBoxVarRef(
size_t layer=1,
size_t f=1, 
size_t c=1);
   142     constant_i_layer_variable_ref getConstantILayerVarRef(
size_t layer=1,
size_t f=1, 
size_t c=1);
   143     constant_i_layer_variable_ref getConstantILayerVarRef(
const size_t &layer,
const RangoIndice &,
const RangoIndice &);
   144     constant_j_layer_variable_ref getConstantJLayerVarRef(
size_t f=1,
size_t layer=1, 
size_t c=1);
   145     constant_j_layer_variable_ref getConstantJLayerVarRef(
const RangoIndice &,
const size_t &f,
const RangoIndice &);
   146     constant_k_layer_variable_ref getConstantKLayerVarRef(
size_t c=1,
size_t layer=1, 
size_t f=1);
   147     constant_k_layer_variable_ref getConstantKLayerVarRef(
const RangoIndice &,
const RangoIndice &,
const size_t &c);
   149     var_ref_i_row getVarRefIRow(
size_t f=1,
size_t c=1);
   150     var_ref_i_row getVarRefIRow(
const RangoIndice &,
const size_t &f,
const size_t &c);
   151     var_ref_j_row getVarRefJRow(
size_t layer=1,
size_t c=1);
   152     var_ref_j_row getVarRefJRow(
const size_t &layer,
const RangoIndice &,
const size_t &c);
   153     var_ref_k_row getVarRefKRow(
size_t layer=1,
size_t f=1);
   154     var_ref_k_row getVarRefKRow(
const size_t &layer,
const size_t &f,
const RangoIndice &);
   161 template <
class Array>
   163   : 
std::vector<Array>(n_layers)
   167 template <
class Array>
   169   : 
std::vector<Array>(n_layers,m)
   173 template <
class Array>
   175   : 
std::vector<Array>(n_layers)
   177     for(
size_t i=0;i<n_layers;i++)
   178       (*
this)[i]= Array(n_rows,cols,def_value);
   183 void Array3dBase<T>::dim(
const size_t &nLayers,
const size_t &nRows,
const size_t &numberOfColumns, 
const value_type &def_value)
   184   { this->
resize(nLayers,nRows,numberOfColumns,def_value); }
   187 template <
class Array>
   190     std::vector<Array>::resize(n_layers);
   194 template <
class Array>
   197     std::vector<Array>::resize(n_layers);
   198     for(
size_t i= 0;i<n_layers;i++)
   199       (*
this)[i].resize(n_rows,cols,v);
   202 template <
class Array>
   205     if(layer<=getNumberOfLayers())
   212 template <
class Array>
   214   { 
return this->size(); }
   216 template <
class Array>
   221       retval= get_layer(layer).getNumberOfRows();
   224 template <
class Array>
   229       retval= get_layer(layer).getNumberOfColumns();
   234 template <
class Array>
   237     const size_t sz= this->size();
   242         const matrix_type &layer= (*this)(1);
   243         return sz*layer.getNumberOfRows()*layer.getNumberOfColumns();
   247 template <
class Array>
   251     if(this->size()>1) retval++;
   252     if(this->getNumberOfRows()>1) retval++;
   253     if(this->getNumberOfColumns()>1) retval++;
   258 template <
class Array>
   261     const size_t sz= this->size();
   266         const Array &layer= (*this)(1); 
   267         return sz*layer.getNumberOfRows()*layer.getNumberOfColumns();
   272 template <
class Array>
   278       return (*
this)[0].Null();
   282 template <
class Array>
   290         const size_t numberOfLayers= this->getNumberOfLayers();
   291         for(
size_t i=0;i<numberOfLayers;i++)
   292           if((*
this)[i].
Null())
   302 template <
class Array>
   305     std::vector<Array>::clear();
   310 template <
class Array>
   313     if((this->getNumberOfRows()>1) || (this->getNumberOfColumns()>1)) 
return false;
   318 template <
class Array>
   321     if((this->getNumberOfLayers()>1) || (this->getNumberOfColumns()>1)) 
return false;
   326 template <
class Array>
   329     if((this->getNumberOfLayers()>1) || (this->getNumberOfRows()>1)) 
return false;
   334 template <
class Array>
   336   { 
return (this->getNumberOfLayers()==1); }
   339 template <
class Array>
   341   { 
return (this->getNumberOfRows()==1); }
   344 template <
class Array>
   346   { 
return (this->getNumberOfColumns()==1); }
   349 template <
class Array>
   351   { 
return get_layer(i); }
   354 template <
class Array>
   356   { 
return get_layer(i); }
   359 template <
class Array>
   361   {  
return const_cast<reference
>(
static_cast<const Array3dBase<Array> &
>(*this).getAtI(i)); }
   363 template <
class Array>
   374     std::cerr << 
"Array3dBase::getAtI; the set is not one-dimensional." << std::endl;
   379 template <
class Array>
   382     typename Array3dBase<Array>::value_type retval= value_type();
   383     if(this->check_range(i,j,k))
   384       retval= (*this)(i,j,k);
   388 template <
class Array>
   390   {  
return const_cast<reference
>(
static_cast<const Array3dBase<Array> &
>(*this).getAtIJ(i)); }
   392 template <
class Array>
   405     std::cerr << 
"Array3dBase::" << __FUNCTION__
   406               << 
"; not bidimensional." << std::endl;
   411 template <
class Array>
   414 template <
class Array>
   418 template <
class Array>
   421 template <
class Array>
   424 template <
class Array>
   427 template <
class Array>
   430 template <
class Array>
   433 template <
class Array>
   437 template <
class Array>
   440 template <
class Array>
   443 template <
class Array>
   446 template <
class Array>
   449 template <
class Array>
   452 template <
class Array>
   456 template <
class Array>
   459 template <
class Array>
   463 template <
class Array>
   466 template <
class Array>
   469 template <
class Array>
   472 template <
class Array>
   475 template <
class Array>
   478 template <
class Array>
   482 template <
class Array>
   485 template <
class Array>
   488 template <
class Array>
   491 template <
class Array>
   494 template <
class Array>
   497 template <
class Array>
   502 template <
class Array>
   505     const size_t numberOfLayers= other.getNumberOfLayers();
   506     const size_t numberOfRows= other.getNumberOfRows();
   507     const size_t numberOfColumns= other.getNumberOfColumns();
   508     if((numberOfLayers+layer_offset)>getNumberOfLayers())
   510         std::cerr << 
"Array3dBase::" << __FUNCTION__
   511               << 
"; layer index out of range." << std::endl;
   514     if((numberOfRows+row_offset)>this->getNumberOfRows())
   516         std::cerr << 
"Array3dBase::" << __FUNCTION__
   517           << 
"; row index out of range." << std::endl;
   520     if((numberOfColumns+offset_col)>this->getNumberOfColumns())
   522         std::cerr << 
"Array3dBase::" << __FUNCTION__
   523           << 
"; column index out of range." << std::endl;
   526     for(
size_t i=1;i<=numberOfLayers;i++)
   527       for(
size_t j=1;j<=numberOfRows;j++)
   528         for(
size_t k=1;k<=numberOfColumns;k++)
   529           (*
this)(layer_offset+i,row_offset+j,offset_col+k)= other(i,j,k);
   533 template <
class Array>
   534 inline std::ostream &operator<<(std::ostream &os,const Array3dBase<Array> &t)
   536     const size_t n_layers= t.getNumberOfLayers();
   537     for(
size_t i=1;i<=n_layers;i++)
 void dim(const size_t &, const size_t &, const size_t &, const value_type &default_value=value_type())
Matrix dimensions. 
Definition: Array3dBase.h:183
Array3dBase(const size_t &n_layers=0)
Default constructor. 
Definition: Array3dBase.h:162
void clear(void)
Clears container. 
Definition: Array3dBase.h:303
bool isKRow(void) const
Returns true if only index K varies. 
Definition: Array3dBase.h:327
Reference to a row of the array which points have constant K indexes. 
Definition: KRowVarRef.h:32
Reference to a layer of the array which points have constant J index. 
Definition: ConstantJLayerVarRef.h:34
bool Null(void) const
Returns true if it's empty or the pointers are null. 
Definition: Array3dBase.h:273
size_t NumPtrs(void) const
Return the number of elements of the array. 
Definition: Array3dBase.h:259
Reference to a layer row from the array which points have constant J and K indices. 
Definition: IRowConstRef.h:32
bool isKConstantLayer(void) const
Returns true if the indexes that vary are los I y J. 
Definition: Array3dBase.h:345
Reference to a layer of the array which points have constant J index. 
Definition: ConstantJLayerConstRef.h:34
Reference to a "sub-array". 
Definition: Array3dBoxVarRef.h:33
Reference to a layer of the array which points have constant K index. 
Definition: ConstantKLayerVarRef.h:32
void putBox(size_t layer_offset, size_t row_offset, size_t offset_col, const Array3dBase< Array > &)
Put in the array the array argument. 
Definition: Array3dBase.h:503
size_t getNumberOfComponents(void) const
Return the number of components in the container. 
Definition: Array3dBase.h:235
const Array & operator()(const size_t &layer) const
Return the i-th layer. 
Definition: Array3dBase.h:350
Reference to a layer of the array which points have constant I index. 
Definition: ConstantILayerVarRef.h:33
Referencia a una "sub array 3D". 
Definition: Array3dBoxConstRef.h:34
bool HasNull(void) const
Returns true if it's empty or some of the pointers are null. 
Definition: Array3dBase.h:283
Reference to a layer of the array which points have constant I index. 
Definition: ConstantILayerConstRef.h:34
bool isJRow(void) const
Returns true if only index J varies. 
Definition: Array3dBase.h:319
Reference to a row of the array which points have constant J and K indices. 
Definition: JRowVarRef.h:32
Reference to a layer of the array which points have constant K index. 
Definition: ConstantKLayerConstRef.h:35
Rangos de variación de tres índices, se emplea en BoxConstRef. 
Definition: Array3dRange.h:32
bool isJConstantLayer(void) const
Returns true if the indexes that vary are los I y K. 
Definition: Array3dBase.h:340
Reference to a row of the array which points have constant J and K indices. 
Definition: IRowVarRef.h:32
bool isIRow(void) const
Returns true if only index I varies. 
Definition: Array3dBase.h:311
Reference to a layer of the array which points have constant J and K indexes. 
Definition: JRowConstRef.h:32
Reference to a layer row of the array which points have constant J and K indices. ...
Definition: KRowConstRef.h:32
arrays3d 
Definition: Array3dBase.h:51
void resize(const size_t &)
Resize the array. 
Definition: Array3dBase.h:188
Rango de variación de un índice, se emplea en BoxConstRef. 
Definition: RangoIndice.h:30
bool isIConstantLayer(void) const
Returns true if the indexes that vary are los J y K. 
Definition: Array3dBase.h:335