Chris@49
|
1 // Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
|
Chris@49
|
2 // Copyright (C) 2008-2013 Conrad Sanderson
|
Chris@49
|
3 // Copyright (C) 2009-2010 Ian Cullinan
|
Chris@49
|
4 //
|
Chris@49
|
5 // This Source Code Form is subject to the terms of the Mozilla Public
|
Chris@49
|
6 // License, v. 2.0. If a copy of the MPL was not distributed with this
|
Chris@49
|
7 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
Chris@49
|
8
|
Chris@49
|
9
|
Chris@49
|
10 //! \addtogroup field
|
Chris@49
|
11 //! @{
|
Chris@49
|
12
|
Chris@49
|
13
|
Chris@49
|
14 template<typename oT>
|
Chris@49
|
15 inline
|
Chris@49
|
16 field<oT>::~field()
|
Chris@49
|
17 {
|
Chris@49
|
18 arma_extra_debug_sigprint_this(this);
|
Chris@49
|
19
|
Chris@49
|
20 delete_objects();
|
Chris@49
|
21
|
Chris@49
|
22 if(n_elem > sizeof(mem_local)/sizeof(oT*) )
|
Chris@49
|
23 {
|
Chris@49
|
24 delete [] mem;
|
Chris@49
|
25 }
|
Chris@49
|
26
|
Chris@49
|
27 if(arma_config::debug == true)
|
Chris@49
|
28 {
|
Chris@49
|
29 // try to expose buggy user code that accesses deleted objects
|
Chris@49
|
30 access::rw(n_rows) = 0;
|
Chris@49
|
31 access::rw(n_cols) = 0;
|
Chris@49
|
32 access::rw(n_elem) = 0;
|
Chris@49
|
33 mem = 0;
|
Chris@49
|
34 }
|
Chris@49
|
35 }
|
Chris@49
|
36
|
Chris@49
|
37
|
Chris@49
|
38
|
Chris@49
|
39 template<typename oT>
|
Chris@49
|
40 inline
|
Chris@49
|
41 field<oT>::field()
|
Chris@49
|
42 : n_rows(0)
|
Chris@49
|
43 , n_cols(0)
|
Chris@49
|
44 , n_elem(0)
|
Chris@49
|
45 , mem(0)
|
Chris@49
|
46 {
|
Chris@49
|
47 arma_extra_debug_sigprint_this(this);
|
Chris@49
|
48 }
|
Chris@49
|
49
|
Chris@49
|
50
|
Chris@49
|
51
|
Chris@49
|
52 //! construct a field from a given field
|
Chris@49
|
53 template<typename oT>
|
Chris@49
|
54 inline
|
Chris@49
|
55 field<oT>::field(const field& x)
|
Chris@49
|
56 : n_rows(0)
|
Chris@49
|
57 , n_cols(0)
|
Chris@49
|
58 , n_elem(0)
|
Chris@49
|
59 , mem(0)
|
Chris@49
|
60 {
|
Chris@49
|
61 arma_extra_debug_sigprint(arma_boost::format("this = %x x = %x") % this % &x);
|
Chris@49
|
62
|
Chris@49
|
63 init(x);
|
Chris@49
|
64 }
|
Chris@49
|
65
|
Chris@49
|
66
|
Chris@49
|
67
|
Chris@49
|
68 //! construct a field from a given field
|
Chris@49
|
69 template<typename oT>
|
Chris@49
|
70 inline
|
Chris@49
|
71 const field<oT>&
|
Chris@49
|
72 field<oT>::operator=(const field& x)
|
Chris@49
|
73 {
|
Chris@49
|
74 arma_extra_debug_sigprint();
|
Chris@49
|
75
|
Chris@49
|
76 init(x);
|
Chris@49
|
77 return *this;
|
Chris@49
|
78 }
|
Chris@49
|
79
|
Chris@49
|
80
|
Chris@49
|
81
|
Chris@49
|
82 //! construct a field from subview_field (e.g. construct a field from a delayed subfield operation)
|
Chris@49
|
83 template<typename oT>
|
Chris@49
|
84 inline
|
Chris@49
|
85 field<oT>::field(const subview_field<oT>& X)
|
Chris@49
|
86 : n_rows(0)
|
Chris@49
|
87 , n_cols(0)
|
Chris@49
|
88 , n_elem(0)
|
Chris@49
|
89 , mem(0)
|
Chris@49
|
90 {
|
Chris@49
|
91 arma_extra_debug_sigprint_this(this);
|
Chris@49
|
92
|
Chris@49
|
93 this->operator=(X);
|
Chris@49
|
94 }
|
Chris@49
|
95
|
Chris@49
|
96
|
Chris@49
|
97
|
Chris@49
|
98 //! construct a field from subview_field (e.g. construct a field from a delayed subfield operation)
|
Chris@49
|
99 template<typename oT>
|
Chris@49
|
100 inline
|
Chris@49
|
101 const field<oT>&
|
Chris@49
|
102 field<oT>::operator=(const subview_field<oT>& X)
|
Chris@49
|
103 {
|
Chris@49
|
104 arma_extra_debug_sigprint();
|
Chris@49
|
105
|
Chris@49
|
106 subview_field<oT>::extract(*this, X);
|
Chris@49
|
107 return *this;
|
Chris@49
|
108 }
|
Chris@49
|
109
|
Chris@49
|
110
|
Chris@49
|
111
|
Chris@49
|
112 //! construct the field with the specified number of elements,
|
Chris@49
|
113 //! assuming a column-major layout
|
Chris@49
|
114 template<typename oT>
|
Chris@49
|
115 inline
|
Chris@49
|
116 field<oT>::field(const uword n_elem_in)
|
Chris@49
|
117 : n_rows(0)
|
Chris@49
|
118 , n_cols(0)
|
Chris@49
|
119 , n_elem(0)
|
Chris@49
|
120 , mem(0)
|
Chris@49
|
121 {
|
Chris@49
|
122 arma_extra_debug_sigprint_this(this);
|
Chris@49
|
123
|
Chris@49
|
124 init(n_elem_in, 1);
|
Chris@49
|
125 }
|
Chris@49
|
126
|
Chris@49
|
127
|
Chris@49
|
128
|
Chris@49
|
129 //! construct the field with the specified dimensions
|
Chris@49
|
130 template<typename oT>
|
Chris@49
|
131 inline
|
Chris@49
|
132 field<oT>::field(const uword n_rows_in, const uword n_cols_in)
|
Chris@49
|
133 : n_rows(0)
|
Chris@49
|
134 , n_cols(0)
|
Chris@49
|
135 , n_elem(0)
|
Chris@49
|
136 , mem(0)
|
Chris@49
|
137 {
|
Chris@49
|
138 arma_extra_debug_sigprint_this(this);
|
Chris@49
|
139
|
Chris@49
|
140 init(n_rows_in, n_cols_in);
|
Chris@49
|
141 }
|
Chris@49
|
142
|
Chris@49
|
143
|
Chris@49
|
144
|
Chris@49
|
145 //! change the field to have the specified number of elements,
|
Chris@49
|
146 //! assuming a column-major layout (data is not preserved)
|
Chris@49
|
147 template<typename oT>
|
Chris@49
|
148 inline
|
Chris@49
|
149 void
|
Chris@49
|
150 field<oT>::set_size(const uword n_elem_in)
|
Chris@49
|
151 {
|
Chris@49
|
152 arma_extra_debug_sigprint(arma_boost::format("n_elem_in = %d") % n_elem_in);
|
Chris@49
|
153
|
Chris@49
|
154 init(n_elem_in, 1);
|
Chris@49
|
155 }
|
Chris@49
|
156
|
Chris@49
|
157
|
Chris@49
|
158
|
Chris@49
|
159 //! change the field to have the specified dimensions (data is not preserved)
|
Chris@49
|
160 template<typename oT>
|
Chris@49
|
161 inline
|
Chris@49
|
162 void
|
Chris@49
|
163 field<oT>::set_size(const uword n_rows_in, const uword n_cols_in)
|
Chris@49
|
164 {
|
Chris@49
|
165 arma_extra_debug_sigprint(arma_boost::format("n_rows_in = %d, n_cols_in = %d") % n_rows_in % n_cols_in);
|
Chris@49
|
166
|
Chris@49
|
167 init(n_rows_in, n_cols_in);
|
Chris@49
|
168 }
|
Chris@49
|
169
|
Chris@49
|
170
|
Chris@49
|
171
|
Chris@49
|
172 //! change the field to have the specified dimensions (data is not preserved)
|
Chris@49
|
173 template<typename oT>
|
Chris@49
|
174 template<typename oT2>
|
Chris@49
|
175 inline
|
Chris@49
|
176 void
|
Chris@49
|
177 field<oT>::copy_size(const field<oT2>& x)
|
Chris@49
|
178 {
|
Chris@49
|
179 arma_extra_debug_sigprint();
|
Chris@49
|
180
|
Chris@49
|
181 init(x.n_rows, x.n_cols);
|
Chris@49
|
182 }
|
Chris@49
|
183
|
Chris@49
|
184
|
Chris@49
|
185
|
Chris@49
|
186 //! linear element accessor (treats the field as a vector); no bounds check
|
Chris@49
|
187 template<typename oT>
|
Chris@49
|
188 arma_inline
|
Chris@49
|
189 oT&
|
Chris@49
|
190 field<oT>::operator[] (const uword i)
|
Chris@49
|
191 {
|
Chris@49
|
192 return (*mem[i]);
|
Chris@49
|
193 }
|
Chris@49
|
194
|
Chris@49
|
195
|
Chris@49
|
196
|
Chris@49
|
197 //! linear element accessor (treats the field as a vector); no bounds check
|
Chris@49
|
198 template<typename oT>
|
Chris@49
|
199 arma_inline
|
Chris@49
|
200 const oT&
|
Chris@49
|
201 field<oT>::operator[] (const uword i) const
|
Chris@49
|
202 {
|
Chris@49
|
203 return (*mem[i]);
|
Chris@49
|
204 }
|
Chris@49
|
205
|
Chris@49
|
206
|
Chris@49
|
207
|
Chris@49
|
208 //! linear element accessor (treats the field as a vector); no bounds check
|
Chris@49
|
209 template<typename oT>
|
Chris@49
|
210 arma_inline
|
Chris@49
|
211 oT&
|
Chris@49
|
212 field<oT>::at(const uword i)
|
Chris@49
|
213 {
|
Chris@49
|
214 return (*mem[i]);
|
Chris@49
|
215 }
|
Chris@49
|
216
|
Chris@49
|
217
|
Chris@49
|
218
|
Chris@49
|
219 //! linear element accessor (treats the field as a vector); no bounds check
|
Chris@49
|
220 template<typename oT>
|
Chris@49
|
221 arma_inline
|
Chris@49
|
222 const oT&
|
Chris@49
|
223 field<oT>::at(const uword i) const
|
Chris@49
|
224 {
|
Chris@49
|
225 return (*mem[i]);
|
Chris@49
|
226 }
|
Chris@49
|
227
|
Chris@49
|
228
|
Chris@49
|
229
|
Chris@49
|
230 //! linear element accessor (treats the field as a vector); bounds checking not done when ARMA_NO_DEBUG is defined
|
Chris@49
|
231 template<typename oT>
|
Chris@49
|
232 arma_inline
|
Chris@49
|
233 oT&
|
Chris@49
|
234 field<oT>::operator() (const uword i)
|
Chris@49
|
235 {
|
Chris@49
|
236 arma_debug_check( (i >= n_elem), "field::operator(): index out of bounds");
|
Chris@49
|
237 return (*mem[i]);
|
Chris@49
|
238 }
|
Chris@49
|
239
|
Chris@49
|
240
|
Chris@49
|
241
|
Chris@49
|
242 //! linear element accessor (treats the field as a vector); bounds checking not done when ARMA_NO_DEBUG is defined
|
Chris@49
|
243 template<typename oT>
|
Chris@49
|
244 arma_inline
|
Chris@49
|
245 const oT&
|
Chris@49
|
246 field<oT>::operator() (const uword i) const
|
Chris@49
|
247 {
|
Chris@49
|
248 arma_debug_check( (i >= n_elem), "field::operator(): index out of bounds");
|
Chris@49
|
249 return (*mem[i]);
|
Chris@49
|
250 }
|
Chris@49
|
251
|
Chris@49
|
252
|
Chris@49
|
253
|
Chris@49
|
254 //! element accessor; bounds checking not done when ARMA_NO_DEBUG is defined
|
Chris@49
|
255 template<typename oT>
|
Chris@49
|
256 arma_inline
|
Chris@49
|
257 oT&
|
Chris@49
|
258 field<oT>::operator() (const uword in_row, const uword in_col)
|
Chris@49
|
259 {
|
Chris@49
|
260 arma_debug_check( ((in_row >= n_rows) || (in_col >= n_cols)), "field::operator(): index out of bounds");
|
Chris@49
|
261 return (*mem[in_row + in_col*n_rows]);
|
Chris@49
|
262 }
|
Chris@49
|
263
|
Chris@49
|
264
|
Chris@49
|
265
|
Chris@49
|
266 //! element accessor; bounds checking not done when ARMA_NO_DEBUG is defined
|
Chris@49
|
267 template<typename oT>
|
Chris@49
|
268 arma_inline
|
Chris@49
|
269 const oT&
|
Chris@49
|
270 field<oT>::operator() (const uword in_row, const uword in_col) const
|
Chris@49
|
271 {
|
Chris@49
|
272 arma_debug_check( ((in_row >= n_rows) || (in_col >= n_cols)), "field::operator(): index out of bounds");
|
Chris@49
|
273 return (*mem[in_row + in_col*n_rows]);
|
Chris@49
|
274 }
|
Chris@49
|
275
|
Chris@49
|
276
|
Chris@49
|
277
|
Chris@49
|
278 //! element accessor; no bounds check
|
Chris@49
|
279 template<typename oT>
|
Chris@49
|
280 arma_inline
|
Chris@49
|
281 oT&
|
Chris@49
|
282 field<oT>::at(const uword in_row, const uword in_col)
|
Chris@49
|
283 {
|
Chris@49
|
284 return (*mem[in_row + in_col*n_rows]);
|
Chris@49
|
285 }
|
Chris@49
|
286
|
Chris@49
|
287
|
Chris@49
|
288
|
Chris@49
|
289 //! element accessor; no bounds check
|
Chris@49
|
290 template<typename oT>
|
Chris@49
|
291 arma_inline
|
Chris@49
|
292 const oT&
|
Chris@49
|
293 field<oT>::at(const uword in_row, const uword in_col) const
|
Chris@49
|
294 {
|
Chris@49
|
295 return (*mem[in_row + in_col*n_rows]);
|
Chris@49
|
296 }
|
Chris@49
|
297
|
Chris@49
|
298
|
Chris@49
|
299
|
Chris@49
|
300 template<typename oT>
|
Chris@49
|
301 inline
|
Chris@49
|
302 field_injector< field<oT> >
|
Chris@49
|
303 field<oT>::operator<<(const oT& val)
|
Chris@49
|
304 {
|
Chris@49
|
305 return field_injector< field<oT> >(*this, val);
|
Chris@49
|
306 }
|
Chris@49
|
307
|
Chris@49
|
308
|
Chris@49
|
309
|
Chris@49
|
310 template<typename oT>
|
Chris@49
|
311 inline
|
Chris@49
|
312 field_injector< field<oT> >
|
Chris@49
|
313 field<oT>::operator<<(const injector_end_of_row<>& x)
|
Chris@49
|
314 {
|
Chris@49
|
315 return field_injector< field<oT> >(*this, x);
|
Chris@49
|
316 }
|
Chris@49
|
317
|
Chris@49
|
318
|
Chris@49
|
319
|
Chris@49
|
320 //! creation of subview_field (row of a field)
|
Chris@49
|
321 template<typename oT>
|
Chris@49
|
322 inline
|
Chris@49
|
323 subview_field<oT>
|
Chris@49
|
324 field<oT>::row(const uword row_num)
|
Chris@49
|
325 {
|
Chris@49
|
326 arma_extra_debug_sigprint();
|
Chris@49
|
327
|
Chris@49
|
328 arma_debug_check( (row_num >= n_rows), "field::row(): row out of bounds" );
|
Chris@49
|
329
|
Chris@49
|
330 return subview_field<oT>(*this, row_num, 0, 1, n_cols);
|
Chris@49
|
331 }
|
Chris@49
|
332
|
Chris@49
|
333
|
Chris@49
|
334
|
Chris@49
|
335 //! creation of subview_field (row of a field)
|
Chris@49
|
336 template<typename oT>
|
Chris@49
|
337 inline
|
Chris@49
|
338 const subview_field<oT>
|
Chris@49
|
339 field<oT>::row(const uword row_num) const
|
Chris@49
|
340 {
|
Chris@49
|
341 arma_extra_debug_sigprint();
|
Chris@49
|
342
|
Chris@49
|
343 arma_debug_check( (row_num >= n_rows), "field::row(): row out of bounds" );
|
Chris@49
|
344
|
Chris@49
|
345 return subview_field<oT>(*this, row_num, 0, 1, n_cols);
|
Chris@49
|
346 }
|
Chris@49
|
347
|
Chris@49
|
348
|
Chris@49
|
349
|
Chris@49
|
350 //! creation of subview_field (column of a field)
|
Chris@49
|
351 template<typename oT>
|
Chris@49
|
352 inline
|
Chris@49
|
353 subview_field<oT>
|
Chris@49
|
354 field<oT>::col(const uword col_num)
|
Chris@49
|
355 {
|
Chris@49
|
356 arma_extra_debug_sigprint();
|
Chris@49
|
357
|
Chris@49
|
358 arma_debug_check( (col_num >= n_cols), "field::col(): out of bounds");
|
Chris@49
|
359
|
Chris@49
|
360 return subview_field<oT>(*this, 0, col_num, n_rows, 1);
|
Chris@49
|
361 }
|
Chris@49
|
362
|
Chris@49
|
363
|
Chris@49
|
364
|
Chris@49
|
365 //! creation of subview_field (column of a field)
|
Chris@49
|
366 template<typename oT>
|
Chris@49
|
367 inline
|
Chris@49
|
368 const subview_field<oT>
|
Chris@49
|
369 field<oT>::col(const uword col_num) const
|
Chris@49
|
370 {
|
Chris@49
|
371 arma_extra_debug_sigprint();
|
Chris@49
|
372
|
Chris@49
|
373 arma_debug_check( (col_num >= n_cols), "field::col(): out of bounds");
|
Chris@49
|
374
|
Chris@49
|
375 return subview_field<oT>(*this, 0, col_num, n_rows, 1);
|
Chris@49
|
376 }
|
Chris@49
|
377
|
Chris@49
|
378
|
Chris@49
|
379
|
Chris@49
|
380 //! creation of subview_field (subfield comprised of specified rows)
|
Chris@49
|
381 template<typename oT>
|
Chris@49
|
382 inline
|
Chris@49
|
383 subview_field<oT>
|
Chris@49
|
384 field<oT>::rows(const uword in_row1, const uword in_row2)
|
Chris@49
|
385 {
|
Chris@49
|
386 arma_extra_debug_sigprint();
|
Chris@49
|
387
|
Chris@49
|
388 arma_debug_check
|
Chris@49
|
389 (
|
Chris@49
|
390 ( (in_row1 > in_row2) || (in_row2 >= n_rows) ),
|
Chris@49
|
391 "field::rows(): indicies out of bounds or incorrectly used"
|
Chris@49
|
392 );
|
Chris@49
|
393
|
Chris@49
|
394 const uword sub_n_rows = in_row2 - in_row1 + 1;
|
Chris@49
|
395
|
Chris@49
|
396 return subview_field<oT>(*this, in_row1, 0, sub_n_rows, n_cols);
|
Chris@49
|
397 }
|
Chris@49
|
398
|
Chris@49
|
399
|
Chris@49
|
400
|
Chris@49
|
401 //! creation of subview_field (subfield comprised of specified rows)
|
Chris@49
|
402 template<typename oT>
|
Chris@49
|
403 inline
|
Chris@49
|
404 const subview_field<oT>
|
Chris@49
|
405 field<oT>::rows(const uword in_row1, const uword in_row2) const
|
Chris@49
|
406 {
|
Chris@49
|
407 arma_extra_debug_sigprint();
|
Chris@49
|
408
|
Chris@49
|
409 arma_debug_check
|
Chris@49
|
410 (
|
Chris@49
|
411 ( (in_row1 > in_row2) || (in_row2 >= n_rows) ),
|
Chris@49
|
412 "field::rows(): indicies out of bounds or incorrectly used"
|
Chris@49
|
413 );
|
Chris@49
|
414
|
Chris@49
|
415 const uword sub_n_rows = in_row2 - in_row1 + 1;
|
Chris@49
|
416
|
Chris@49
|
417 return subview_field<oT>(*this, in_row1, 0, sub_n_rows, n_cols);
|
Chris@49
|
418 }
|
Chris@49
|
419
|
Chris@49
|
420
|
Chris@49
|
421
|
Chris@49
|
422 //! creation of subview_field (subfield comprised of specified columns)
|
Chris@49
|
423 template<typename oT>
|
Chris@49
|
424 inline
|
Chris@49
|
425 subview_field<oT>
|
Chris@49
|
426 field<oT>::cols(const uword in_col1, const uword in_col2)
|
Chris@49
|
427 {
|
Chris@49
|
428 arma_extra_debug_sigprint();
|
Chris@49
|
429
|
Chris@49
|
430 arma_debug_check
|
Chris@49
|
431 (
|
Chris@49
|
432 ( (in_col1 > in_col2) || (in_col2 >= n_cols) ),
|
Chris@49
|
433 "field::cols(): indicies out of bounds or incorrectly used"
|
Chris@49
|
434 );
|
Chris@49
|
435
|
Chris@49
|
436 const uword sub_n_cols = in_col2 - in_col1 + 1;
|
Chris@49
|
437
|
Chris@49
|
438 return subview_field<oT>(*this, 0, in_col1, n_rows, sub_n_cols);
|
Chris@49
|
439 }
|
Chris@49
|
440
|
Chris@49
|
441
|
Chris@49
|
442
|
Chris@49
|
443 //! creation of subview_field (subfield comprised of specified columns)
|
Chris@49
|
444 template<typename oT>
|
Chris@49
|
445 inline
|
Chris@49
|
446 const subview_field<oT>
|
Chris@49
|
447 field<oT>::cols(const uword in_col1, const uword in_col2) const
|
Chris@49
|
448 {
|
Chris@49
|
449 arma_extra_debug_sigprint();
|
Chris@49
|
450
|
Chris@49
|
451 arma_debug_check
|
Chris@49
|
452 (
|
Chris@49
|
453 ( (in_col1 > in_col2) || (in_col2 >= n_cols) ),
|
Chris@49
|
454 "field::cols(): indicies out of bounds or incorrectly used"
|
Chris@49
|
455 );
|
Chris@49
|
456
|
Chris@49
|
457 const uword sub_n_cols = in_col2 - in_col1 + 1;
|
Chris@49
|
458
|
Chris@49
|
459 return subview_field<oT>(*this, 0, in_col1, n_rows, sub_n_cols);
|
Chris@49
|
460 }
|
Chris@49
|
461
|
Chris@49
|
462
|
Chris@49
|
463
|
Chris@49
|
464 //! creation of subview_field (subfield with arbitrary dimensions)
|
Chris@49
|
465 template<typename oT>
|
Chris@49
|
466 inline
|
Chris@49
|
467 subview_field<oT>
|
Chris@49
|
468 field<oT>::subfield(const uword in_row1, const uword in_col1, const uword in_row2, const uword in_col2)
|
Chris@49
|
469 {
|
Chris@49
|
470 arma_extra_debug_sigprint();
|
Chris@49
|
471
|
Chris@49
|
472 arma_debug_check
|
Chris@49
|
473 (
|
Chris@49
|
474 (in_row1 > in_row2) || (in_col1 > in_col2) || (in_row2 >= n_rows) || (in_col2 >= n_cols),
|
Chris@49
|
475 "field::subfield(): indices out of bounds or incorrectly used"
|
Chris@49
|
476 );
|
Chris@49
|
477
|
Chris@49
|
478 const uword sub_n_rows = in_row2 - in_row1 + 1;
|
Chris@49
|
479 const uword sub_n_cols = in_col2 - in_col1 + 1;
|
Chris@49
|
480
|
Chris@49
|
481 return subview_field<oT>(*this, in_row1, in_col1, sub_n_rows, sub_n_cols);
|
Chris@49
|
482 }
|
Chris@49
|
483
|
Chris@49
|
484
|
Chris@49
|
485
|
Chris@49
|
486 //! creation of subview_field (subfield with arbitrary dimensions)
|
Chris@49
|
487 template<typename oT>
|
Chris@49
|
488 inline
|
Chris@49
|
489 const subview_field<oT>
|
Chris@49
|
490 field<oT>::subfield(const uword in_row1, const uword in_col1, const uword in_row2, const uword in_col2) const
|
Chris@49
|
491 {
|
Chris@49
|
492 arma_extra_debug_sigprint();
|
Chris@49
|
493
|
Chris@49
|
494 arma_debug_check
|
Chris@49
|
495 (
|
Chris@49
|
496 (in_row1 > in_row2) || (in_col1 > in_col2) || (in_row2 >= n_rows) || (in_col2 >= n_cols),
|
Chris@49
|
497 "field::subfield(): indices out of bounds or incorrectly used"
|
Chris@49
|
498 );
|
Chris@49
|
499
|
Chris@49
|
500 const uword sub_n_rows = in_row2 - in_row1 + 1;
|
Chris@49
|
501 const uword sub_n_cols = in_col2 - in_col1 + 1;
|
Chris@49
|
502
|
Chris@49
|
503 return subview_field<oT>(*this, in_row1, in_col1, sub_n_rows, sub_n_cols);
|
Chris@49
|
504 }
|
Chris@49
|
505
|
Chris@49
|
506
|
Chris@49
|
507
|
Chris@49
|
508 //! creation of subview_field (subfield with arbitrary dimensions)
|
Chris@49
|
509 template<typename oT>
|
Chris@49
|
510 inline
|
Chris@49
|
511 subview_field<oT>
|
Chris@49
|
512 field<oT>::subfield(const span& row_span, const span& col_span)
|
Chris@49
|
513 {
|
Chris@49
|
514 arma_extra_debug_sigprint();
|
Chris@49
|
515
|
Chris@49
|
516 const bool row_all = row_span.whole;
|
Chris@49
|
517 const bool col_all = col_span.whole;
|
Chris@49
|
518
|
Chris@49
|
519 const uword local_n_rows = n_rows;
|
Chris@49
|
520 const uword local_n_cols = n_cols;
|
Chris@49
|
521
|
Chris@49
|
522 const uword in_row1 = row_all ? 0 : row_span.a;
|
Chris@49
|
523 const uword in_row2 = row_span.b;
|
Chris@49
|
524 const uword sub_n_rows = row_all ? local_n_rows : in_row2 - in_row1 + 1;
|
Chris@49
|
525
|
Chris@49
|
526 const uword in_col1 = col_all ? 0 : col_span.a;
|
Chris@49
|
527 const uword in_col2 = col_span.b;
|
Chris@49
|
528 const uword sub_n_cols = col_all ? local_n_cols : in_col2 - in_col1 + 1;
|
Chris@49
|
529
|
Chris@49
|
530 arma_debug_check
|
Chris@49
|
531 (
|
Chris@49
|
532 ( row_all ? false : ((in_row1 > in_row2) || (in_row2 >= local_n_rows)) )
|
Chris@49
|
533 ||
|
Chris@49
|
534 ( col_all ? false : ((in_col1 > in_col2) || (in_col2 >= local_n_cols)) )
|
Chris@49
|
535 ,
|
Chris@49
|
536 "field::subfield(): indices out of bounds or incorrectly used"
|
Chris@49
|
537 );
|
Chris@49
|
538
|
Chris@49
|
539 return subview_field<oT>(*this, in_row1, in_col1, sub_n_rows, sub_n_cols);
|
Chris@49
|
540 }
|
Chris@49
|
541
|
Chris@49
|
542
|
Chris@49
|
543
|
Chris@49
|
544 //! creation of subview_field (subfield with arbitrary dimensions)
|
Chris@49
|
545 template<typename oT>
|
Chris@49
|
546 inline
|
Chris@49
|
547 const subview_field<oT>
|
Chris@49
|
548 field<oT>::subfield(const span& row_span, const span& col_span) const
|
Chris@49
|
549 {
|
Chris@49
|
550 arma_extra_debug_sigprint();
|
Chris@49
|
551
|
Chris@49
|
552 const bool row_all = row_span.whole;
|
Chris@49
|
553 const bool col_all = col_span.whole;
|
Chris@49
|
554
|
Chris@49
|
555 const uword local_n_rows = n_rows;
|
Chris@49
|
556 const uword local_n_cols = n_cols;
|
Chris@49
|
557
|
Chris@49
|
558 const uword in_row1 = row_all ? 0 : row_span.a;
|
Chris@49
|
559 const uword in_row2 = row_span.b;
|
Chris@49
|
560 const uword sub_n_rows = row_all ? local_n_rows : in_row2 - in_row1 + 1;
|
Chris@49
|
561
|
Chris@49
|
562 const uword in_col1 = col_all ? 0 : col_span.a;
|
Chris@49
|
563 const uword in_col2 = col_span.b;
|
Chris@49
|
564 const uword sub_n_cols = col_all ? local_n_cols : in_col2 - in_col1 + 1;
|
Chris@49
|
565
|
Chris@49
|
566 arma_debug_check
|
Chris@49
|
567 (
|
Chris@49
|
568 ( row_all ? false : ((in_row1 > in_row2) || (in_row2 >= local_n_rows)) )
|
Chris@49
|
569 ||
|
Chris@49
|
570 ( col_all ? false : ((in_col1 > in_col2) || (in_col2 >= local_n_cols)) )
|
Chris@49
|
571 ,
|
Chris@49
|
572 "field::subfield(): indices out of bounds or incorrectly used"
|
Chris@49
|
573 );
|
Chris@49
|
574
|
Chris@49
|
575 return subview_field<oT>(*this, in_row1, in_col1, sub_n_rows, sub_n_cols);
|
Chris@49
|
576 }
|
Chris@49
|
577
|
Chris@49
|
578
|
Chris@49
|
579
|
Chris@49
|
580 template<typename oT>
|
Chris@49
|
581 inline
|
Chris@49
|
582 subview_field<oT>
|
Chris@49
|
583 field<oT>::operator()(const span& row_span, const span& col_span)
|
Chris@49
|
584 {
|
Chris@49
|
585 arma_extra_debug_sigprint();
|
Chris@49
|
586
|
Chris@49
|
587 return (*this).subfield(row_span, col_span);
|
Chris@49
|
588 }
|
Chris@49
|
589
|
Chris@49
|
590
|
Chris@49
|
591
|
Chris@49
|
592 template<typename oT>
|
Chris@49
|
593 inline
|
Chris@49
|
594 const subview_field<oT>
|
Chris@49
|
595 field<oT>::operator()(const span& row_span, const span& col_span) const
|
Chris@49
|
596 {
|
Chris@49
|
597 arma_extra_debug_sigprint();
|
Chris@49
|
598
|
Chris@49
|
599 return (*this).subfield(row_span, col_span);
|
Chris@49
|
600 }
|
Chris@49
|
601
|
Chris@49
|
602
|
Chris@49
|
603
|
Chris@49
|
604 //! print contents of the field (to the cout stream),
|
Chris@49
|
605 //! optionally preceding with a user specified line of text.
|
Chris@49
|
606 //! the field class preserves the stream's flags
|
Chris@49
|
607 //! but the associated operator<< function for type oT
|
Chris@49
|
608 //! may still modify the stream's parameters.
|
Chris@49
|
609 //! NOTE: this function assumes that type oT can be printed,
|
Chris@49
|
610 //! i.e. the function "std::ostream& operator<< (std::ostream&, const oT&)"
|
Chris@49
|
611 //! has been defined.
|
Chris@49
|
612
|
Chris@49
|
613 template<typename oT>
|
Chris@49
|
614 inline
|
Chris@49
|
615 void
|
Chris@49
|
616 field<oT>::print(const std::string extra_text) const
|
Chris@49
|
617 {
|
Chris@49
|
618 arma_extra_debug_sigprint();
|
Chris@49
|
619
|
Chris@49
|
620 if(extra_text.length() != 0)
|
Chris@49
|
621 {
|
Chris@49
|
622 const std::streamsize orig_width = ARMA_DEFAULT_OSTREAM.width();
|
Chris@49
|
623
|
Chris@49
|
624 ARMA_DEFAULT_OSTREAM << extra_text << '\n';
|
Chris@49
|
625
|
Chris@49
|
626 ARMA_DEFAULT_OSTREAM.width(orig_width);
|
Chris@49
|
627 }
|
Chris@49
|
628
|
Chris@49
|
629 arma_ostream::print(ARMA_DEFAULT_OSTREAM, *this);
|
Chris@49
|
630 }
|
Chris@49
|
631
|
Chris@49
|
632
|
Chris@49
|
633
|
Chris@49
|
634 //! print contents of the field to a user specified stream,
|
Chris@49
|
635 //! optionally preceding with a user specified line of text.
|
Chris@49
|
636 //! the field class preserves the stream's flags
|
Chris@49
|
637 //! but the associated operator<< function for type oT
|
Chris@49
|
638 //! may still modify the stream's parameters.
|
Chris@49
|
639 //! NOTE: this function assumes that type oT can be printed,
|
Chris@49
|
640 //! i.e. the function "std::ostream& operator<< (std::ostream&, const oT&)"
|
Chris@49
|
641 //! has been defined.
|
Chris@49
|
642
|
Chris@49
|
643 template<typename oT>
|
Chris@49
|
644 inline
|
Chris@49
|
645 void
|
Chris@49
|
646 field<oT>::print(std::ostream& user_stream, const std::string extra_text) const
|
Chris@49
|
647 {
|
Chris@49
|
648 arma_extra_debug_sigprint();
|
Chris@49
|
649
|
Chris@49
|
650 if(extra_text.length() != 0)
|
Chris@49
|
651 {
|
Chris@49
|
652 const std::streamsize orig_width = user_stream.width();
|
Chris@49
|
653
|
Chris@49
|
654 user_stream << extra_text << '\n';
|
Chris@49
|
655
|
Chris@49
|
656 user_stream.width(orig_width);
|
Chris@49
|
657 }
|
Chris@49
|
658
|
Chris@49
|
659 arma_ostream::print(user_stream, *this);
|
Chris@49
|
660 }
|
Chris@49
|
661
|
Chris@49
|
662
|
Chris@49
|
663
|
Chris@49
|
664 //! fill the field with an object
|
Chris@49
|
665 template<typename oT>
|
Chris@49
|
666 inline
|
Chris@49
|
667 void
|
Chris@49
|
668 field<oT>::fill(const oT& x)
|
Chris@49
|
669 {
|
Chris@49
|
670 arma_extra_debug_sigprint();
|
Chris@49
|
671
|
Chris@49
|
672 field<oT>& t = *this;
|
Chris@49
|
673
|
Chris@49
|
674 for(uword i=0; i<n_elem; ++i)
|
Chris@49
|
675 {
|
Chris@49
|
676 t[i] = x;
|
Chris@49
|
677 }
|
Chris@49
|
678 }
|
Chris@49
|
679
|
Chris@49
|
680
|
Chris@49
|
681
|
Chris@49
|
682 //! reset the field to an empty state (i.e. the field will have no objects)
|
Chris@49
|
683 template<typename oT>
|
Chris@49
|
684 inline
|
Chris@49
|
685 void
|
Chris@49
|
686 field<oT>::reset()
|
Chris@49
|
687 {
|
Chris@49
|
688 arma_extra_debug_sigprint();
|
Chris@49
|
689
|
Chris@49
|
690 init(0,0);
|
Chris@49
|
691 }
|
Chris@49
|
692
|
Chris@49
|
693
|
Chris@49
|
694
|
Chris@49
|
695 //! reset each object
|
Chris@49
|
696 template<typename oT>
|
Chris@49
|
697 inline
|
Chris@49
|
698 void
|
Chris@49
|
699 field<oT>::reset_objects()
|
Chris@49
|
700 {
|
Chris@49
|
701 arma_extra_debug_sigprint();
|
Chris@49
|
702
|
Chris@49
|
703 field_aux::reset_objects(*this);
|
Chris@49
|
704 }
|
Chris@49
|
705
|
Chris@49
|
706
|
Chris@49
|
707
|
Chris@49
|
708 //! returns true if the field has no objects
|
Chris@49
|
709 template<typename oT>
|
Chris@49
|
710 arma_inline
|
Chris@49
|
711 bool
|
Chris@49
|
712 field<oT>::is_empty() const
|
Chris@49
|
713 {
|
Chris@49
|
714 return (n_elem == 0);
|
Chris@49
|
715 }
|
Chris@49
|
716
|
Chris@49
|
717
|
Chris@49
|
718
|
Chris@49
|
719 //! returns true if the given index is currently in range
|
Chris@49
|
720 template<typename oT>
|
Chris@49
|
721 arma_inline
|
Chris@49
|
722 arma_warn_unused
|
Chris@49
|
723 bool
|
Chris@49
|
724 field<oT>::in_range(const uword i) const
|
Chris@49
|
725 {
|
Chris@49
|
726 return (i < n_elem);
|
Chris@49
|
727 }
|
Chris@49
|
728
|
Chris@49
|
729
|
Chris@49
|
730
|
Chris@49
|
731 //! returns true if the given start and end indices are currently in range
|
Chris@49
|
732 template<typename oT>
|
Chris@49
|
733 arma_inline
|
Chris@49
|
734 arma_warn_unused
|
Chris@49
|
735 bool
|
Chris@49
|
736 field<oT>::in_range(const span& x) const
|
Chris@49
|
737 {
|
Chris@49
|
738 arma_extra_debug_sigprint();
|
Chris@49
|
739
|
Chris@49
|
740 if(x.whole == true)
|
Chris@49
|
741 {
|
Chris@49
|
742 return true;
|
Chris@49
|
743 }
|
Chris@49
|
744 else
|
Chris@49
|
745 {
|
Chris@49
|
746 const uword a = x.a;
|
Chris@49
|
747 const uword b = x.b;
|
Chris@49
|
748
|
Chris@49
|
749 return ( (a <= b) && (b < n_elem) );
|
Chris@49
|
750 }
|
Chris@49
|
751 }
|
Chris@49
|
752
|
Chris@49
|
753
|
Chris@49
|
754
|
Chris@49
|
755 //! returns true if the given location is currently in range
|
Chris@49
|
756 template<typename oT>
|
Chris@49
|
757 arma_inline
|
Chris@49
|
758 arma_warn_unused
|
Chris@49
|
759 bool
|
Chris@49
|
760 field<oT>::in_range(const uword in_row, const uword in_col) const
|
Chris@49
|
761 {
|
Chris@49
|
762 return ( (in_row < n_rows) && (in_col < n_cols) );
|
Chris@49
|
763 }
|
Chris@49
|
764
|
Chris@49
|
765
|
Chris@49
|
766
|
Chris@49
|
767 template<typename oT>
|
Chris@49
|
768 arma_inline
|
Chris@49
|
769 arma_warn_unused
|
Chris@49
|
770 bool
|
Chris@49
|
771 field<oT>::in_range(const span& row_span, const uword in_col) const
|
Chris@49
|
772 {
|
Chris@49
|
773 arma_extra_debug_sigprint();
|
Chris@49
|
774
|
Chris@49
|
775 if(row_span.whole == true)
|
Chris@49
|
776 {
|
Chris@49
|
777 return (in_col < n_cols);
|
Chris@49
|
778 }
|
Chris@49
|
779 else
|
Chris@49
|
780 {
|
Chris@49
|
781 const uword in_row1 = row_span.a;
|
Chris@49
|
782 const uword in_row2 = row_span.b;
|
Chris@49
|
783
|
Chris@49
|
784 return ( (in_row1 <= in_row2) && (in_row2 < n_rows) && (in_col < n_cols) );
|
Chris@49
|
785 }
|
Chris@49
|
786 }
|
Chris@49
|
787
|
Chris@49
|
788
|
Chris@49
|
789
|
Chris@49
|
790 template<typename oT>
|
Chris@49
|
791 arma_inline
|
Chris@49
|
792 arma_warn_unused
|
Chris@49
|
793 bool
|
Chris@49
|
794 field<oT>::in_range(const uword in_row, const span& col_span) const
|
Chris@49
|
795 {
|
Chris@49
|
796 arma_extra_debug_sigprint();
|
Chris@49
|
797
|
Chris@49
|
798 if(col_span.whole == true)
|
Chris@49
|
799 {
|
Chris@49
|
800 return (in_row < n_rows);
|
Chris@49
|
801 }
|
Chris@49
|
802 else
|
Chris@49
|
803 {
|
Chris@49
|
804 const uword in_col1 = col_span.a;
|
Chris@49
|
805 const uword in_col2 = col_span.b;
|
Chris@49
|
806
|
Chris@49
|
807 return ( (in_row < n_rows) && (in_col1 <= in_col2) && (in_col2 < n_cols) );
|
Chris@49
|
808 }
|
Chris@49
|
809 }
|
Chris@49
|
810
|
Chris@49
|
811
|
Chris@49
|
812
|
Chris@49
|
813 template<typename oT>
|
Chris@49
|
814 arma_inline
|
Chris@49
|
815 arma_warn_unused
|
Chris@49
|
816 bool
|
Chris@49
|
817 field<oT>::in_range(const span& row_span, const span& col_span) const
|
Chris@49
|
818 {
|
Chris@49
|
819 arma_extra_debug_sigprint();
|
Chris@49
|
820
|
Chris@49
|
821 const uword in_row1 = row_span.a;
|
Chris@49
|
822 const uword in_row2 = row_span.b;
|
Chris@49
|
823
|
Chris@49
|
824 const uword in_col1 = col_span.a;
|
Chris@49
|
825 const uword in_col2 = col_span.b;
|
Chris@49
|
826
|
Chris@49
|
827 const bool rows_ok = row_span.whole ? true : ( (in_row1 <= in_row2) && (in_row2 < n_rows) );
|
Chris@49
|
828 const bool cols_ok = col_span.whole ? true : ( (in_col1 <= in_col2) && (in_col2 < n_cols) );
|
Chris@49
|
829
|
Chris@49
|
830 return ( (rows_ok == true) && (cols_ok == true) );
|
Chris@49
|
831 }
|
Chris@49
|
832
|
Chris@49
|
833
|
Chris@49
|
834
|
Chris@49
|
835 template<typename oT>
|
Chris@49
|
836 inline
|
Chris@49
|
837 bool
|
Chris@49
|
838 field<oT>::save(const std::string name, const file_type type, const bool print_status) const
|
Chris@49
|
839 {
|
Chris@49
|
840 arma_extra_debug_sigprint();
|
Chris@49
|
841
|
Chris@49
|
842 std::string err_msg;
|
Chris@49
|
843 const bool save_okay = field_aux::save(*this, name, type, err_msg);
|
Chris@49
|
844
|
Chris@49
|
845 if( (print_status == true) && (save_okay == false) )
|
Chris@49
|
846 {
|
Chris@49
|
847 if(err_msg.length() > 0)
|
Chris@49
|
848 {
|
Chris@49
|
849 arma_warn(true, "field::save(): ", err_msg, name);
|
Chris@49
|
850 }
|
Chris@49
|
851 else
|
Chris@49
|
852 {
|
Chris@49
|
853 arma_warn(true, "field::save(): couldn't write to ", name);
|
Chris@49
|
854 }
|
Chris@49
|
855 }
|
Chris@49
|
856
|
Chris@49
|
857 return save_okay;
|
Chris@49
|
858 }
|
Chris@49
|
859
|
Chris@49
|
860
|
Chris@49
|
861
|
Chris@49
|
862 template<typename oT>
|
Chris@49
|
863 inline
|
Chris@49
|
864 bool
|
Chris@49
|
865 field<oT>::save(std::ostream& os, const file_type type, const bool print_status) const
|
Chris@49
|
866 {
|
Chris@49
|
867 arma_extra_debug_sigprint();
|
Chris@49
|
868
|
Chris@49
|
869 std::string err_msg;
|
Chris@49
|
870 const bool save_okay = field_aux::save(*this, os, type, err_msg);
|
Chris@49
|
871
|
Chris@49
|
872 if( (print_status == true) && (save_okay == false) )
|
Chris@49
|
873 {
|
Chris@49
|
874 if(err_msg.length() > 0)
|
Chris@49
|
875 {
|
Chris@49
|
876 arma_warn(true, "field::save(): ", err_msg, "[ostream]");
|
Chris@49
|
877 }
|
Chris@49
|
878 else
|
Chris@49
|
879 {
|
Chris@49
|
880 arma_warn(true, "field::save(): couldn't write to [ostream]");
|
Chris@49
|
881 }
|
Chris@49
|
882 }
|
Chris@49
|
883
|
Chris@49
|
884 return save_okay;
|
Chris@49
|
885 }
|
Chris@49
|
886
|
Chris@49
|
887
|
Chris@49
|
888
|
Chris@49
|
889 template<typename oT>
|
Chris@49
|
890 inline
|
Chris@49
|
891 bool
|
Chris@49
|
892 field<oT>::load(const std::string name, const file_type type, const bool print_status)
|
Chris@49
|
893 {
|
Chris@49
|
894 arma_extra_debug_sigprint();
|
Chris@49
|
895
|
Chris@49
|
896 std::string err_msg;
|
Chris@49
|
897 const bool load_okay = field_aux::load(*this, name, type, err_msg);
|
Chris@49
|
898
|
Chris@49
|
899 if( (print_status == true) && (load_okay == false) )
|
Chris@49
|
900 {
|
Chris@49
|
901 if(err_msg.length() > 0)
|
Chris@49
|
902 {
|
Chris@49
|
903 arma_warn(true, "field::load(): ", err_msg, name);
|
Chris@49
|
904 }
|
Chris@49
|
905 else
|
Chris@49
|
906 {
|
Chris@49
|
907 arma_warn(true, "field::load(): couldn't read from ", name);
|
Chris@49
|
908 }
|
Chris@49
|
909 }
|
Chris@49
|
910
|
Chris@49
|
911 if(load_okay == false)
|
Chris@49
|
912 {
|
Chris@49
|
913 (*this).reset();
|
Chris@49
|
914 }
|
Chris@49
|
915
|
Chris@49
|
916 return load_okay;
|
Chris@49
|
917 }
|
Chris@49
|
918
|
Chris@49
|
919
|
Chris@49
|
920
|
Chris@49
|
921 template<typename oT>
|
Chris@49
|
922 inline
|
Chris@49
|
923 bool
|
Chris@49
|
924 field<oT>::load(std::istream& is, const file_type type, const bool print_status)
|
Chris@49
|
925 {
|
Chris@49
|
926 arma_extra_debug_sigprint();
|
Chris@49
|
927
|
Chris@49
|
928 std::string err_msg;
|
Chris@49
|
929 const bool load_okay = field_aux::load(*this, is, type, err_msg);
|
Chris@49
|
930
|
Chris@49
|
931 if( (print_status == true) && (load_okay == false) )
|
Chris@49
|
932 {
|
Chris@49
|
933 if(err_msg.length() > 0)
|
Chris@49
|
934 {
|
Chris@49
|
935 arma_warn(true, "field::load(): ", err_msg, "[istream]");
|
Chris@49
|
936 }
|
Chris@49
|
937 else
|
Chris@49
|
938 {
|
Chris@49
|
939 arma_warn(true, "field::load(): couldn't read from [istream]");
|
Chris@49
|
940 }
|
Chris@49
|
941 }
|
Chris@49
|
942
|
Chris@49
|
943 if(load_okay == false)
|
Chris@49
|
944 {
|
Chris@49
|
945 (*this).reset();
|
Chris@49
|
946 }
|
Chris@49
|
947
|
Chris@49
|
948 return load_okay;
|
Chris@49
|
949 }
|
Chris@49
|
950
|
Chris@49
|
951
|
Chris@49
|
952
|
Chris@49
|
953 template<typename oT>
|
Chris@49
|
954 inline
|
Chris@49
|
955 bool
|
Chris@49
|
956 field<oT>::quiet_save(const std::string name, const file_type type) const
|
Chris@49
|
957 {
|
Chris@49
|
958 arma_extra_debug_sigprint();
|
Chris@49
|
959
|
Chris@49
|
960 return (*this).save(name, type, false);
|
Chris@49
|
961 }
|
Chris@49
|
962
|
Chris@49
|
963
|
Chris@49
|
964
|
Chris@49
|
965 template<typename oT>
|
Chris@49
|
966 inline
|
Chris@49
|
967 bool
|
Chris@49
|
968 field<oT>::quiet_save(std::ostream& os, const file_type type) const
|
Chris@49
|
969 {
|
Chris@49
|
970 arma_extra_debug_sigprint();
|
Chris@49
|
971
|
Chris@49
|
972 return (*this).save(os, type, false);
|
Chris@49
|
973 }
|
Chris@49
|
974
|
Chris@49
|
975
|
Chris@49
|
976
|
Chris@49
|
977 template<typename oT>
|
Chris@49
|
978 inline
|
Chris@49
|
979 bool
|
Chris@49
|
980 field<oT>::quiet_load(const std::string name, const file_type type)
|
Chris@49
|
981 {
|
Chris@49
|
982 arma_extra_debug_sigprint();
|
Chris@49
|
983
|
Chris@49
|
984 return (*this).load(name, type, false);
|
Chris@49
|
985 }
|
Chris@49
|
986
|
Chris@49
|
987
|
Chris@49
|
988
|
Chris@49
|
989 template<typename oT>
|
Chris@49
|
990 inline
|
Chris@49
|
991 bool
|
Chris@49
|
992 field<oT>::quiet_load(std::istream& is, const file_type type)
|
Chris@49
|
993 {
|
Chris@49
|
994 arma_extra_debug_sigprint();
|
Chris@49
|
995
|
Chris@49
|
996 return (*this).load(is, type, false);
|
Chris@49
|
997 }
|
Chris@49
|
998
|
Chris@49
|
999
|
Chris@49
|
1000
|
Chris@49
|
1001 //! construct a field from a given field
|
Chris@49
|
1002 template<typename oT>
|
Chris@49
|
1003 inline
|
Chris@49
|
1004 void
|
Chris@49
|
1005 field<oT>::init(const field<oT>& x)
|
Chris@49
|
1006 {
|
Chris@49
|
1007 arma_extra_debug_sigprint();
|
Chris@49
|
1008
|
Chris@49
|
1009 if(this != &x)
|
Chris@49
|
1010 {
|
Chris@49
|
1011 const uword x_n_rows = x.n_rows;
|
Chris@49
|
1012 const uword x_n_cols = x.n_cols;
|
Chris@49
|
1013
|
Chris@49
|
1014 init(x_n_rows, x_n_cols);
|
Chris@49
|
1015
|
Chris@49
|
1016 field& t = *this;
|
Chris@49
|
1017
|
Chris@49
|
1018 for(uword ucol=0; ucol < x_n_cols; ++ucol)
|
Chris@49
|
1019 for(uword urow=0; urow < x_n_rows; ++urow)
|
Chris@49
|
1020 {
|
Chris@49
|
1021 t.at(urow,ucol) = x.at(urow,ucol);
|
Chris@49
|
1022 }
|
Chris@49
|
1023 }
|
Chris@49
|
1024
|
Chris@49
|
1025 }
|
Chris@49
|
1026
|
Chris@49
|
1027
|
Chris@49
|
1028
|
Chris@49
|
1029 //! internal field construction; if the requested size is small enough, memory from the stack is used. otherwise memory is allocated via 'new'
|
Chris@49
|
1030 template<typename oT>
|
Chris@49
|
1031 inline
|
Chris@49
|
1032 void
|
Chris@49
|
1033 field<oT>::init(const uword n_rows_in, const uword n_cols_in)
|
Chris@49
|
1034 {
|
Chris@49
|
1035 arma_extra_debug_sigprint( arma_boost::format("n_rows_in = %d, n_cols_in = %d") % n_rows_in % n_cols_in );
|
Chris@49
|
1036
|
Chris@49
|
1037 arma_debug_check
|
Chris@49
|
1038 (
|
Chris@49
|
1039 (
|
Chris@49
|
1040 ( (n_rows_in > ARMA_MAX_UHWORD) || (n_cols_in > ARMA_MAX_UHWORD) )
|
Chris@49
|
1041 ? ( (float(n_rows_in) * float(n_cols_in)) > float(ARMA_MAX_UWORD) )
|
Chris@49
|
1042 : false
|
Chris@49
|
1043 ),
|
Chris@49
|
1044 "field::init(): requested size is too large"
|
Chris@49
|
1045 );
|
Chris@49
|
1046
|
Chris@49
|
1047 const uword n_elem_new = n_rows_in * n_cols_in;
|
Chris@49
|
1048
|
Chris@49
|
1049 if(n_elem == n_elem_new)
|
Chris@49
|
1050 {
|
Chris@49
|
1051 // delete_objects();
|
Chris@49
|
1052 // create_objects();
|
Chris@49
|
1053 access::rw(n_rows) = n_rows_in;
|
Chris@49
|
1054 access::rw(n_cols) = n_cols_in;
|
Chris@49
|
1055 }
|
Chris@49
|
1056 else
|
Chris@49
|
1057 {
|
Chris@49
|
1058 delete_objects();
|
Chris@49
|
1059
|
Chris@49
|
1060 if(n_elem > sizeof(mem_local)/sizeof(oT*) )
|
Chris@49
|
1061 {
|
Chris@49
|
1062 delete [] mem;
|
Chris@49
|
1063 }
|
Chris@49
|
1064
|
Chris@49
|
1065 if(n_elem_new <= sizeof(mem_local)/sizeof(oT*) )
|
Chris@49
|
1066 {
|
Chris@49
|
1067 mem = mem_local;
|
Chris@49
|
1068 }
|
Chris@49
|
1069 else
|
Chris@49
|
1070 {
|
Chris@49
|
1071 mem = new(std::nothrow) oT* [n_elem_new];
|
Chris@49
|
1072 arma_check_bad_alloc( (mem == 0), "field::init(): out of memory" );
|
Chris@49
|
1073 }
|
Chris@49
|
1074
|
Chris@49
|
1075 access::rw(n_elem) = n_elem_new;
|
Chris@49
|
1076
|
Chris@49
|
1077 if(n_elem_new == 0)
|
Chris@49
|
1078 {
|
Chris@49
|
1079 access::rw(n_rows) = 0;
|
Chris@49
|
1080 access::rw(n_cols) = 0;
|
Chris@49
|
1081 }
|
Chris@49
|
1082 else
|
Chris@49
|
1083 {
|
Chris@49
|
1084 access::rw(n_rows) = n_rows_in;
|
Chris@49
|
1085 access::rw(n_cols) = n_cols_in;
|
Chris@49
|
1086 }
|
Chris@49
|
1087
|
Chris@49
|
1088 create_objects();
|
Chris@49
|
1089
|
Chris@49
|
1090 }
|
Chris@49
|
1091
|
Chris@49
|
1092 }
|
Chris@49
|
1093
|
Chris@49
|
1094
|
Chris@49
|
1095
|
Chris@49
|
1096 template<typename oT>
|
Chris@49
|
1097 inline
|
Chris@49
|
1098 void
|
Chris@49
|
1099 field<oT>::delete_objects()
|
Chris@49
|
1100 {
|
Chris@49
|
1101 arma_extra_debug_sigprint( arma_boost::format("n_elem = %d") % n_elem );
|
Chris@49
|
1102
|
Chris@49
|
1103 for(uword i=0; i<n_elem; ++i)
|
Chris@49
|
1104 {
|
Chris@49
|
1105 if(mem[i] != 0)
|
Chris@49
|
1106 {
|
Chris@49
|
1107 delete mem[i];
|
Chris@49
|
1108 mem[i] = 0;
|
Chris@49
|
1109 }
|
Chris@49
|
1110 }
|
Chris@49
|
1111
|
Chris@49
|
1112 }
|
Chris@49
|
1113
|
Chris@49
|
1114
|
Chris@49
|
1115
|
Chris@49
|
1116 template<typename oT>
|
Chris@49
|
1117 inline
|
Chris@49
|
1118 void
|
Chris@49
|
1119 field<oT>::create_objects()
|
Chris@49
|
1120 {
|
Chris@49
|
1121 arma_extra_debug_sigprint( arma_boost::format("n_elem = %d") % n_elem );
|
Chris@49
|
1122
|
Chris@49
|
1123 for(uword i=0; i<n_elem; ++i)
|
Chris@49
|
1124 {
|
Chris@49
|
1125 mem[i] = new oT;
|
Chris@49
|
1126 }
|
Chris@49
|
1127
|
Chris@49
|
1128 }
|
Chris@49
|
1129
|
Chris@49
|
1130
|
Chris@49
|
1131
|
Chris@49
|
1132 template<typename oT>
|
Chris@49
|
1133 inline
|
Chris@49
|
1134 field<oT>::iterator::iterator(field<oT>& in_M, const bool at_end)
|
Chris@49
|
1135 : M(in_M)
|
Chris@49
|
1136 , i( (at_end == false) ? 0 : in_M.n_elem )
|
Chris@49
|
1137 {
|
Chris@49
|
1138 arma_extra_debug_sigprint();
|
Chris@49
|
1139 }
|
Chris@49
|
1140
|
Chris@49
|
1141
|
Chris@49
|
1142
|
Chris@49
|
1143 template<typename oT>
|
Chris@49
|
1144 inline
|
Chris@49
|
1145 oT&
|
Chris@49
|
1146 field<oT>::iterator::operator*()
|
Chris@49
|
1147 {
|
Chris@49
|
1148 return M[i];
|
Chris@49
|
1149 }
|
Chris@49
|
1150
|
Chris@49
|
1151
|
Chris@49
|
1152
|
Chris@49
|
1153 template<typename oT>
|
Chris@49
|
1154 inline
|
Chris@49
|
1155 typename field<oT>::iterator&
|
Chris@49
|
1156 field<oT>::iterator::operator++()
|
Chris@49
|
1157 {
|
Chris@49
|
1158 ++i;
|
Chris@49
|
1159
|
Chris@49
|
1160 return *this;
|
Chris@49
|
1161 }
|
Chris@49
|
1162
|
Chris@49
|
1163
|
Chris@49
|
1164
|
Chris@49
|
1165 template<typename oT>
|
Chris@49
|
1166 inline
|
Chris@49
|
1167 void
|
Chris@49
|
1168 field<oT>::iterator::operator++(int)
|
Chris@49
|
1169 {
|
Chris@49
|
1170 operator++();
|
Chris@49
|
1171 }
|
Chris@49
|
1172
|
Chris@49
|
1173
|
Chris@49
|
1174
|
Chris@49
|
1175 template<typename oT>
|
Chris@49
|
1176 inline
|
Chris@49
|
1177 typename field<oT>::iterator&
|
Chris@49
|
1178 field<oT>::iterator::operator--()
|
Chris@49
|
1179 {
|
Chris@49
|
1180 if(i > 0)
|
Chris@49
|
1181 {
|
Chris@49
|
1182 --i;
|
Chris@49
|
1183 }
|
Chris@49
|
1184
|
Chris@49
|
1185 return *this;
|
Chris@49
|
1186 }
|
Chris@49
|
1187
|
Chris@49
|
1188
|
Chris@49
|
1189
|
Chris@49
|
1190 template<typename oT>
|
Chris@49
|
1191 inline
|
Chris@49
|
1192 void
|
Chris@49
|
1193 field<oT>::iterator::operator--(int)
|
Chris@49
|
1194 {
|
Chris@49
|
1195 operator--();
|
Chris@49
|
1196 }
|
Chris@49
|
1197
|
Chris@49
|
1198
|
Chris@49
|
1199
|
Chris@49
|
1200 template<typename oT>
|
Chris@49
|
1201 inline
|
Chris@49
|
1202 bool
|
Chris@49
|
1203 field<oT>::iterator::operator!=(const typename field<oT>::iterator& X) const
|
Chris@49
|
1204 {
|
Chris@49
|
1205 return (i != X.i);
|
Chris@49
|
1206 }
|
Chris@49
|
1207
|
Chris@49
|
1208
|
Chris@49
|
1209
|
Chris@49
|
1210 template<typename oT>
|
Chris@49
|
1211 inline
|
Chris@49
|
1212 bool
|
Chris@49
|
1213 field<oT>::iterator::operator==(const typename field<oT>::iterator& X) const
|
Chris@49
|
1214 {
|
Chris@49
|
1215 return (i == X.i);
|
Chris@49
|
1216 }
|
Chris@49
|
1217
|
Chris@49
|
1218
|
Chris@49
|
1219
|
Chris@49
|
1220 template<typename oT>
|
Chris@49
|
1221 inline
|
Chris@49
|
1222 field<oT>::const_iterator::const_iterator(const field<oT>& in_M, const bool at_end)
|
Chris@49
|
1223 : M(in_M)
|
Chris@49
|
1224 , i( (at_end == false) ? 0 : in_M.n_elem )
|
Chris@49
|
1225 {
|
Chris@49
|
1226 arma_extra_debug_sigprint();
|
Chris@49
|
1227 }
|
Chris@49
|
1228
|
Chris@49
|
1229
|
Chris@49
|
1230
|
Chris@49
|
1231 template<typename oT>
|
Chris@49
|
1232 inline
|
Chris@49
|
1233 field<oT>::const_iterator::const_iterator(const typename field<oT>::iterator& X)
|
Chris@49
|
1234 : M(X.M)
|
Chris@49
|
1235 , i(X.i)
|
Chris@49
|
1236 {
|
Chris@49
|
1237 arma_extra_debug_sigprint();
|
Chris@49
|
1238 }
|
Chris@49
|
1239
|
Chris@49
|
1240
|
Chris@49
|
1241
|
Chris@49
|
1242 template<typename oT>
|
Chris@49
|
1243 inline
|
Chris@49
|
1244 const oT&
|
Chris@49
|
1245 field<oT>::const_iterator::operator*() const
|
Chris@49
|
1246 {
|
Chris@49
|
1247 return M[i];
|
Chris@49
|
1248 }
|
Chris@49
|
1249
|
Chris@49
|
1250
|
Chris@49
|
1251
|
Chris@49
|
1252 template<typename oT>
|
Chris@49
|
1253 inline
|
Chris@49
|
1254 typename field<oT>::const_iterator&
|
Chris@49
|
1255 field<oT>::const_iterator::operator++()
|
Chris@49
|
1256 {
|
Chris@49
|
1257 ++i;
|
Chris@49
|
1258
|
Chris@49
|
1259 return *this;
|
Chris@49
|
1260 }
|
Chris@49
|
1261
|
Chris@49
|
1262
|
Chris@49
|
1263
|
Chris@49
|
1264 template<typename oT>
|
Chris@49
|
1265 inline
|
Chris@49
|
1266 void
|
Chris@49
|
1267 field<oT>::const_iterator::operator++(int)
|
Chris@49
|
1268 {
|
Chris@49
|
1269 operator++();
|
Chris@49
|
1270 }
|
Chris@49
|
1271
|
Chris@49
|
1272
|
Chris@49
|
1273
|
Chris@49
|
1274 template<typename oT>
|
Chris@49
|
1275 inline
|
Chris@49
|
1276 typename field<oT>::const_iterator&
|
Chris@49
|
1277 field<oT>::const_iterator::operator--()
|
Chris@49
|
1278 {
|
Chris@49
|
1279 if(i > 0)
|
Chris@49
|
1280 {
|
Chris@49
|
1281 --i;
|
Chris@49
|
1282 }
|
Chris@49
|
1283
|
Chris@49
|
1284 return *this;
|
Chris@49
|
1285 }
|
Chris@49
|
1286
|
Chris@49
|
1287
|
Chris@49
|
1288
|
Chris@49
|
1289 template<typename oT>
|
Chris@49
|
1290 inline
|
Chris@49
|
1291 void
|
Chris@49
|
1292 field<oT>::const_iterator::operator--(int)
|
Chris@49
|
1293 {
|
Chris@49
|
1294 operator--();
|
Chris@49
|
1295 }
|
Chris@49
|
1296
|
Chris@49
|
1297
|
Chris@49
|
1298
|
Chris@49
|
1299 template<typename oT>
|
Chris@49
|
1300 inline
|
Chris@49
|
1301 bool
|
Chris@49
|
1302 field<oT>::const_iterator::operator!=(const typename field<oT>::const_iterator& X) const
|
Chris@49
|
1303 {
|
Chris@49
|
1304 return (i != X.i);
|
Chris@49
|
1305 }
|
Chris@49
|
1306
|
Chris@49
|
1307
|
Chris@49
|
1308
|
Chris@49
|
1309 template<typename oT>
|
Chris@49
|
1310 inline
|
Chris@49
|
1311 bool
|
Chris@49
|
1312 field<oT>::const_iterator::operator==(const typename field<oT>::const_iterator& X) const
|
Chris@49
|
1313 {
|
Chris@49
|
1314 return (i == X.i);
|
Chris@49
|
1315 }
|
Chris@49
|
1316
|
Chris@49
|
1317
|
Chris@49
|
1318
|
Chris@49
|
1319 template<typename oT>
|
Chris@49
|
1320 inline
|
Chris@49
|
1321 typename field<oT>::iterator
|
Chris@49
|
1322 field<oT>::begin()
|
Chris@49
|
1323 {
|
Chris@49
|
1324 arma_extra_debug_sigprint();
|
Chris@49
|
1325
|
Chris@49
|
1326 return field<oT>::iterator(*this);
|
Chris@49
|
1327 }
|
Chris@49
|
1328
|
Chris@49
|
1329
|
Chris@49
|
1330
|
Chris@49
|
1331 template<typename oT>
|
Chris@49
|
1332 inline
|
Chris@49
|
1333 typename field<oT>::const_iterator
|
Chris@49
|
1334 field<oT>::begin() const
|
Chris@49
|
1335 {
|
Chris@49
|
1336 arma_extra_debug_sigprint();
|
Chris@49
|
1337
|
Chris@49
|
1338 return field<oT>::const_iterator(*this);
|
Chris@49
|
1339 }
|
Chris@49
|
1340
|
Chris@49
|
1341
|
Chris@49
|
1342
|
Chris@49
|
1343 template<typename oT>
|
Chris@49
|
1344 inline
|
Chris@49
|
1345 typename field<oT>::const_iterator
|
Chris@49
|
1346 field<oT>::cbegin() const
|
Chris@49
|
1347 {
|
Chris@49
|
1348 arma_extra_debug_sigprint();
|
Chris@49
|
1349
|
Chris@49
|
1350 return field<oT>::const_iterator(*this);
|
Chris@49
|
1351 }
|
Chris@49
|
1352
|
Chris@49
|
1353
|
Chris@49
|
1354
|
Chris@49
|
1355 template<typename oT>
|
Chris@49
|
1356 inline
|
Chris@49
|
1357 typename field<oT>::iterator
|
Chris@49
|
1358 field<oT>::end()
|
Chris@49
|
1359 {
|
Chris@49
|
1360 arma_extra_debug_sigprint();
|
Chris@49
|
1361
|
Chris@49
|
1362 return field<oT>::iterator(*this, true);
|
Chris@49
|
1363 }
|
Chris@49
|
1364
|
Chris@49
|
1365
|
Chris@49
|
1366
|
Chris@49
|
1367 template<typename oT>
|
Chris@49
|
1368 inline
|
Chris@49
|
1369 typename field<oT>::const_iterator
|
Chris@49
|
1370 field<oT>::end() const
|
Chris@49
|
1371 {
|
Chris@49
|
1372 arma_extra_debug_sigprint();
|
Chris@49
|
1373
|
Chris@49
|
1374 return field<oT>::const_iterator(*this, true);
|
Chris@49
|
1375 }
|
Chris@49
|
1376
|
Chris@49
|
1377
|
Chris@49
|
1378
|
Chris@49
|
1379 template<typename oT>
|
Chris@49
|
1380 inline
|
Chris@49
|
1381 typename field<oT>::const_iterator
|
Chris@49
|
1382 field<oT>::cend() const
|
Chris@49
|
1383 {
|
Chris@49
|
1384 arma_extra_debug_sigprint();
|
Chris@49
|
1385
|
Chris@49
|
1386 return field<oT>::const_iterator(*this, true);
|
Chris@49
|
1387 }
|
Chris@49
|
1388
|
Chris@49
|
1389
|
Chris@49
|
1390
|
Chris@49
|
1391 template<typename oT>
|
Chris@49
|
1392 inline
|
Chris@49
|
1393 void
|
Chris@49
|
1394 field<oT>::clear()
|
Chris@49
|
1395 {
|
Chris@49
|
1396 reset();
|
Chris@49
|
1397 }
|
Chris@49
|
1398
|
Chris@49
|
1399
|
Chris@49
|
1400
|
Chris@49
|
1401 template<typename oT>
|
Chris@49
|
1402 inline
|
Chris@49
|
1403 bool
|
Chris@49
|
1404 field<oT>::empty() const
|
Chris@49
|
1405 {
|
Chris@49
|
1406 return (n_elem == 0);
|
Chris@49
|
1407 }
|
Chris@49
|
1408
|
Chris@49
|
1409
|
Chris@49
|
1410
|
Chris@49
|
1411 template<typename oT>
|
Chris@49
|
1412 inline
|
Chris@49
|
1413 uword
|
Chris@49
|
1414 field<oT>::size() const
|
Chris@49
|
1415 {
|
Chris@49
|
1416 return n_elem;
|
Chris@49
|
1417 }
|
Chris@49
|
1418
|
Chris@49
|
1419
|
Chris@49
|
1420
|
Chris@49
|
1421 //
|
Chris@49
|
1422 //
|
Chris@49
|
1423 //
|
Chris@49
|
1424
|
Chris@49
|
1425
|
Chris@49
|
1426
|
Chris@49
|
1427 template<typename oT>
|
Chris@49
|
1428 inline
|
Chris@49
|
1429 void
|
Chris@49
|
1430 field_aux::reset_objects(field<oT>& x)
|
Chris@49
|
1431 {
|
Chris@49
|
1432 arma_extra_debug_sigprint();
|
Chris@49
|
1433
|
Chris@49
|
1434 x.delete_objects();
|
Chris@49
|
1435 x.create_objects();
|
Chris@49
|
1436 }
|
Chris@49
|
1437
|
Chris@49
|
1438
|
Chris@49
|
1439
|
Chris@49
|
1440 template<typename eT>
|
Chris@49
|
1441 inline
|
Chris@49
|
1442 void
|
Chris@49
|
1443 field_aux::reset_objects(field< Mat<eT> >& x)
|
Chris@49
|
1444 {
|
Chris@49
|
1445 arma_extra_debug_sigprint();
|
Chris@49
|
1446
|
Chris@49
|
1447 for(uword i=0; i<x.n_elem; ++i)
|
Chris@49
|
1448 {
|
Chris@49
|
1449 (*(x.mem[i])).reset();
|
Chris@49
|
1450 }
|
Chris@49
|
1451 }
|
Chris@49
|
1452
|
Chris@49
|
1453
|
Chris@49
|
1454
|
Chris@49
|
1455 template<typename eT>
|
Chris@49
|
1456 inline
|
Chris@49
|
1457 void
|
Chris@49
|
1458 field_aux::reset_objects(field< Col<eT> >& x)
|
Chris@49
|
1459 {
|
Chris@49
|
1460 arma_extra_debug_sigprint();
|
Chris@49
|
1461
|
Chris@49
|
1462 for(uword i=0; i<x.n_elem; ++i)
|
Chris@49
|
1463 {
|
Chris@49
|
1464 (*(x.mem[i])).reset();
|
Chris@49
|
1465 }
|
Chris@49
|
1466 }
|
Chris@49
|
1467
|
Chris@49
|
1468
|
Chris@49
|
1469
|
Chris@49
|
1470 template<typename eT>
|
Chris@49
|
1471 inline
|
Chris@49
|
1472 void
|
Chris@49
|
1473 field_aux::reset_objects(field< Row<eT> >& x)
|
Chris@49
|
1474 {
|
Chris@49
|
1475 arma_extra_debug_sigprint();
|
Chris@49
|
1476
|
Chris@49
|
1477 for(uword i=0; i<x.n_elem; ++i)
|
Chris@49
|
1478 {
|
Chris@49
|
1479 (*(x.mem[i])).reset();
|
Chris@49
|
1480 }
|
Chris@49
|
1481 }
|
Chris@49
|
1482
|
Chris@49
|
1483
|
Chris@49
|
1484
|
Chris@49
|
1485 template<typename eT>
|
Chris@49
|
1486 inline
|
Chris@49
|
1487 void
|
Chris@49
|
1488 field_aux::reset_objects(field< Cube<eT> >& x)
|
Chris@49
|
1489 {
|
Chris@49
|
1490 arma_extra_debug_sigprint();
|
Chris@49
|
1491
|
Chris@49
|
1492 for(uword i=0; i<x.n_elem; ++i)
|
Chris@49
|
1493 {
|
Chris@49
|
1494 (*(x.mem[i])).reset();
|
Chris@49
|
1495 }
|
Chris@49
|
1496 }
|
Chris@49
|
1497
|
Chris@49
|
1498
|
Chris@49
|
1499
|
Chris@49
|
1500 inline
|
Chris@49
|
1501 void
|
Chris@49
|
1502 field_aux::reset_objects(field< std::string >& x)
|
Chris@49
|
1503 {
|
Chris@49
|
1504 arma_extra_debug_sigprint();
|
Chris@49
|
1505
|
Chris@49
|
1506 for(uword i=0; i<x.n_elem; ++i)
|
Chris@49
|
1507 {
|
Chris@49
|
1508 (*(x.mem[i])).clear();
|
Chris@49
|
1509 }
|
Chris@49
|
1510 }
|
Chris@49
|
1511
|
Chris@49
|
1512
|
Chris@49
|
1513
|
Chris@49
|
1514 //
|
Chris@49
|
1515 //
|
Chris@49
|
1516 //
|
Chris@49
|
1517
|
Chris@49
|
1518
|
Chris@49
|
1519
|
Chris@49
|
1520 template<typename oT>
|
Chris@49
|
1521 inline
|
Chris@49
|
1522 bool
|
Chris@49
|
1523 field_aux::save(const field<oT>&, const std::string&, const file_type, std::string& err_msg)
|
Chris@49
|
1524 {
|
Chris@49
|
1525 arma_extra_debug_sigprint();
|
Chris@49
|
1526
|
Chris@49
|
1527 err_msg = " [sorry, saving/loading this type of field is currently not supported] filename = ";
|
Chris@49
|
1528
|
Chris@49
|
1529 return false;
|
Chris@49
|
1530 }
|
Chris@49
|
1531
|
Chris@49
|
1532
|
Chris@49
|
1533
|
Chris@49
|
1534 template<typename oT>
|
Chris@49
|
1535 inline
|
Chris@49
|
1536 bool
|
Chris@49
|
1537 field_aux::save(const field<oT>&, std::ostream&, const file_type, std::string& err_msg)
|
Chris@49
|
1538 {
|
Chris@49
|
1539 arma_extra_debug_sigprint();
|
Chris@49
|
1540
|
Chris@49
|
1541 err_msg = " [sorry, saving/loading this type of field is currently not supported] filename = ";
|
Chris@49
|
1542
|
Chris@49
|
1543 return false;
|
Chris@49
|
1544 }
|
Chris@49
|
1545
|
Chris@49
|
1546
|
Chris@49
|
1547
|
Chris@49
|
1548 template<typename oT>
|
Chris@49
|
1549 inline
|
Chris@49
|
1550 bool
|
Chris@49
|
1551 field_aux::load(field<oT>&, const std::string&, const file_type, std::string& err_msg)
|
Chris@49
|
1552 {
|
Chris@49
|
1553 arma_extra_debug_sigprint();
|
Chris@49
|
1554
|
Chris@49
|
1555 err_msg = " [sorry, saving/loading this type of field is currently not supported] filename = ";
|
Chris@49
|
1556
|
Chris@49
|
1557 return false;
|
Chris@49
|
1558 }
|
Chris@49
|
1559
|
Chris@49
|
1560
|
Chris@49
|
1561
|
Chris@49
|
1562 template<typename oT>
|
Chris@49
|
1563 inline
|
Chris@49
|
1564 bool
|
Chris@49
|
1565 field_aux::load(field<oT>&, std::istream&, const file_type, std::string& err_msg)
|
Chris@49
|
1566 {
|
Chris@49
|
1567 arma_extra_debug_sigprint();
|
Chris@49
|
1568
|
Chris@49
|
1569 err_msg = " [sorry, saving/loading this type of field is currently not supported] filename = ";
|
Chris@49
|
1570
|
Chris@49
|
1571 return false;
|
Chris@49
|
1572 }
|
Chris@49
|
1573
|
Chris@49
|
1574
|
Chris@49
|
1575
|
Chris@49
|
1576 template<typename eT>
|
Chris@49
|
1577 inline
|
Chris@49
|
1578 bool
|
Chris@49
|
1579 field_aux::save(const field< Mat<eT> >& x, const std::string& name, const file_type type, std::string& err_msg)
|
Chris@49
|
1580 {
|
Chris@49
|
1581 arma_extra_debug_sigprint();
|
Chris@49
|
1582
|
Chris@49
|
1583 switch(type)
|
Chris@49
|
1584 {
|
Chris@49
|
1585 case arma_binary:
|
Chris@49
|
1586 return diskio::save_arma_binary(x, name);
|
Chris@49
|
1587 break;
|
Chris@49
|
1588
|
Chris@49
|
1589 case ppm_binary:
|
Chris@49
|
1590 return diskio::save_ppm_binary(x, name);
|
Chris@49
|
1591 break;
|
Chris@49
|
1592
|
Chris@49
|
1593 default:
|
Chris@49
|
1594 err_msg = " [unsupported type] filename = ";
|
Chris@49
|
1595 return false;
|
Chris@49
|
1596 }
|
Chris@49
|
1597 }
|
Chris@49
|
1598
|
Chris@49
|
1599
|
Chris@49
|
1600
|
Chris@49
|
1601 template<typename eT>
|
Chris@49
|
1602 inline
|
Chris@49
|
1603 bool
|
Chris@49
|
1604 field_aux::save(const field< Mat<eT> >& x, std::ostream& os, const file_type type, std::string& err_msg)
|
Chris@49
|
1605 {
|
Chris@49
|
1606 arma_extra_debug_sigprint();
|
Chris@49
|
1607
|
Chris@49
|
1608 switch(type)
|
Chris@49
|
1609 {
|
Chris@49
|
1610 case arma_binary:
|
Chris@49
|
1611 return diskio::save_arma_binary(x, os);
|
Chris@49
|
1612 break;
|
Chris@49
|
1613
|
Chris@49
|
1614 case ppm_binary:
|
Chris@49
|
1615 return diskio::save_ppm_binary(x, os);
|
Chris@49
|
1616 break;
|
Chris@49
|
1617
|
Chris@49
|
1618 default:
|
Chris@49
|
1619 err_msg = " [unsupported type] filename = ";
|
Chris@49
|
1620 return false;
|
Chris@49
|
1621 }
|
Chris@49
|
1622 }
|
Chris@49
|
1623
|
Chris@49
|
1624
|
Chris@49
|
1625
|
Chris@49
|
1626 template<typename eT>
|
Chris@49
|
1627 inline
|
Chris@49
|
1628 bool
|
Chris@49
|
1629 field_aux::load(field< Mat<eT> >& x, const std::string& name, const file_type type, std::string& err_msg)
|
Chris@49
|
1630 {
|
Chris@49
|
1631 arma_extra_debug_sigprint();
|
Chris@49
|
1632
|
Chris@49
|
1633 switch(type)
|
Chris@49
|
1634 {
|
Chris@49
|
1635 case auto_detect:
|
Chris@49
|
1636 return diskio::load_auto_detect(x, name, err_msg);
|
Chris@49
|
1637 break;
|
Chris@49
|
1638
|
Chris@49
|
1639 case arma_binary:
|
Chris@49
|
1640 return diskio::load_arma_binary(x, name, err_msg);
|
Chris@49
|
1641 break;
|
Chris@49
|
1642
|
Chris@49
|
1643 case ppm_binary:
|
Chris@49
|
1644 return diskio::load_ppm_binary(x, name, err_msg);
|
Chris@49
|
1645 break;
|
Chris@49
|
1646
|
Chris@49
|
1647 default:
|
Chris@49
|
1648 err_msg = " [unsupported type] filename = ";
|
Chris@49
|
1649 return false;
|
Chris@49
|
1650 }
|
Chris@49
|
1651 }
|
Chris@49
|
1652
|
Chris@49
|
1653
|
Chris@49
|
1654
|
Chris@49
|
1655 template<typename eT>
|
Chris@49
|
1656 inline
|
Chris@49
|
1657 bool
|
Chris@49
|
1658 field_aux::load(field< Mat<eT> >& x, std::istream& is, const file_type type, std::string& err_msg)
|
Chris@49
|
1659 {
|
Chris@49
|
1660 arma_extra_debug_sigprint();
|
Chris@49
|
1661
|
Chris@49
|
1662 switch(type)
|
Chris@49
|
1663 {
|
Chris@49
|
1664 case auto_detect:
|
Chris@49
|
1665 return diskio::load_auto_detect(x, is, err_msg);
|
Chris@49
|
1666 break;
|
Chris@49
|
1667
|
Chris@49
|
1668 case arma_binary:
|
Chris@49
|
1669 return diskio::load_arma_binary(x, is, err_msg);
|
Chris@49
|
1670 break;
|
Chris@49
|
1671
|
Chris@49
|
1672 case ppm_binary:
|
Chris@49
|
1673 return diskio::load_ppm_binary(x, is, err_msg);
|
Chris@49
|
1674 break;
|
Chris@49
|
1675
|
Chris@49
|
1676 default:
|
Chris@49
|
1677 err_msg = " [unsupported type] filename = ";
|
Chris@49
|
1678 return false;
|
Chris@49
|
1679 }
|
Chris@49
|
1680 }
|
Chris@49
|
1681
|
Chris@49
|
1682
|
Chris@49
|
1683
|
Chris@49
|
1684 template<typename eT>
|
Chris@49
|
1685 inline
|
Chris@49
|
1686 bool
|
Chris@49
|
1687 field_aux::save(const field< Col<eT> >& x, const std::string& name, const file_type type, std::string& err_msg)
|
Chris@49
|
1688 {
|
Chris@49
|
1689 arma_extra_debug_sigprint();
|
Chris@49
|
1690
|
Chris@49
|
1691 switch(type)
|
Chris@49
|
1692 {
|
Chris@49
|
1693 case arma_binary:
|
Chris@49
|
1694 return diskio::save_arma_binary(x, name);
|
Chris@49
|
1695 break;
|
Chris@49
|
1696
|
Chris@49
|
1697 case ppm_binary:
|
Chris@49
|
1698 return diskio::save_ppm_binary(x, name);
|
Chris@49
|
1699 break;
|
Chris@49
|
1700
|
Chris@49
|
1701 default:
|
Chris@49
|
1702 err_msg = " [unsupported type] filename = ";
|
Chris@49
|
1703 return false;
|
Chris@49
|
1704 }
|
Chris@49
|
1705 }
|
Chris@49
|
1706
|
Chris@49
|
1707
|
Chris@49
|
1708
|
Chris@49
|
1709 template<typename eT>
|
Chris@49
|
1710 inline
|
Chris@49
|
1711 bool
|
Chris@49
|
1712 field_aux::save(const field< Col<eT> >& x, std::ostream& os, const file_type type, std::string& err_msg)
|
Chris@49
|
1713 {
|
Chris@49
|
1714 arma_extra_debug_sigprint();
|
Chris@49
|
1715
|
Chris@49
|
1716 switch(type)
|
Chris@49
|
1717 {
|
Chris@49
|
1718 case arma_binary:
|
Chris@49
|
1719 return diskio::save_arma_binary(x, os);
|
Chris@49
|
1720 break;
|
Chris@49
|
1721
|
Chris@49
|
1722 case ppm_binary:
|
Chris@49
|
1723 return diskio::save_ppm_binary(x, os);
|
Chris@49
|
1724 break;
|
Chris@49
|
1725
|
Chris@49
|
1726 default:
|
Chris@49
|
1727 err_msg = " [unsupported type] filename = ";
|
Chris@49
|
1728 return false;
|
Chris@49
|
1729 }
|
Chris@49
|
1730 }
|
Chris@49
|
1731
|
Chris@49
|
1732
|
Chris@49
|
1733
|
Chris@49
|
1734 template<typename eT>
|
Chris@49
|
1735 inline
|
Chris@49
|
1736 bool
|
Chris@49
|
1737 field_aux::load(field< Col<eT> >& x, const std::string& name, const file_type type, std::string& err_msg)
|
Chris@49
|
1738 {
|
Chris@49
|
1739 arma_extra_debug_sigprint();
|
Chris@49
|
1740
|
Chris@49
|
1741 switch(type)
|
Chris@49
|
1742 {
|
Chris@49
|
1743 case auto_detect:
|
Chris@49
|
1744 return diskio::load_auto_detect(x, name, err_msg);
|
Chris@49
|
1745 break;
|
Chris@49
|
1746
|
Chris@49
|
1747 case arma_binary:
|
Chris@49
|
1748 return diskio::load_arma_binary(x, name, err_msg);
|
Chris@49
|
1749 break;
|
Chris@49
|
1750
|
Chris@49
|
1751 case ppm_binary:
|
Chris@49
|
1752 return diskio::load_ppm_binary(x, name, err_msg);
|
Chris@49
|
1753 break;
|
Chris@49
|
1754
|
Chris@49
|
1755 default:
|
Chris@49
|
1756 err_msg = " [unsupported type] filename = ";
|
Chris@49
|
1757 return false;
|
Chris@49
|
1758 }
|
Chris@49
|
1759 }
|
Chris@49
|
1760
|
Chris@49
|
1761
|
Chris@49
|
1762
|
Chris@49
|
1763 template<typename eT>
|
Chris@49
|
1764 inline
|
Chris@49
|
1765 bool
|
Chris@49
|
1766 field_aux::load(field< Col<eT> >& x, std::istream& is, const file_type type, std::string& err_msg)
|
Chris@49
|
1767 {
|
Chris@49
|
1768 arma_extra_debug_sigprint();
|
Chris@49
|
1769
|
Chris@49
|
1770 switch(type)
|
Chris@49
|
1771 {
|
Chris@49
|
1772 case auto_detect:
|
Chris@49
|
1773 return diskio::load_auto_detect(x, is, err_msg);
|
Chris@49
|
1774 break;
|
Chris@49
|
1775
|
Chris@49
|
1776 case arma_binary:
|
Chris@49
|
1777 return diskio::load_arma_binary(x, is, err_msg);
|
Chris@49
|
1778 break;
|
Chris@49
|
1779
|
Chris@49
|
1780 case ppm_binary:
|
Chris@49
|
1781 return diskio::load_ppm_binary(x, is, err_msg);
|
Chris@49
|
1782 break;
|
Chris@49
|
1783
|
Chris@49
|
1784 default:
|
Chris@49
|
1785 err_msg = " [unsupported type] filename = ";
|
Chris@49
|
1786 return false;
|
Chris@49
|
1787 }
|
Chris@49
|
1788 }
|
Chris@49
|
1789
|
Chris@49
|
1790
|
Chris@49
|
1791
|
Chris@49
|
1792 template<typename eT>
|
Chris@49
|
1793 inline
|
Chris@49
|
1794 bool
|
Chris@49
|
1795 field_aux::save(const field< Row<eT> >& x, const std::string& name, const file_type type, std::string& err_msg)
|
Chris@49
|
1796 {
|
Chris@49
|
1797 arma_extra_debug_sigprint();
|
Chris@49
|
1798
|
Chris@49
|
1799 switch(type)
|
Chris@49
|
1800 {
|
Chris@49
|
1801 case arma_binary:
|
Chris@49
|
1802 return diskio::save_arma_binary(x, name, err_msg);
|
Chris@49
|
1803 break;
|
Chris@49
|
1804
|
Chris@49
|
1805 case ppm_binary:
|
Chris@49
|
1806 return diskio::save_ppm_binary(x, name, err_msg);
|
Chris@49
|
1807 break;
|
Chris@49
|
1808
|
Chris@49
|
1809 default:
|
Chris@49
|
1810 err_msg = " [unsupported type] filename = ";
|
Chris@49
|
1811 return false;
|
Chris@49
|
1812 }
|
Chris@49
|
1813 }
|
Chris@49
|
1814
|
Chris@49
|
1815
|
Chris@49
|
1816
|
Chris@49
|
1817 template<typename eT>
|
Chris@49
|
1818 inline
|
Chris@49
|
1819 bool
|
Chris@49
|
1820 field_aux::save(const field< Row<eT> >& x, std::ostream& os, const file_type type, std::string& err_msg)
|
Chris@49
|
1821 {
|
Chris@49
|
1822 arma_extra_debug_sigprint();
|
Chris@49
|
1823
|
Chris@49
|
1824 switch(type)
|
Chris@49
|
1825 {
|
Chris@49
|
1826 case arma_binary:
|
Chris@49
|
1827 return diskio::save_arma_binary(x, os, err_msg);
|
Chris@49
|
1828 break;
|
Chris@49
|
1829
|
Chris@49
|
1830 case ppm_binary:
|
Chris@49
|
1831 return diskio::save_ppm_binary(x, os, err_msg);
|
Chris@49
|
1832 break;
|
Chris@49
|
1833
|
Chris@49
|
1834 default:
|
Chris@49
|
1835 err_msg = " [unsupported type] filename = ";
|
Chris@49
|
1836 return false;
|
Chris@49
|
1837 }
|
Chris@49
|
1838 }
|
Chris@49
|
1839
|
Chris@49
|
1840
|
Chris@49
|
1841
|
Chris@49
|
1842 template<typename eT>
|
Chris@49
|
1843 inline
|
Chris@49
|
1844 bool
|
Chris@49
|
1845 field_aux::load(field< Row<eT> >& x, const std::string& name, const file_type type, std::string& err_msg)
|
Chris@49
|
1846 {
|
Chris@49
|
1847 arma_extra_debug_sigprint();
|
Chris@49
|
1848
|
Chris@49
|
1849 switch(type)
|
Chris@49
|
1850 {
|
Chris@49
|
1851 case auto_detect:
|
Chris@49
|
1852 return diskio::load_auto_detect(x, name, err_msg);
|
Chris@49
|
1853 break;
|
Chris@49
|
1854
|
Chris@49
|
1855 case arma_binary:
|
Chris@49
|
1856 return diskio::load_arma_binary(x, name, err_msg);
|
Chris@49
|
1857 break;
|
Chris@49
|
1858
|
Chris@49
|
1859 case ppm_binary:
|
Chris@49
|
1860 return diskio::load_ppm_binary(x, name, err_msg);
|
Chris@49
|
1861 break;
|
Chris@49
|
1862
|
Chris@49
|
1863 default:
|
Chris@49
|
1864 err_msg = " [unsupported type] filename = ";
|
Chris@49
|
1865 return false;
|
Chris@49
|
1866 }
|
Chris@49
|
1867 }
|
Chris@49
|
1868
|
Chris@49
|
1869
|
Chris@49
|
1870
|
Chris@49
|
1871 template<typename eT>
|
Chris@49
|
1872 inline
|
Chris@49
|
1873 bool
|
Chris@49
|
1874 field_aux::load(field< Row<eT> >& x, std::istream& is, const file_type type, std::string& err_msg)
|
Chris@49
|
1875 {
|
Chris@49
|
1876 arma_extra_debug_sigprint();
|
Chris@49
|
1877
|
Chris@49
|
1878 switch(type)
|
Chris@49
|
1879 {
|
Chris@49
|
1880 case auto_detect:
|
Chris@49
|
1881 return diskio::load_auto_detect(x, is, err_msg);
|
Chris@49
|
1882 break;
|
Chris@49
|
1883
|
Chris@49
|
1884 case arma_binary:
|
Chris@49
|
1885 return diskio::load_arma_binary(x, is, err_msg);
|
Chris@49
|
1886 break;
|
Chris@49
|
1887
|
Chris@49
|
1888 case ppm_binary:
|
Chris@49
|
1889 return diskio::load_ppm_binary(x, is, err_msg);
|
Chris@49
|
1890 break;
|
Chris@49
|
1891
|
Chris@49
|
1892 default:
|
Chris@49
|
1893 err_msg = " [unsupported type] filename = ";
|
Chris@49
|
1894 return false;
|
Chris@49
|
1895 }
|
Chris@49
|
1896 }
|
Chris@49
|
1897
|
Chris@49
|
1898
|
Chris@49
|
1899
|
Chris@49
|
1900 template<typename eT>
|
Chris@49
|
1901 inline
|
Chris@49
|
1902 bool
|
Chris@49
|
1903 field_aux::save(const field< Cube<eT> >& x, const std::string& name, const file_type type, std::string& err_msg)
|
Chris@49
|
1904 {
|
Chris@49
|
1905 arma_extra_debug_sigprint();
|
Chris@49
|
1906
|
Chris@49
|
1907 switch(type)
|
Chris@49
|
1908 {
|
Chris@49
|
1909 case arma_binary:
|
Chris@49
|
1910 return diskio::save_arma_binary(x, name, err_msg);
|
Chris@49
|
1911 break;
|
Chris@49
|
1912
|
Chris@49
|
1913 case ppm_binary:
|
Chris@49
|
1914 return diskio::save_ppm_binary(x, name, err_msg);
|
Chris@49
|
1915 break;
|
Chris@49
|
1916
|
Chris@49
|
1917 default:
|
Chris@49
|
1918 err_msg = " [unsupported type] filename = ";
|
Chris@49
|
1919 return false;
|
Chris@49
|
1920 }
|
Chris@49
|
1921 }
|
Chris@49
|
1922
|
Chris@49
|
1923
|
Chris@49
|
1924
|
Chris@49
|
1925 template<typename eT>
|
Chris@49
|
1926 inline
|
Chris@49
|
1927 bool
|
Chris@49
|
1928 field_aux::save(const field< Cube<eT> >& x, std::ostream& os, const file_type type, std::string& err_msg)
|
Chris@49
|
1929 {
|
Chris@49
|
1930 arma_extra_debug_sigprint();
|
Chris@49
|
1931
|
Chris@49
|
1932 switch(type)
|
Chris@49
|
1933 {
|
Chris@49
|
1934 case arma_binary:
|
Chris@49
|
1935 return diskio::save_arma_binary(x, os, err_msg);
|
Chris@49
|
1936 break;
|
Chris@49
|
1937
|
Chris@49
|
1938 case ppm_binary:
|
Chris@49
|
1939 return diskio::save_ppm_binary(x, os, err_msg);
|
Chris@49
|
1940 break;
|
Chris@49
|
1941
|
Chris@49
|
1942 default:
|
Chris@49
|
1943 err_msg = " [unsupported type] filename = ";
|
Chris@49
|
1944 return false;
|
Chris@49
|
1945 }
|
Chris@49
|
1946 }
|
Chris@49
|
1947
|
Chris@49
|
1948
|
Chris@49
|
1949
|
Chris@49
|
1950 template<typename eT>
|
Chris@49
|
1951 inline
|
Chris@49
|
1952 bool
|
Chris@49
|
1953 field_aux::load(field< Cube<eT> >& x, const std::string& name, const file_type type, std::string& err_msg)
|
Chris@49
|
1954 {
|
Chris@49
|
1955 arma_extra_debug_sigprint();
|
Chris@49
|
1956
|
Chris@49
|
1957 switch(type)
|
Chris@49
|
1958 {
|
Chris@49
|
1959 case auto_detect:
|
Chris@49
|
1960 return diskio::load_auto_detect(x, name, err_msg);
|
Chris@49
|
1961 break;
|
Chris@49
|
1962
|
Chris@49
|
1963 case arma_binary:
|
Chris@49
|
1964 return diskio::load_arma_binary(x, name, err_msg);
|
Chris@49
|
1965 break;
|
Chris@49
|
1966
|
Chris@49
|
1967 case ppm_binary:
|
Chris@49
|
1968 return diskio::load_ppm_binary(x, name, err_msg);
|
Chris@49
|
1969 break;
|
Chris@49
|
1970
|
Chris@49
|
1971 default:
|
Chris@49
|
1972 err_msg = " [unsupported type] filename = ";
|
Chris@49
|
1973 return false;
|
Chris@49
|
1974 }
|
Chris@49
|
1975 }
|
Chris@49
|
1976
|
Chris@49
|
1977
|
Chris@49
|
1978
|
Chris@49
|
1979 template<typename eT>
|
Chris@49
|
1980 inline
|
Chris@49
|
1981 bool
|
Chris@49
|
1982 field_aux::load(field< Cube<eT> >& x, std::istream& is, const file_type type, std::string& err_msg)
|
Chris@49
|
1983 {
|
Chris@49
|
1984 arma_extra_debug_sigprint();
|
Chris@49
|
1985
|
Chris@49
|
1986 switch(type)
|
Chris@49
|
1987 {
|
Chris@49
|
1988 case auto_detect:
|
Chris@49
|
1989 return diskio::load_auto_detect(x, is, err_msg);
|
Chris@49
|
1990 break;
|
Chris@49
|
1991
|
Chris@49
|
1992 case arma_binary:
|
Chris@49
|
1993 return diskio::load_arma_binary(x, is, err_msg);
|
Chris@49
|
1994 break;
|
Chris@49
|
1995
|
Chris@49
|
1996 case ppm_binary:
|
Chris@49
|
1997 return diskio::load_ppm_binary(x, is, err_msg);
|
Chris@49
|
1998 break;
|
Chris@49
|
1999
|
Chris@49
|
2000 default:
|
Chris@49
|
2001 err_msg = " [unsupported type] filename = ";
|
Chris@49
|
2002 return false;
|
Chris@49
|
2003 }
|
Chris@49
|
2004 }
|
Chris@49
|
2005
|
Chris@49
|
2006
|
Chris@49
|
2007
|
Chris@49
|
2008 inline
|
Chris@49
|
2009 bool
|
Chris@49
|
2010 field_aux::save(const field< std::string >& x, const std::string& name, const file_type type, std::string& err_msg)
|
Chris@49
|
2011 {
|
Chris@49
|
2012 arma_extra_debug_sigprint();
|
Chris@49
|
2013
|
Chris@49
|
2014 arma_ignore(type);
|
Chris@49
|
2015
|
Chris@49
|
2016 err_msg.clear();
|
Chris@49
|
2017
|
Chris@49
|
2018 return diskio::save_std_string(x, name);
|
Chris@49
|
2019 }
|
Chris@49
|
2020
|
Chris@49
|
2021
|
Chris@49
|
2022
|
Chris@49
|
2023 inline
|
Chris@49
|
2024 bool
|
Chris@49
|
2025 field_aux::save(const field< std::string >& x, std::ostream& os, const file_type type, std::string& err_msg)
|
Chris@49
|
2026 {
|
Chris@49
|
2027 arma_extra_debug_sigprint();
|
Chris@49
|
2028
|
Chris@49
|
2029 arma_ignore(type);
|
Chris@49
|
2030
|
Chris@49
|
2031 err_msg.clear();
|
Chris@49
|
2032
|
Chris@49
|
2033 return diskio::save_std_string(x, os);
|
Chris@49
|
2034 }
|
Chris@49
|
2035
|
Chris@49
|
2036
|
Chris@49
|
2037
|
Chris@49
|
2038 inline
|
Chris@49
|
2039 bool
|
Chris@49
|
2040 field_aux::load(field< std::string >& x, const std::string& name, const file_type type, std::string& err_msg)
|
Chris@49
|
2041 {
|
Chris@49
|
2042 arma_extra_debug_sigprint();
|
Chris@49
|
2043
|
Chris@49
|
2044 arma_ignore(type);
|
Chris@49
|
2045
|
Chris@49
|
2046 return diskio::load_std_string(x, name, err_msg);
|
Chris@49
|
2047 }
|
Chris@49
|
2048
|
Chris@49
|
2049
|
Chris@49
|
2050
|
Chris@49
|
2051 inline
|
Chris@49
|
2052 bool
|
Chris@49
|
2053 field_aux::load(field< std::string >& x, std::istream& is, const file_type type, std::string& err_msg)
|
Chris@49
|
2054 {
|
Chris@49
|
2055 arma_extra_debug_sigprint();
|
Chris@49
|
2056
|
Chris@49
|
2057 arma_ignore(type);
|
Chris@49
|
2058
|
Chris@49
|
2059 return diskio::load_std_string(x, is, err_msg);
|
Chris@49
|
2060 }
|
Chris@49
|
2061
|
Chris@49
|
2062
|
Chris@49
|
2063
|
Chris@49
|
2064 #ifdef ARMA_EXTRA_FIELD_MEAT
|
Chris@49
|
2065 #include ARMA_INCFILE_WRAP(ARMA_EXTRA_FIELD_MEAT)
|
Chris@49
|
2066 #endif
|
Chris@49
|
2067
|
Chris@49
|
2068
|
Chris@49
|
2069
|
Chris@49
|
2070 //! @}
|