annotate armadillo-3.900.4/include/armadillo_bits/field_meat.hpp @ 84:55a047986812 tip

Update library URI so as not to be document-local
author Chris Cannam
date Wed, 22 Apr 2020 14:21:57 +0100
parents 1ec0e2823891
children
rev   line source
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 //! @}