23 #ifndef ARRAY3DBOXVARREF_H 24 #define ARRAY3DBOXVARREF_H 26 #include "Array3dBoxRefBase.h" 32 template <
class ARRAY_3D>
37 typedef typename ARRAY_3D::const_reference const_reference;
38 typedef typename ARRAY_3D::reference reference;
40 explicit Array3dBoxVarRef(ARRAY_3D &m,
const size_t &iLayer=1,
const size_t &f= 1,
const size_t &c= 1);
49 inline virtual const_reference operator()(
size_t iLayer=1,
size_t iRow=1,
size_t col=1)
const 51 inline virtual reference operator()(
size_t iLayer=1,
size_t iRow=1,
size_t col=1)
55 template<
class ARRAY_3D>
57 :
Array3dBoxRefBase(iLayer,f,c,t.getNumberOfLayers(),t.getNumberOfRows(),t.getNumberOfColumns()),ttz(t) {}
59 template<
class ARRAY_3D>
63 template<
class ARRAY_3D>
65 :
Array3dBoxRefBase(iLayer,clip(row_range,t.getNumberOfRows()),clip(column_range,t.getNumberOfColumns())),ttz(t)
67 if(iLayer>ttz.getNumberOfLayers())
68 std::clog <<
"Aviso; layer index: " << iLayer <<
" out of range in array with ranges: " <<
Array3dRange(ttz) << std::endl;
71 template<
class ARRAY_3D>
73 :
Array3dBoxRefBase(clip(layer_range,t.getNumberOfLayers()),iRow,clip(column_range,t.getNumberOfColumns())),ttz(t)
75 if(iRow>ttz.getNumberOfRows())
76 std::clog <<
"Aviso; row index: " << iRow
77 <<
" out of range in array with ranges: " 81 template<
class ARRAY_3D>
83 :
Array3dBoxRefBase(clip(layer_range,t.getNumberOfLayers()),clip(row_range,t.getNumberOfRows()),col),ttz(t)
85 if(col>ttz.getNumberOfColumns())
86 std::clog <<
"Aviso; column index: " << col
87 <<
" out of range in array with ranges: " 91 template<
class ARRAY_3D>
95 if(iLayer>ttz.getNumberOfLayers())
96 std::clog <<
"Aviso; layer index: " << iLayer
97 <<
" out of range in array with ranges: " 99 if(iRow>ttz.getNumberOfRows())
100 std::clog <<
"Aviso; row index: " << iRow
101 <<
" out of range in array with ranges: " 105 template<
class ARRAY_3D>
109 if(iLayer>ttz.getNumberOfLayers())
110 std::clog <<
"Aviso; layer index: " << iLayer
111 <<
" out of range in array with ranges: " 113 if(col>ttz.getNumberOfColumns())
114 std::clog <<
"Aviso; column index: " << col
115 <<
" out of range in array with ranges: " 119 template<
class ARRAY_3D>
123 if(iRow>ttz.getNumberOfRows())
124 std::clog <<
"Aviso; row index: " << iRow
125 <<
" out of range in array with ranges: " 127 if(col>ttz.getNumberOfColumns())
128 std::clog <<
"Aviso; column index: " << col
129 <<
" out of range in array with ranges: " 133 template <
class ARRAY_3D>
134 inline std::ostream &operator<<(std::ostream &os,const Array3dBoxVarRef<ARRAY_3D> &c)
140 template <
class ARRAY_3D,
class TRF>
145 const size_t n_layers= box.getNumberOfLayers();
146 const size_t n_rows= box.getNumberOfRows();
147 const size_t n_columns= box.getNumberOfColumns();
149 for(
size_t i=1;i<=
n_rows;i++)
151 retval(i,j,k)= Transform(box(i,j,k));
size_t offset_cp
Offset layer.
Definition: Array3dBoxRefBase.h:40
size_t n_layers
number of layers.
Definition: Array3dBoxRefBase.h:37
size_t offset_c
Offset column.
Definition: Array3dBoxRefBase.h:42
Reference to a "sub-array".
Definition: Array3dBoxVarRef.h:33
size_t offset_f
Offset row.
Definition: Array3dBoxRefBase.h:41
Indices that define a block of an array.
Definition: Array3dBoxRefBase.h:34
size_t n_columns
number of columns.
Definition: Array3dBoxRefBase.h:39
size_t n_rows
number of rows.
Definition: Array3dBoxRefBase.h:38
Rangos de variación de tres índices, se emplea en BoxConstRef.
Definition: Array3dRange.h:32
Rango de variación de un índice, se emplea en BoxConstRef.
Definition: RangoIndice.h:30