21 #include "collection_of_3d_arrays.hpp"
29 inline CollectionOf3dArrays<T>::CollectionOf3dArrays() :
35 inline CollectionOf3dArrays<T>::CollectionOf3dArrays(
size_t size) :
36 m_size(size), m_arrays(new _3dArray<T>[size])
42 inline void CollectionOf3dArrays<T>::set_size(
size_t new_size)
44 if (new_size == m_size)
46 m_arrays.reset(new_size == 0 ? 0 :
new _3dArray<T>[new_size]);
51 inline size_t CollectionOf3dArrays<T>::size()
const
57 inline void CollectionOf3dArrays<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 _3dArray<T>& CollectionOf3dArrays<T>::operator[](
size_t index)
70 inline const _3dArray<T>& CollectionOf3dArrays<T>::operator[](
size_t index)
const
76 inline CollectionOf2dSlicesOf3dArrays<T> CollectionOf3dArrays<T>::slice(
size_t index2)
78 return CollectionOf2dSlicesOf3dArrays<T>(*
this, index2);
82 inline CollectionOf2dSlicesOfConst3dArrays<T> CollectionOf3dArrays<T>::const_slice(
85 return CollectionOf2dSlicesOfConst3dArrays<T>(*
this, index2);
89 inline CollectionOf1dSlicesOf3dArrays<T> CollectionOf3dArrays<T>::slice(
size_t index1,
size_t index2)
91 return CollectionOf1dSlicesOf3dArrays<T>(*
this, index1, index2);
95 inline CollectionOf1dSlicesOfConst3dArrays<T> CollectionOf3dArrays<T>::const_slice(
96 size_t index1,
size_t index2)
const
98 return CollectionOf1dSlicesOfConst3dArrays<T>(*
this, index1, index2);
101 template <
typename T>
102 inline _3dArray<T>& CollectionOf3dArrays<T>::array(
size_t i)
104 #ifdef FIBER_CHECK_ARRAY_BOUNDS
105 check_array_index(i);
110 template <
typename T>
111 inline const _3dArray<T>& CollectionOf3dArrays<T>::array(
size_t i)
const
113 #ifdef FIBER_CHECK_ARRAY_BOUNDS
114 check_array_index(i);
119 template <
typename T>
120 inline void CollectionOf3dArrays<T>::check_array_index(
size_t array_index)
const
122 #ifdef FIBER_CHECK_ARRAY_BOUNDS
123 if (m_size <= array_index)
124 throw std::invalid_argument(
"Invalid array index");
130 template <
typename T>
131 inline CollectionOf2dSlicesOf3dArrays<T>::
132 CollectionOf2dSlicesOf3dArrays(CollectionOf3dArrays<T>& collection,
size_t index2) :
133 m_collection(collection), m_index2(index2)
136 template <
typename T>
142 template <
typename T>
148 template <
typename T>
149 inline _2dSliceOf3dArray<T> CollectionOf2dSlicesOf3dArrays<T>::
150 operator[](
size_t index) {
151 return _2dSliceOf3dArray<T>(m_collection[index], m_index2);
154 template <
typename T>
155 inline size_t CollectionOf2dSlicesOf3dArrays<T>::size()
const {
156 return m_collection.size();
161 template <
typename T>
162 inline CollectionOf2dSlicesOfConst3dArrays<T>::
163 CollectionOf2dSlicesOfConst3dArrays(
const CollectionOf3dArrays<T>& collection,
165 m_collection(collection), m_index2(index2)
168 template <
typename T>
169 inline _2dSliceOfConst3dArray<T> CollectionOf2dSlicesOfConst3dArrays<T>::
170 operator[](
size_t index)
const {
171 return _2dSliceOfConst3dArray<T>(m_collection[index], m_index2);
174 template <
typename T>
175 inline size_t CollectionOf2dSlicesOfConst3dArrays<T>::size()
const {
176 return m_collection.size();
181 template <
typename T>
182 inline CollectionOf1dSlicesOf3dArrays<T>::
183 CollectionOf1dSlicesOf3dArrays(CollectionOf3dArrays<T>& collection,
184 size_t index1,
size_t index2) :
185 m_collection(collection), m_index1(index1), m_index2(index2)
188 template <
typename T>
194 template <
typename T>
200 template <
typename T>
201 inline _1dSliceOf3dArray<T> CollectionOf1dSlicesOf3dArrays<T>::
202 operator[](
size_t index) {
203 return _1dSliceOf3dArray<T>(m_collection[index], m_index1, m_index2);
206 template <
typename T>
207 inline size_t CollectionOf1dSlicesOf3dArrays<T>::size()
const {
208 return m_collection.size();
213 template <
typename T>
214 inline CollectionOf1dSlicesOfConst3dArrays<T>::
215 CollectionOf1dSlicesOfConst3dArrays(
const CollectionOf3dArrays<T>& collection,
216 size_t index1,
size_t index2) :
217 m_collection(collection), m_index1(index1), m_index2(index2)
220 template <
typename T>
221 inline _1dSliceOfConst3dArray<T> CollectionOf1dSlicesOfConst3dArrays<T>::
222 operator[](
size_t index)
const {
223 return _1dSliceOfConst3dArray<T>(m_collection[index], m_index1, m_index2);
226 template <
typename T>
227 inline size_t CollectionOf1dSlicesOfConst3dArrays<T>::size()
const {
228 return m_collection.size();
CollectionOf2dSlicesOf3dArrays & self()
Returns a reference to self.
Definition: collection_of_3d_arrays_imp.hpp:138
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
CollectionOf1dSlicesOf3dArrays & self()
Returns a reference to self.
Definition: collection_of_3d_arrays_imp.hpp:190
Definition: collection_of_3d_arrays.hpp:121
Definition: collection_of_3d_arrays.hpp:74