21 #ifndef fiber_4d_array_hpp
22 #define fiber_4d_array_hpp
24 #include "../common/common.hpp"
25 #include "boost/operators.hpp"
30 #define FIBER_CHECK_ARRAY_BOUNDS
37 template <
typename T>
class _4dSliceOf4dArray;
38 template <
typename T>
class _2dSliceOf4dArray;
39 template <
typename T>
class _1dSliceOf4dArray;
40 template <
typename T>
class Const4dSliceOf4dArray;
41 template <
typename T>
class Const2dSliceOf4dArray;
42 template <
typename T>
class Const1dSliceOf4dArray;
51 , boost::multiplicative<_4dArray<T>,T > >
55 _4dArray(
size_t extent0,
size_t extent1,
size_t extent2,
size_t extent3);
56 _4dArray(
size_t extent0,
size_t extent1,
size_t extent2,
size_t extent3, T* data);
62 T& operator()(
size_t index0,
size_t index1,
size_t index2,
size_t index3);
63 const T& operator()(
size_t index0,
size_t index1,
size_t index2,
size_t index3)
const;
65 size_t extent(
size_t dimension)
const;
66 void set_size(
size_t extent0,
size_t extent1,
size_t extent2,
size_t extent3);
73 typedef const T* const_iterator;
76 const_iterator begin()
const;
78 const_iterator end()
const;
81 void init_memory(
size_t extent0,
size_t extent1,
82 size_t extent2,
size_t extent3);
85 #ifdef FIBER_CHECK_ARRAY_BOUNDS
86 void check_dimension(
size_t dimension)
const;
87 void check_extents(
size_t extent0,
size_t extent1,
size_t extent2,
size_t extent3)
const;
88 void check_indices(
size_t index0,
size_t index1,
size_t index2,
size_t index3)
const;
113 const T& operator()(
size_t index0,
size_t index1,
size_t index2)
const;
114 T& operator()(
size_t index0,
size_t index1,
size_t index2);
116 size_t extent(
size_t dimension)
const;
119 void check_dimension(
size_t dimension)
const;
127 template <
typename T>
133 const T& operator()(
size_t index0,
size_t index1,
size_t index2)
const;
135 size_t extent(
size_t dimension)
const;
138 void check_dimension(
size_t dimension)
const;
146 template <
typename T>
161 const T& operator()(
size_t index0,
size_t index1)
const;
162 T& operator()(
size_t index0,
size_t index1);
164 size_t extent(
size_t dimension)
const;
167 void check_dimension(
size_t dimension)
const;
171 size_t m_index2, m_index3;
175 template <
typename T>
181 const T& operator()(
size_t index0,
size_t index1)
const;
183 size_t extent(
size_t dimension)
const;
186 void check_dimension(
size_t dimension)
const;
190 size_t m_index2, m_index3;
194 template <
typename T>
210 const T& operator()(
size_t index0)
const;
211 T& operator()(
size_t index0);
213 size_t extent(
size_t dimension)
const;
216 void check_dimension(
size_t dimension)
const;
220 size_t m_index1, m_index2, m_index3;
224 template <
typename T>
230 const T& operator()(
size_t index0)
const;
232 size_t extent(
size_t dimension)
const;
235 void check_dimension(
size_t dimension)
const;
239 size_t m_index1, m_index2, m_index3;
244 #include "_4d_array_imp.hpp"
Simple implementation of a 4D Fortran-ordered array.
Definition: _4d_array.hpp:50
_1dSliceOf4dArray(_4dArray< T > &array, size_t index1, size_t index2, size_t index3)
Construct a slice consisting of the elements array(:,index1,index2,index3)
Definition: _4d_array_imp.hpp:373
Lightweight encapsulation of a 2D slice of a constant 4d array.
Definition: _4d_array.hpp:176
Lightweight encapsulation of a 2D slice of a constant 4d array.
Definition: _4d_array.hpp:128
Lightweight encapsulation of a 2D slice of a constant 4d array.
Definition: _4d_array.hpp:225
Lightweight encapsulation of a 3D slice of a 4D array.
Definition: _4d_array.hpp:99
Lightweight encapsulation of a 2D slice of a 4d array.
Definition: _4d_array.hpp:147
Lightweight encapsulation of a 1D slice of a 4d array.
Definition: _4d_array.hpp:195