Lugdunum  0.1.0
ValArray.inl
Go to the documentation of this file.
1 template <size_t Size, typename T>
2 ValArray<Size, T>::ValArray(const T& value) {
3  _data.fill(value);
4 }
5 
6 template <size_t Size, typename T>
7 ValArray<Size, T>::ValArray(const T* values) {
8  std::memcpy(_data.data(), values, sizeof(T) * Size);
9 }
10 
11 template <size_t Size, typename T>
12 ValArray<Size, T>::ValArray(std::initializer_list<T> list) {
13  std::copy(std::begin(list), std::end(list), std::begin(_data));
14 }
15 
16 template <size_t Size, typename T>
17 inline const T& ValArray<Size, T>::operator[](size_t pos) const {
18  return _data[pos];
19 }
20 
21 template <size_t Size, typename T>
22 inline T& ValArray<Size, T>::operator[](size_t pos) {
23  return _data[pos];
24 }
25 
26 template <size_t Size, typename T>
27 inline const std::array<T, Size>& ValArray<Size, T>::data() const {
28  return _data;
29 }
30 
31 template <size_t Size, typename T>
32 inline std::array<T, Size>& ValArray<Size, T>::data() {
33  return _data;
34 }
35 
36 template <size_t Size, typename T>
37 inline constexpr size_t ValArray<Size, T>::size() const {
38  return Size;
39 }
40 
41 template <size_t Size, typename T>
42 inline T ValArray<Size, T>::sum() const {
43  return std::accumulate(std::begin(_data), std::end(_data), T(0));
44 }
45 
46 // ValArray/Scalar operations
47 template <size_t Size, typename T>
49  for (size_t i = 0; i < Size; ++i) {
50  _data[i] += rhs;
51  }
52 
53  return *this;
54 }
55 
56 template <size_t Size, typename T>
58  for (size_t i = 0; i < Size; ++i) {
59  _data[i] -= rhs;
60  }
61 
62  return *this;
63 }
64 
65 template <size_t Size, typename T>
67  for (size_t i = 0; i < Size; ++i) {
68  _data[i] *= rhs;
69  }
70 
71  return *this;
72 }
73 
74 template <size_t Size, typename T>
76  for (size_t i = 0; i < Size; ++i) {
77  _data[i] /= rhs;
78  }
79 
80  return *this;
81 }
82 
83 // ValArray/ValArray operations
84 template <size_t Size, typename T>
86  for (size_t i = 0; i < Size; ++i) {
87  _data[i] += rhs[i];
88  }
89 
90  return *this;
91 }
92 
93 template <size_t Size, typename T>
95  for (size_t i = 0; i < Size; ++i) {
96  _data[i] -= rhs[i];
97  }
98 
99  return *this;
100 }
101 
102 template <size_t Size, typename T>
104  for (size_t i = 0; i < Size; ++i) {
105  _data[i] *= rhs[i];
106  }
107 
108  return *this;
109 }
110 
111 template <size_t Size, typename T>
113  for (size_t i = 0; i < Size; ++i) {
114  _data[i] /= rhs[i];
115  }
116 
117  return *this;
118 }
119 
120 // ValArray/Scalar operations
121 template <size_t Size, typename T>
122 inline ValArray<Size, T> operator+(const ValArray<Size, T>& lhs, const T& rhs) {
123  ValArray<Size, T> array{lhs};
124 
125  for (size_t i = 0; i < Size; ++i) {
126  array[i] += rhs;
127  }
128 
129  return array;
130 }
131 
132 template <size_t Size, typename T>
133 inline ValArray<Size, T> operator-(const ValArray<Size, T>& lhs, const T& rhs) {
134  ValArray<Size, T> array{lhs};
135 
136  for (size_t i = 0; i < Size; ++i) {
137  array[i] -= rhs;
138  }
139 
140  return array;
141 }
142 
143 template <size_t Size, typename T>
144 inline ValArray<Size, T> operator*(const ValArray<Size, T>& lhs, const T& rhs) {
145  ValArray<Size, T> array{lhs};
146 
147  for (size_t i = 0; i < Size; ++i) {
148  array[i] *= rhs;
149  }
150 
151  return array;
152 }
153 
154 template <size_t Size, typename T>
155 inline ValArray<Size, T> operator/(const ValArray<Size, T>& lhs, const T& rhs) {
156  ValArray<Size, T> array{lhs};
157 
158  for (size_t i = 0; i < Size; ++i) {
159  array[i] /= rhs;
160  }
161 
162  return array;
163 }
164 
165 template <size_t Size, typename T>
166 inline ValArray<Size, T> operator+(const T& lhs, const ValArray<Size, T>& rhs) {
167  ValArray<Size, T> array{rhs};
168 
169  for (size_t i = 0; i < Size; ++i) {
170  array[i] = lhs + array[i];
171  }
172 
173  return array;
174 }
175 
176 template <size_t Size, typename T>
177 inline ValArray<Size, T> operator-(const T& lhs, const ValArray<Size, T>& rhs) {
178  ValArray<Size, T> array{rhs};
179 
180  for (size_t i = 0; i < Size; ++i) {
181  array[i] = lhs - array[i];
182  }
183 
184  return array;
185 }
186 
187 template <size_t Size, typename T>
188 inline ValArray<Size, T> operator*(const T& lhs, const ValArray<Size, T>& rhs) {
189  ValArray<Size, T> array{rhs};
190 
191  for (size_t i = 0; i < Size; ++i) {
192  array[i] = lhs * array[i];
193  }
194 
195  return array;
196 }
197 
198 template <size_t Size, typename T>
199 inline ValArray<Size, T> operator/(const T& lhs, const ValArray<Size, T>& rhs) {
200  ValArray<Size, T> array{rhs};
201 
202  for (size_t i = 0; i < Size; ++i) {
203  array[i] = lhs / array[i];
204  }
205 
206  return array;
207 }
208 
209 // ValArray/ValArray operations
210 template <size_t Size, typename T>
211 inline ValArray<Size, T> operator+(const ValArray<Size, T>& lhs, const ValArray<Size, T>& rhs) {
212  ValArray<Size, T> array{lhs};
213 
214  for (size_t i = 0; i < Size; ++i) {
215  array[i] += rhs[i];
216  }
217 
218  return array;
219 }
220 
221 template <size_t Size, typename T>
222 inline ValArray<Size, T> operator-(const ValArray<Size, T>& lhs, const ValArray<Size, T>& rhs) {
223  ValArray<Size, T> array{lhs};
224 
225  for (size_t i = 0; i < Size; ++i) {
226  array[i] -= rhs[i];
227  }
228 
229  return array;
230 }
231 
232 template <size_t Size, typename T>
233 inline ValArray<Size, T> operator*(const ValArray<Size, T>& lhs, const ValArray<Size, T>& rhs) {
234  ValArray<Size, T> array{lhs};
235 
236  for (size_t i = 0; i < Size; ++i) {
237  array[i] *= rhs[i];
238  }
239 
240  return array;
241 }
242 
243 template <size_t Size, typename T>
244 inline ValArray<Size, T> operator/(const ValArray<Size, T>& lhs, const ValArray<Size, T>& rhs) {
245  ValArray<Size, T> array{lhs};
246 
247  for (size_t i = 0; i < Size; ++i) {
248  array[i] /= rhs[i];
249  }
250 
251  return array;
252 }
253 
254 template <size_t Size, typename T>
255 inline bool operator==(const ValArray<Size, T>& lhs, const ValArray<Size, T>& rhs) {
256  return std::equal(std::begin(lhs.data()), std::end(lhs.data()), std::begin(rhs.data()), std::end(rhs.data()));
257 }
258 
259 template <size_t Size, typename T>
260 inline bool operator!=(const ValArray<Size, T>& lhs, const ValArray<Size, T>& rhs) {
261  return !std::equal(std::begin(lhs.data()), std::end(lhs.data()), std::begin(rhs.data()), std::end(rhs.data()));
262 }
ValArray< Size, T > operator*(const ValArray< Size, T > &lhs, const T &rhs)
Definition: ValArray.inl:144
bool operator==(const ValArray< Size, T > &lhs, const ValArray< Size, T > &rhs)
Definition: ValArray.inl:255
ValArray< Size, T > operator-(const ValArray< Size, T > &lhs, const T &rhs)
Definition: ValArray.inl:133
bool operator!=(const ValArray< Size, T > &lhs, const ValArray< Size, T > &rhs)
Definition: ValArray.inl:260
ValArray< Size, T > operator/(const ValArray< Size, T > &lhs, const T &rhs)
Definition: ValArray.inl:155
ValArray< Size, T > operator+(const ValArray< Size, T > &lhs, const T &rhs)
Definition: ValArray.inl:122