21 #include "collection_of_4d_arrays.hpp"
29 inline CollectionOf4dArrays<T>::CollectionOf4dArrays() :
35 inline CollectionOf4dArrays<T>::CollectionOf4dArrays(
size_t size) :
36 m_size(size), m_arrays(new _4dArray<T>[size])
42 inline void CollectionOf4dArrays<T>::set_size(
size_t new_size)
44 if (new_size == m_size)
46 m_arrays.reset(new_size == 0 ? 0 :
new _4dArray<T>[new_size]);
51 inline size_t CollectionOf4dArrays<T>::size()
const
57 inline void CollectionOf4dArrays<T>::fill(
const T& value)
59 for (
size_t a = 0; a < m_size; ++a)
60 std::fill((*
this)[a].begin(), (*
this)[a].end(), value);
64 inline _4dArray<T>& CollectionOf4dArrays<T>::operator[](
size_t index)
70 inline const _4dArray<T>& CollectionOf4dArrays<T>::operator[](
size_t index)
const
76 inline CollectionOf3dSlicesOf4dArrays<T> CollectionOf4dArrays<T>::slice(
size_t index3)
78 return CollectionOf3dSlicesOf4dArrays<T>(*
this, index3);
82 inline CollectionOf3dSlicesOfConst4dArrays<T> CollectionOf4dArrays<T>::const_slice(
85 return CollectionOf3dSlicesOfConst4dArrays<T>(*
this, index3);
89 inline CollectionOf2dSlicesOf4dArrays<T> CollectionOf4dArrays<T>::slice(
size_t index2,
size_t index3)
91 return CollectionOf2dSlicesOf4dArrays<T>(*
this, index2, index3);
95 inline CollectionOf2dSlicesOfConst4dArrays<T> CollectionOf4dArrays<T>::const_slice(
96 size_t index2,
size_t index3)
const
98 return CollectionOf2dSlicesOfConst4dArrays<T>(*
this, index2, index3);
101 template <
typename T>
102 inline CollectionOf1dSlicesOf4dArrays<T> CollectionOf4dArrays<T>::slice(
size_t index1,
size_t index2,
size_t index3)
104 return CollectionOf1dSlicesOf4dArrays<T>(*
this, index1, index2, index3);
107 template <
typename T>
108 inline CollectionOf1dSlicesOfConst4dArrays<T> CollectionOf4dArrays<T>::const_slice(
109 size_t index1,
size_t index2,
size_t index3)
const
111 return CollectionOf1dSlicesOfConst4dArrays<T>(*
this, index1, index2, index3);
114 template <
typename T>
115 inline _4dArray<T>& CollectionOf4dArrays<T>::array(
size_t i)
117 #ifdef FIBER_CHECK_ARRAY_BOUNDS
118 check_array_index(i);
123 template <
typename T>
124 inline const _4dArray<T>& CollectionOf4dArrays<T>::array(
size_t i)
const
126 #ifdef FIBER_CHECK_ARRAY_BOUNDS
127 check_array_index(i);
132 template <
typename T>
133 inline void CollectionOf4dArrays<T>::check_array_index(
size_t array_index)
const
135 #ifdef FIBER_CHECK_ARRAY_BOUNDS
136 if (m_size <= array_index)
137 throw std::invalid_argument(
"Invalid array index");
143 template <
typename T>
144 inline CollectionOf3dSlicesOf4dArrays<T>::
145 CollectionOf3dSlicesOf4dArrays(CollectionOf4dArrays<T>& collection,
size_t index3) :
146 m_collection(collection), m_index3(index3)
149 template <
typename T>
155 template <
typename T>
161 template <
typename T>
162 inline _3dSliceOf4dArray<T> CollectionOf3dSlicesOf4dArrays<T>::
163 operator[](
size_t index) {
164 return _3dSliceOf4dArray<T>(m_collection[index], m_index3);
167 template <
typename T>
168 inline size_t CollectionOf3dSlicesOf4dArrays<T>::size()
const {
169 return m_collection.size();
174 template <
typename T>
175 inline CollectionOf3dSlicesOfConst4dArrays<T>::
176 CollectionOf3dSlicesOfConst4dArrays(
const CollectionOf4dArrays<T>& collection,
178 m_collection(collection), m_index3(index3)
181 template <
typename T>
182 inline _3dSliceOfConst4dArray<T> CollectionOf3dSlicesOfConst4dArrays<T>::
183 operator[](
size_t index)
const {
184 return _3dSliceOfConst4dArray<T>(m_collection[index], m_index3);
187 template <
typename T>
188 inline size_t CollectionOf3dSlicesOfConst4dArrays<T>::size()
const {
189 return m_collection.size();
194 template <
typename T>
195 inline CollectionOf2dSlicesOf4dArrays<T>::
196 CollectionOf2dSlicesOf4dArrays(CollectionOf4dArrays<T>& collection,
size_t index2,
size_t index3) :
197 m_collection(collection), m_index2(index2), m_index3(index3)
200 template <
typename T>
206 template <
typename T>
212 template <
typename T>
213 inline _2dSliceOf4dArray<T> CollectionOf2dSlicesOf4dArrays<T>::
214 operator[](
size_t index) {
215 return _2dSliceOf4dArray<T>(m_collection[index], m_index2, m_index3);
218 template <
typename T>
219 inline size_t CollectionOf2dSlicesOf4dArrays<T>::size()
const {
220 return m_collection.size();
225 template <
typename T>
226 inline CollectionOf2dSlicesOfConst4dArrays<T>::
227 CollectionOf2dSlicesOfConst4dArrays(
const CollectionOf4dArrays<T>& collection,
228 size_t index2,
size_t index3) :
229 m_collection(collection), m_index2(index2), m_index3(index3)
232 template <
typename T>
233 inline _2dSliceOfConst4dArray<T> CollectionOf2dSlicesOfConst4dArrays<T>::
234 operator[](
size_t index)
const {
235 return _2dSliceOfConst4dArray<T>(m_collection[index], m_index2, m_index3);
238 template <
typename T>
239 inline size_t CollectionOf2dSlicesOfConst4dArrays<T>::size()
const {
240 return m_collection.size();
245 template <
typename T>
246 inline CollectionOf1dSlicesOf4dArrays<T>::
247 CollectionOf1dSlicesOf4dArrays(CollectionOf4dArrays<T>& collection,
248 size_t index1,
size_t index2,
size_t index3) :
249 m_collection(collection), m_index1(index1), m_index2(index2), m_index3(index3)
252 template <
typename T>
258 template <
typename T>
264 template <
typename T>
265 inline _1dSliceOf4dArray<T> CollectionOf1dSlicesOf4dArrays<T>::
266 operator[](
size_t index) {
267 return _1dSliceOf4dArray<T>(m_collection[index], m_index1, m_index2, m_index3);
270 template <
typename T>
271 inline size_t CollectionOf1dSlicesOf4dArrays<T>::size()
const {
272 return m_collection.size();
277 template <
typename T>
278 inline CollectionOf1dSlicesOfConst4dArrays<T>::
279 CollectionOf1dSlicesOfConst4dArrays(
const CollectionOf4dArrays<T>& collection,
280 size_t index1,
size_t index2,
size_t index3) :
281 m_collection(collection), m_index1(index1), m_index2(index2), m_index3(index3)
284 template <
typename T>
285 inline _1dSliceOfConst4dArray<T> CollectionOf1dSlicesOfConst4dArrays<T>::
286 operator[](
size_t index)
const {
287 return _1dSliceOfConst4dArray<T>(m_collection[index], m_index1, m_index2, m_index3);
290 template <
typename T>
291 inline size_t CollectionOf1dSlicesOfConst4dArrays<T>::size()
const {
292 return m_collection.size();
CollectionOf1dSlicesOf4dArrays & self()
Returns a reference to self.
Definition: collection_of_4d_arrays_imp.hpp:254
Definition: collection_of_4d_arrays.hpp:162
Definition: collection_of_4d_arrays.hpp:120
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
CollectionOf3dSlicesOf4dArrays & self()
Returns a reference to self.
Definition: collection_of_4d_arrays_imp.hpp:151
CollectionOf2dSlicesOf4dArrays & self()
Returns a reference to self.
Definition: collection_of_4d_arrays_imp.hpp:202
Definition: collection_of_4d_arrays.hpp:78