21 #include "collection_of_2d_arrays.hpp"
29 inline CollectionOf2dArrays<T>::CollectionOf2dArrays() :
35 inline CollectionOf2dArrays<T>::CollectionOf2dArrays(
size_t size) :
36 m_size(size), m_arrays(new _2dArray<T>[size])
43 inline CollectionOf2dArrays<T>::CollectionOf2dArrays(
44 const CollectionOf2dArrays& other) :
45 m_size(other.m_size), m_arrays(new _2dArray<T>[other.m_size])
47 for (
size_t a = 0; a < m_size; ++a)
48 m_arrays[a] = other.array(a);
52 inline CollectionOf2dArrays<T>& CollectionOf2dArrays<T>::operator=(
53 const CollectionOf2dArrays& rhs)
57 for (
size_t a = 0; a < m_size; ++a)
58 m_arrays[a] = rhs.array(a);
64 inline void CollectionOf2dArrays<T>::set_size(
size_t new_size)
66 if (new_size == m_size)
68 m_arrays.reset(new_size == 0 ? 0 :
new _2dArray<T>[new_size]);
73 inline size_t CollectionOf2dArrays<T>::size()
const
79 inline void CollectionOf2dArrays<T>::fill(
const T& value)
81 for (
size_t a = 0; a < m_size; ++a)
82 std::fill((*
this)[a].begin(), (*
this)[a].end(), value);
86 inline _2dArray<T>& CollectionOf2dArrays<T>::operator[](
size_t index)
92 inline const _2dArray<T>& CollectionOf2dArrays<T>::operator[](
size_t index)
const
98 inline CollectionOf1dSlicesOf2dArrays<T> CollectionOf2dArrays<T>::slice(
size_t index1)
100 return CollectionOf1dSlicesOf2dArrays<T>(*
this, index1);
103 template <
typename T>
104 inline CollectionOf1dSlicesOfConst2dArrays<T> CollectionOf2dArrays<T>::const_slice(
107 return CollectionOf1dSlicesOfConst2dArrays<T>(*
this, index1);
110 template <
typename T>
111 inline _2dArray<T>& CollectionOf2dArrays<T>::array(
size_t i)
113 #ifdef FIBER_CHECK_ARRAY_BOUNDS
114 check_array_index(i);
119 template <
typename T>
120 inline const _2dArray<T>& CollectionOf2dArrays<T>::array(
size_t i)
const
122 #ifdef FIBER_CHECK_ARRAY_BOUNDS
123 check_array_index(i);
128 template <
typename T>
129 inline void CollectionOf2dArrays<T>::check_array_index(
size_t array_index)
const
131 #ifdef FIBER_CHECK_ARRAY_BOUNDS
132 if (m_size <= array_index)
133 throw std::invalid_argument(
"Invalid array index");
139 template <
typename T>
140 inline CollectionOf1dSlicesOf2dArrays<T>::
141 CollectionOf1dSlicesOf2dArrays(CollectionOf2dArrays<T>& collection,
143 m_collection(collection), m_index1(index1)
146 template <
typename T>
152 template <
typename T>
158 template <
typename T>
159 inline _1dSliceOf2dArray<T> CollectionOf1dSlicesOf2dArrays<T>::
160 operator[](
size_t index) {
161 return _1dSliceOf2dArray<T>(m_collection[index], m_index1);
164 template <
typename T>
165 inline size_t CollectionOf1dSlicesOf2dArrays<T>::size()
const {
166 return m_collection.size();
171 template <
typename T>
172 inline CollectionOf1dSlicesOfConst2dArrays<T>::
173 CollectionOf1dSlicesOfConst2dArrays(
const CollectionOf2dArrays<T>& collection,
175 m_collection(collection), m_index1(index1)
178 template <
typename T>
179 inline _1dSliceOfConst2dArray<T> CollectionOf1dSlicesOfConst2dArrays<T>::
180 operator[](
size_t index)
const {
181 return _1dSliceOfConst2dArray<T>(m_collection[index], m_index1);
184 template <
typename T>
185 inline size_t CollectionOf1dSlicesOfConst2dArrays<T>::size()
const {
186 return m_collection.size();
Definition: collection_of_2d_arrays.hpp:68
CollectionOf1dSlicesOf2dArrays & self()
Returns a reference to self.
Definition: collection_of_2d_arrays_imp.hpp:148
Lightweight encapsulation of a 1D slice of a constant 2D array.
Definition: _2d_array.hpp:119