21 #ifndef fiber_3d_array_hpp
22 #define fiber_3d_array_hpp
24 #include "../common/common.hpp"
25 #include "boost/operators.hpp"
30 #define FIBER_CHECK_ARRAY_BOUNDS
37 template <
typename T>
class _2dSliceOf3dArray;
38 template <
typename T>
class _1dSliceOf3dArray;
39 template <
typename T>
class Const2dSliceOf3dArray;
40 template <
typename T>
class Const1dSliceOf3dArray;
49 , boost::multiplicative<_3dArray<T>,T > >
53 _3dArray(
size_t extent0,
size_t extent1,
size_t extent2);
54 _3dArray(
size_t extent0,
size_t extent1,
size_t extent2, T* data,
61 T& operator()(
size_t index0,
size_t index1,
size_t index2);
62 const T& operator()(
size_t index0,
size_t index1,
size_t index2)
const;
75 size_t extent(
size_t dimension)
const;
76 void set_size(
size_t extent0,
size_t extent1,
size_t extent2);
77 bool is_empty()
const;
80 typedef const T* const_iterator;
83 const_iterator begin()
const;
85 const_iterator end()
const;
88 void init_memory(
size_t extent0,
size_t extent1,
size_t extent2);
92 #ifdef FIBER_CHECK_ARRAY_BOUNDS
93 void check_dimension(
size_t dimension)
const;
94 void check_extents(
size_t extent0,
size_t extent1,
size_t extent2)
const;
95 void check_indices(
size_t index0,
size_t index1,
size_t index2)
const;
106 template <
typename T>
121 const T& operator()(
size_t index0,
size_t index1)
const;
122 T& operator()(
size_t index0,
size_t index1);
124 size_t extent(
size_t dimension)
const;
127 void check_dimension(
size_t dimension)
const;
135 template <
typename T>
141 const T& operator()(
size_t index0,
size_t index1)
const;
143 size_t extent(
size_t dimension)
const;
146 void check_dimension(
size_t dimension)
const;
154 template <
typename T>
170 const T& operator()(
size_t index0)
const;
171 T& operator()(
size_t index0);
173 size_t extent(
size_t dimension)
const;
176 void check_dimension(
size_t dimension)
const;
180 size_t m_index1, m_index2;
184 template <
typename T>
190 const T& operator()(
size_t index0)
const;
192 size_t extent(
size_t dimension)
const;
195 void check_dimension(
size_t dimension)
const;
199 size_t m_index1, m_index2;
204 #include "_3d_array_imp.hpp"
_1dSliceOf3dArray(_3dArray< T > &array, size_t index1, size_t index2)
Construct a slice consisting of the elements array(:,index1,index2)
Definition: _3d_array_imp.hpp:316
Lightweight encapsulation of a 2D slice of a constant 3D array.
Definition: _3d_array.hpp:136
Lightweight encapsulation of a 1D slice of a constant 3D array.
Definition: _3d_array.hpp:185
Lightweight encapsulation of a 2D slice of a 3D array.
Definition: _3d_array.hpp:107
Lightweight encapsulation of a 1D slice of a 3D array.
Definition: _3d_array.hpp:155
Simple implementation of a 3D Fortran-ordered array.
Definition: _3d_array.hpp:48