annotate armadillo-3.900.4/include/armadillo_bits/Col_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-2013 NICTA (www.nicta.com.au)
Chris@49 2 // Copyright (C) 2008-2013 Conrad Sanderson
Chris@49 3 //
Chris@49 4 // This Source Code Form is subject to the terms of the Mozilla Public
Chris@49 5 // License, v. 2.0. If a copy of the MPL was not distributed with this
Chris@49 6 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
Chris@49 7
Chris@49 8
Chris@49 9 //! \addtogroup Col
Chris@49 10 //! @{
Chris@49 11
Chris@49 12
Chris@49 13 //! construct an empty column vector
Chris@49 14 template<typename eT>
Chris@49 15 inline
Chris@49 16 Col<eT>::Col()
Chris@49 17 : Mat<eT>(arma_vec_indicator(), 1)
Chris@49 18 {
Chris@49 19 arma_extra_debug_sigprint();
Chris@49 20 }
Chris@49 21
Chris@49 22
Chris@49 23
Chris@49 24 template<typename eT>
Chris@49 25 inline
Chris@49 26 Col<eT>::Col(const Col<eT>& X)
Chris@49 27 : Mat<eT>(arma_vec_indicator(), X.n_elem, 1, 1)
Chris@49 28 {
Chris@49 29 arma_extra_debug_sigprint();
Chris@49 30
Chris@49 31 arrayops::copy((*this).memptr(), X.memptr(), X.n_elem);
Chris@49 32 }
Chris@49 33
Chris@49 34
Chris@49 35
Chris@49 36 //! construct a column vector with the specified number of n_elem
Chris@49 37 template<typename eT>
Chris@49 38 inline
Chris@49 39 Col<eT>::Col(const uword in_n_elem)
Chris@49 40 : Mat<eT>(arma_vec_indicator(), in_n_elem, 1, 1)
Chris@49 41 {
Chris@49 42 arma_extra_debug_sigprint();
Chris@49 43 }
Chris@49 44
Chris@49 45
Chris@49 46
Chris@49 47 template<typename eT>
Chris@49 48 inline
Chris@49 49 Col<eT>::Col(const uword in_n_rows, const uword in_n_cols)
Chris@49 50 : Mat<eT>(arma_vec_indicator(), 0, 0, 1)
Chris@49 51 {
Chris@49 52 arma_extra_debug_sigprint();
Chris@49 53
Chris@49 54 Mat<eT>::init_warm(in_n_rows, in_n_cols);
Chris@49 55 }
Chris@49 56
Chris@49 57
Chris@49 58
Chris@49 59 //! construct a column vector from specified text
Chris@49 60 template<typename eT>
Chris@49 61 inline
Chris@49 62 Col<eT>::Col(const char* text)
Chris@49 63 {
Chris@49 64 arma_extra_debug_sigprint();
Chris@49 65
Chris@49 66 access::rw(Mat<eT>::vec_state) = 2;
Chris@49 67
Chris@49 68 Mat<eT>::operator=(text);
Chris@49 69
Chris@49 70 std::swap( access::rw(Mat<eT>::n_rows), access::rw(Mat<eT>::n_cols) );
Chris@49 71
Chris@49 72 access::rw(Mat<eT>::vec_state) = 1;
Chris@49 73 }
Chris@49 74
Chris@49 75
Chris@49 76
Chris@49 77 //! construct a column vector from specified text
Chris@49 78 template<typename eT>
Chris@49 79 inline
Chris@49 80 const Col<eT>&
Chris@49 81 Col<eT>::operator=(const char* text)
Chris@49 82 {
Chris@49 83 arma_extra_debug_sigprint();
Chris@49 84
Chris@49 85 access::rw(Mat<eT>::vec_state) = 2;
Chris@49 86
Chris@49 87 Mat<eT>::operator=(text);
Chris@49 88
Chris@49 89 std::swap( access::rw(Mat<eT>::n_rows), access::rw(Mat<eT>::n_cols) );
Chris@49 90
Chris@49 91 access::rw(Mat<eT>::vec_state) = 1;
Chris@49 92
Chris@49 93 return *this;
Chris@49 94 }
Chris@49 95
Chris@49 96
Chris@49 97
Chris@49 98 //! construct a column vector from specified text
Chris@49 99 template<typename eT>
Chris@49 100 inline
Chris@49 101 Col<eT>::Col(const std::string& text)
Chris@49 102 {
Chris@49 103 arma_extra_debug_sigprint();
Chris@49 104
Chris@49 105 access::rw(Mat<eT>::vec_state) = 2;
Chris@49 106
Chris@49 107 Mat<eT>::operator=(text);
Chris@49 108
Chris@49 109 std::swap( access::rw(Mat<eT>::n_rows), access::rw(Mat<eT>::n_cols) );
Chris@49 110
Chris@49 111 access::rw(Mat<eT>::vec_state) = 1;
Chris@49 112 }
Chris@49 113
Chris@49 114
Chris@49 115
Chris@49 116 //! construct a column vector from specified text
Chris@49 117 template<typename eT>
Chris@49 118 inline
Chris@49 119 const Col<eT>&
Chris@49 120 Col<eT>::operator=(const std::string& text)
Chris@49 121 {
Chris@49 122 arma_extra_debug_sigprint();
Chris@49 123
Chris@49 124 access::rw(Mat<eT>::vec_state) = 2;
Chris@49 125
Chris@49 126 Mat<eT>::operator=(text);
Chris@49 127
Chris@49 128 std::swap( access::rw(Mat<eT>::n_rows), access::rw(Mat<eT>::n_cols) );
Chris@49 129
Chris@49 130 access::rw(Mat<eT>::vec_state) = 1;
Chris@49 131
Chris@49 132 return *this;
Chris@49 133 }
Chris@49 134
Chris@49 135
Chris@49 136
Chris@49 137 //! create a column vector from std::vector
Chris@49 138 template<typename eT>
Chris@49 139 inline
Chris@49 140 Col<eT>::Col(const std::vector<eT>& x)
Chris@49 141 : Mat<eT>(arma_vec_indicator(), uword(x.size()), 1, 1)
Chris@49 142 {
Chris@49 143 arma_extra_debug_sigprint_this(this);
Chris@49 144
Chris@49 145 if(x.size() > 0)
Chris@49 146 {
Chris@49 147 arrayops::copy( Mat<eT>::memptr(), &(x[0]), uword(x.size()) );
Chris@49 148 }
Chris@49 149 }
Chris@49 150
Chris@49 151
Chris@49 152
Chris@49 153 //! create a column vector from std::vector
Chris@49 154 template<typename eT>
Chris@49 155 inline
Chris@49 156 const Col<eT>&
Chris@49 157 Col<eT>::operator=(const std::vector<eT>& x)
Chris@49 158 {
Chris@49 159 arma_extra_debug_sigprint();
Chris@49 160
Chris@49 161 Mat<eT>::init_warm(uword(x.size()), 1);
Chris@49 162
Chris@49 163 if(x.size() > 0)
Chris@49 164 {
Chris@49 165 arrayops::copy( Mat<eT>::memptr(), &(x[0]), uword(x.size()) );
Chris@49 166 }
Chris@49 167
Chris@49 168 return *this;
Chris@49 169 }
Chris@49 170
Chris@49 171
Chris@49 172
Chris@49 173 #if defined(ARMA_USE_CXX11)
Chris@49 174
Chris@49 175 template<typename eT>
Chris@49 176 inline
Chris@49 177 Col<eT>::Col(const std::initializer_list<eT>& list)
Chris@49 178 {
Chris@49 179 arma_extra_debug_sigprint();
Chris@49 180
Chris@49 181 access::rw(Mat<eT>::vec_state) = 2;
Chris@49 182
Chris@49 183 Mat<eT>::operator=(list);
Chris@49 184
Chris@49 185 std::swap( access::rw(Mat<eT>::n_rows), access::rw(Mat<eT>::n_cols) );
Chris@49 186
Chris@49 187 access::rw(Mat<eT>::vec_state) = 1;
Chris@49 188 }
Chris@49 189
Chris@49 190
Chris@49 191
Chris@49 192 template<typename eT>
Chris@49 193 inline
Chris@49 194 const Col<eT>&
Chris@49 195 Col<eT>::operator=(const std::initializer_list<eT>& list)
Chris@49 196 {
Chris@49 197 arma_extra_debug_sigprint();
Chris@49 198
Chris@49 199 access::rw(Mat<eT>::vec_state) = 2;
Chris@49 200
Chris@49 201 Mat<eT>::operator=(list);
Chris@49 202
Chris@49 203 std::swap( access::rw(Mat<eT>::n_rows), access::rw(Mat<eT>::n_cols) );
Chris@49 204
Chris@49 205 access::rw(Mat<eT>::vec_state) = 1;
Chris@49 206
Chris@49 207 return *this;
Chris@49 208 }
Chris@49 209
Chris@49 210 #endif
Chris@49 211
Chris@49 212
Chris@49 213
Chris@49 214 template<typename eT>
Chris@49 215 inline
Chris@49 216 Col<eT>::Col(const SpCol<eT>& X)
Chris@49 217 : Mat<eT>(arma_vec_indicator(), X.n_elem, 1, 1)
Chris@49 218 {
Chris@49 219 arma_extra_debug_sigprint_this(this);
Chris@49 220
Chris@49 221 arrayops::inplace_set(Mat<eT>::memptr(), eT(0), X.n_elem);
Chris@49 222
Chris@49 223 for(typename SpCol<eT>::const_iterator it = X.begin(); it != X.end(); ++it)
Chris@49 224 at(it.row()) = (*it);
Chris@49 225 }
Chris@49 226
Chris@49 227
Chris@49 228
Chris@49 229 template<typename eT>
Chris@49 230 inline
Chris@49 231 const Col<eT>&
Chris@49 232 Col<eT>::operator=(const eT val)
Chris@49 233 {
Chris@49 234 arma_extra_debug_sigprint();
Chris@49 235
Chris@49 236 Mat<eT>::operator=(val);
Chris@49 237
Chris@49 238 return *this;
Chris@49 239 }
Chris@49 240
Chris@49 241
Chris@49 242
Chris@49 243 template<typename eT>
Chris@49 244 template<typename T1>
Chris@49 245 inline
Chris@49 246 Col<eT>::Col(const Base<eT,T1>& X)
Chris@49 247 : Mat<eT>(arma_vec_indicator(), 1)
Chris@49 248 {
Chris@49 249 arma_extra_debug_sigprint();
Chris@49 250
Chris@49 251 Mat<eT>::operator=(X.get_ref());
Chris@49 252 }
Chris@49 253
Chris@49 254
Chris@49 255
Chris@49 256 template<typename eT>
Chris@49 257 template<typename T1>
Chris@49 258 inline
Chris@49 259 const Col<eT>&
Chris@49 260 Col<eT>::operator=(const Base<eT,T1>& X)
Chris@49 261 {
Chris@49 262 arma_extra_debug_sigprint();
Chris@49 263
Chris@49 264 Mat<eT>::operator=(X.get_ref());
Chris@49 265
Chris@49 266 return *this;
Chris@49 267 }
Chris@49 268
Chris@49 269
Chris@49 270
Chris@49 271 //! construct a column vector from a given auxiliary array of eTs
Chris@49 272 template<typename eT>
Chris@49 273 inline
Chris@49 274 Col<eT>::Col(eT* aux_mem, const uword aux_length, const bool copy_aux_mem, const bool strict)
Chris@49 275 : Mat<eT>(aux_mem, aux_length, 1, copy_aux_mem, strict)
Chris@49 276 {
Chris@49 277 arma_extra_debug_sigprint();
Chris@49 278
Chris@49 279 access::rw(Mat<eT>::vec_state) = 1;
Chris@49 280 }
Chris@49 281
Chris@49 282
Chris@49 283
Chris@49 284 //! construct a column vector from a given auxiliary array of eTs
Chris@49 285 template<typename eT>
Chris@49 286 inline
Chris@49 287 Col<eT>::Col(const eT* aux_mem, const uword aux_length)
Chris@49 288 : Mat<eT>(aux_mem, aux_length, 1)
Chris@49 289 {
Chris@49 290 arma_extra_debug_sigprint();
Chris@49 291
Chris@49 292 access::rw(Mat<eT>::vec_state) = 1;
Chris@49 293 }
Chris@49 294
Chris@49 295
Chris@49 296
Chris@49 297 template<typename eT>
Chris@49 298 template<typename T1, typename T2>
Chris@49 299 inline
Chris@49 300 Col<eT>::Col
Chris@49 301 (
Chris@49 302 const Base<typename Col<eT>::pod_type, T1>& A,
Chris@49 303 const Base<typename Col<eT>::pod_type, T2>& B
Chris@49 304 )
Chris@49 305 {
Chris@49 306 arma_extra_debug_sigprint();
Chris@49 307
Chris@49 308 access::rw(Mat<eT>::vec_state) = 1;
Chris@49 309
Chris@49 310 Mat<eT>::init(A,B);
Chris@49 311 }
Chris@49 312
Chris@49 313
Chris@49 314
Chris@49 315 template<typename eT>
Chris@49 316 template<typename T1>
Chris@49 317 inline
Chris@49 318 Col<eT>::Col(const BaseCube<eT,T1>& X)
Chris@49 319 {
Chris@49 320 arma_extra_debug_sigprint();
Chris@49 321
Chris@49 322 access::rw(Mat<eT>::vec_state) = 1;
Chris@49 323
Chris@49 324 Mat<eT>::operator=(X);
Chris@49 325 }
Chris@49 326
Chris@49 327
Chris@49 328
Chris@49 329 template<typename eT>
Chris@49 330 template<typename T1>
Chris@49 331 inline
Chris@49 332 const Col<eT>&
Chris@49 333 Col<eT>::operator=(const BaseCube<eT,T1>& X)
Chris@49 334 {
Chris@49 335 arma_extra_debug_sigprint();
Chris@49 336
Chris@49 337 Mat<eT>::operator=(X);
Chris@49 338
Chris@49 339 return *this;
Chris@49 340 }
Chris@49 341
Chris@49 342
Chris@49 343
Chris@49 344 template<typename eT>
Chris@49 345 inline
Chris@49 346 Col<eT>::Col(const subview_cube<eT>& X)
Chris@49 347 {
Chris@49 348 arma_extra_debug_sigprint();
Chris@49 349
Chris@49 350 access::rw(Mat<eT>::vec_state) = 1;
Chris@49 351
Chris@49 352 Mat<eT>::operator=(X);
Chris@49 353 }
Chris@49 354
Chris@49 355
Chris@49 356
Chris@49 357 template<typename eT>
Chris@49 358 inline
Chris@49 359 const Col<eT>&
Chris@49 360 Col<eT>::operator=(const subview_cube<eT>& X)
Chris@49 361 {
Chris@49 362 arma_extra_debug_sigprint();
Chris@49 363
Chris@49 364 Mat<eT>::operator=(X);
Chris@49 365
Chris@49 366 return *this;
Chris@49 367 }
Chris@49 368
Chris@49 369
Chris@49 370
Chris@49 371 template<typename eT>
Chris@49 372 inline
Chris@49 373 mat_injector< Col<eT> >
Chris@49 374 Col<eT>::operator<<(const eT val)
Chris@49 375 {
Chris@49 376 return mat_injector< Col<eT> >(*this, val);
Chris@49 377 }
Chris@49 378
Chris@49 379
Chris@49 380
Chris@49 381 template<typename eT>
Chris@49 382 arma_inline
Chris@49 383 const Op<Col<eT>,op_htrans>
Chris@49 384 Col<eT>::t() const
Chris@49 385 {
Chris@49 386 return Op<Col<eT>,op_htrans>(*this);
Chris@49 387 }
Chris@49 388
Chris@49 389
Chris@49 390
Chris@49 391 template<typename eT>
Chris@49 392 arma_inline
Chris@49 393 const Op<Col<eT>,op_htrans>
Chris@49 394 Col<eT>::ht() const
Chris@49 395 {
Chris@49 396 return Op<Col<eT>,op_htrans>(*this);
Chris@49 397 }
Chris@49 398
Chris@49 399
Chris@49 400
Chris@49 401 template<typename eT>
Chris@49 402 arma_inline
Chris@49 403 const Op<Col<eT>,op_strans>
Chris@49 404 Col<eT>::st() const
Chris@49 405 {
Chris@49 406 return Op<Col<eT>,op_strans>(*this);
Chris@49 407 }
Chris@49 408
Chris@49 409
Chris@49 410
Chris@49 411 template<typename eT>
Chris@49 412 arma_inline
Chris@49 413 eT&
Chris@49 414 Col<eT>::row(const uword row_num)
Chris@49 415 {
Chris@49 416 arma_debug_check( (row_num >= Mat<eT>::n_rows), "Col::row(): index out of bounds" );
Chris@49 417
Chris@49 418 return access::rw(Mat<eT>::mem[row_num]);
Chris@49 419 }
Chris@49 420
Chris@49 421
Chris@49 422
Chris@49 423 template<typename eT>
Chris@49 424 arma_inline
Chris@49 425 eT
Chris@49 426 Col<eT>::row(const uword row_num) const
Chris@49 427 {
Chris@49 428 arma_debug_check( (row_num >= Mat<eT>::n_rows), "Col::row(): index out of bounds" );
Chris@49 429
Chris@49 430 return Mat<eT>::mem[row_num];
Chris@49 431 }
Chris@49 432
Chris@49 433
Chris@49 434
Chris@49 435 template<typename eT>
Chris@49 436 arma_inline
Chris@49 437 subview_col<eT>
Chris@49 438 Col<eT>::rows(const uword in_row1, const uword in_row2)
Chris@49 439 {
Chris@49 440 arma_extra_debug_sigprint();
Chris@49 441
Chris@49 442 arma_debug_check( ( (in_row1 > in_row2) || (in_row2 >= Mat<eT>::n_rows) ), "Col::rows(): indices out of bounds or incorrectly used");
Chris@49 443
Chris@49 444 const uword subview_n_rows = in_row2 - in_row1 + 1;
Chris@49 445
Chris@49 446 return subview_col<eT>(*this, 0, in_row1, subview_n_rows);
Chris@49 447 }
Chris@49 448
Chris@49 449
Chris@49 450
Chris@49 451 template<typename eT>
Chris@49 452 arma_inline
Chris@49 453 const subview_col<eT>
Chris@49 454 Col<eT>::rows(const uword in_row1, const uword in_row2) const
Chris@49 455 {
Chris@49 456 arma_extra_debug_sigprint();
Chris@49 457
Chris@49 458 arma_debug_check( ( (in_row1 > in_row2) || (in_row2 >= Mat<eT>::n_rows) ), "Col::rows(): indices out of bounds or incorrectly used");
Chris@49 459
Chris@49 460 const uword subview_n_rows = in_row2 - in_row1 + 1;
Chris@49 461
Chris@49 462 return subview_col<eT>(*this, 0, in_row1, subview_n_rows);
Chris@49 463 }
Chris@49 464
Chris@49 465
Chris@49 466
Chris@49 467 template<typename eT>
Chris@49 468 arma_inline
Chris@49 469 subview_col<eT>
Chris@49 470 Col<eT>::subvec(const uword in_row1, const uword in_row2)
Chris@49 471 {
Chris@49 472 arma_extra_debug_sigprint();
Chris@49 473
Chris@49 474 arma_debug_check( ( (in_row1 > in_row2) || (in_row2 >= Mat<eT>::n_rows) ), "Col::subvec(): indices out of bounds or incorrectly used");
Chris@49 475
Chris@49 476 const uword subview_n_rows = in_row2 - in_row1 + 1;
Chris@49 477
Chris@49 478 return subview_col<eT>(*this, 0, in_row1, subview_n_rows);
Chris@49 479 }
Chris@49 480
Chris@49 481
Chris@49 482
Chris@49 483 template<typename eT>
Chris@49 484 arma_inline
Chris@49 485 const subview_col<eT>
Chris@49 486 Col<eT>::subvec(const uword in_row1, const uword in_row2) const
Chris@49 487 {
Chris@49 488 arma_extra_debug_sigprint();
Chris@49 489
Chris@49 490 arma_debug_check( ( (in_row1 > in_row2) || (in_row2 >= Mat<eT>::n_rows) ), "Col::subvec(): indices out of bounds or incorrectly used");
Chris@49 491
Chris@49 492 const uword subview_n_rows = in_row2 - in_row1 + 1;
Chris@49 493
Chris@49 494 return subview_col<eT>(*this, 0, in_row1, subview_n_rows);
Chris@49 495 }
Chris@49 496
Chris@49 497
Chris@49 498
Chris@49 499 template<typename eT>
Chris@49 500 arma_inline
Chris@49 501 subview_col<eT>
Chris@49 502 Col<eT>::subvec(const span& row_span)
Chris@49 503 {
Chris@49 504 arma_extra_debug_sigprint();
Chris@49 505
Chris@49 506 const bool row_all = row_span.whole;
Chris@49 507
Chris@49 508 const uword local_n_rows = Mat<eT>::n_rows;
Chris@49 509
Chris@49 510 const uword in_row1 = row_all ? 0 : row_span.a;
Chris@49 511 const uword in_row2 = row_span.b;
Chris@49 512 const uword subvec_n_rows = row_all ? local_n_rows : in_row2 - in_row1 + 1;
Chris@49 513
Chris@49 514 arma_debug_check( ( row_all ? false : ((in_row1 > in_row2) || (in_row2 >= local_n_rows)) ), "Col::subvec(): indices out of bounds or incorrectly used");
Chris@49 515
Chris@49 516 return subview_col<eT>(*this, 0, in_row1, subvec_n_rows);
Chris@49 517 }
Chris@49 518
Chris@49 519
Chris@49 520
Chris@49 521 template<typename eT>
Chris@49 522 arma_inline
Chris@49 523 const subview_col<eT>
Chris@49 524 Col<eT>::subvec(const span& row_span) const
Chris@49 525 {
Chris@49 526 arma_extra_debug_sigprint();
Chris@49 527
Chris@49 528 const bool row_all = row_span.whole;
Chris@49 529
Chris@49 530 const uword local_n_rows = Mat<eT>::n_rows;
Chris@49 531
Chris@49 532 const uword in_row1 = row_all ? 0 : row_span.a;
Chris@49 533 const uword in_row2 = row_span.b;
Chris@49 534 const uword subvec_n_rows = row_all ? local_n_rows : in_row2 - in_row1 + 1;
Chris@49 535
Chris@49 536 arma_debug_check( ( row_all ? false : ((in_row1 > in_row2) || (in_row2 >= local_n_rows)) ), "Col::subvec(): indices out of bounds or incorrectly used");
Chris@49 537
Chris@49 538 return subview_col<eT>(*this, 0, in_row1, subvec_n_rows);
Chris@49 539 }
Chris@49 540
Chris@49 541
Chris@49 542
Chris@49 543 template<typename eT>
Chris@49 544 arma_inline
Chris@49 545 subview_col<eT>
Chris@49 546 Col<eT>::operator()(const span& row_span)
Chris@49 547 {
Chris@49 548 arma_extra_debug_sigprint();
Chris@49 549
Chris@49 550 return subvec(row_span);
Chris@49 551 }
Chris@49 552
Chris@49 553
Chris@49 554
Chris@49 555 template<typename eT>
Chris@49 556 arma_inline
Chris@49 557 const subview_col<eT>
Chris@49 558 Col<eT>::operator()(const span& row_span) const
Chris@49 559 {
Chris@49 560 arma_extra_debug_sigprint();
Chris@49 561
Chris@49 562 return subvec(row_span);
Chris@49 563 }
Chris@49 564
Chris@49 565
Chris@49 566
Chris@49 567 //! remove specified row
Chris@49 568 template<typename eT>
Chris@49 569 inline
Chris@49 570 void
Chris@49 571 Col<eT>::shed_row(const uword row_num)
Chris@49 572 {
Chris@49 573 arma_extra_debug_sigprint();
Chris@49 574
Chris@49 575 arma_debug_check( row_num >= Mat<eT>::n_rows, "Col::shed_row(): index out of bounds");
Chris@49 576
Chris@49 577 shed_rows(row_num, row_num);
Chris@49 578 }
Chris@49 579
Chris@49 580
Chris@49 581
Chris@49 582 //! remove specified rows
Chris@49 583 template<typename eT>
Chris@49 584 inline
Chris@49 585 void
Chris@49 586 Col<eT>::shed_rows(const uword in_row1, const uword in_row2)
Chris@49 587 {
Chris@49 588 arma_extra_debug_sigprint();
Chris@49 589
Chris@49 590 arma_debug_check
Chris@49 591 (
Chris@49 592 (in_row1 > in_row2) || (in_row2 >= Mat<eT>::n_rows),
Chris@49 593 "Col::shed_rows(): indices out of bounds or incorrectly used"
Chris@49 594 );
Chris@49 595
Chris@49 596 const uword n_keep_front = in_row1;
Chris@49 597 const uword n_keep_back = Mat<eT>::n_rows - (in_row2 + 1);
Chris@49 598
Chris@49 599 Col<eT> X(n_keep_front + n_keep_back);
Chris@49 600
Chris@49 601 eT* X_mem = X.memptr();
Chris@49 602 const eT* t_mem = (*this).memptr();
Chris@49 603
Chris@49 604 if(n_keep_front > 0)
Chris@49 605 {
Chris@49 606 arrayops::copy( X_mem, t_mem, n_keep_front );
Chris@49 607 }
Chris@49 608
Chris@49 609 if(n_keep_back > 0)
Chris@49 610 {
Chris@49 611 arrayops::copy( &(X_mem[n_keep_front]), &(t_mem[in_row2+1]), n_keep_back);
Chris@49 612 }
Chris@49 613
Chris@49 614 Mat<eT>::steal_mem(X);
Chris@49 615 }
Chris@49 616
Chris@49 617
Chris@49 618
Chris@49 619 //! insert N rows at the specified row position,
Chris@49 620 //! optionally setting the elements of the inserted rows to zero
Chris@49 621 template<typename eT>
Chris@49 622 inline
Chris@49 623 void
Chris@49 624 Col<eT>::insert_rows(const uword row_num, const uword N, const bool set_to_zero)
Chris@49 625 {
Chris@49 626 arma_extra_debug_sigprint();
Chris@49 627
Chris@49 628 const uword t_n_rows = Mat<eT>::n_rows;
Chris@49 629
Chris@49 630 const uword A_n_rows = row_num;
Chris@49 631 const uword B_n_rows = t_n_rows - row_num;
Chris@49 632
Chris@49 633 // insertion at row_num == n_rows is in effect an append operation
Chris@49 634 arma_debug_check( (row_num > t_n_rows), "Col::insert_rows(): index out of bounds");
Chris@49 635
Chris@49 636 if(N > 0)
Chris@49 637 {
Chris@49 638 Col<eT> out(t_n_rows + N);
Chris@49 639
Chris@49 640 eT* out_mem = out.memptr();
Chris@49 641 const eT* t_mem = (*this).memptr();
Chris@49 642
Chris@49 643 if(A_n_rows > 0)
Chris@49 644 {
Chris@49 645 arrayops::copy( out_mem, t_mem, A_n_rows );
Chris@49 646 }
Chris@49 647
Chris@49 648 if(B_n_rows > 0)
Chris@49 649 {
Chris@49 650 arrayops::copy( &(out_mem[row_num + N]), &(t_mem[row_num]), B_n_rows );
Chris@49 651 }
Chris@49 652
Chris@49 653 if(set_to_zero == true)
Chris@49 654 {
Chris@49 655 arrayops::inplace_set( &(out_mem[row_num]), eT(0), N );
Chris@49 656 }
Chris@49 657
Chris@49 658 Mat<eT>::steal_mem(out);
Chris@49 659 }
Chris@49 660 }
Chris@49 661
Chris@49 662
Chris@49 663
Chris@49 664 //! insert the given object at the specified row position;
Chris@49 665 //! the given object must have one column
Chris@49 666 template<typename eT>
Chris@49 667 template<typename T1>
Chris@49 668 inline
Chris@49 669 void
Chris@49 670 Col<eT>::insert_rows(const uword row_num, const Base<eT,T1>& X)
Chris@49 671 {
Chris@49 672 arma_extra_debug_sigprint();
Chris@49 673
Chris@49 674 Mat<eT>::insert_rows(row_num, X);
Chris@49 675 }
Chris@49 676
Chris@49 677
Chris@49 678
Chris@49 679 template<typename eT>
Chris@49 680 arma_inline
Chris@49 681 arma_warn_unused
Chris@49 682 eT&
Chris@49 683 Col<eT>::at(const uword i)
Chris@49 684 {
Chris@49 685 return access::rw(Mat<eT>::mem[i]);
Chris@49 686 }
Chris@49 687
Chris@49 688
Chris@49 689
Chris@49 690 template<typename eT>
Chris@49 691 arma_inline
Chris@49 692 arma_warn_unused
Chris@49 693 const eT&
Chris@49 694 Col<eT>::at(const uword i) const
Chris@49 695 {
Chris@49 696 return Mat<eT>::mem[i];
Chris@49 697 }
Chris@49 698
Chris@49 699
Chris@49 700
Chris@49 701 template<typename eT>
Chris@49 702 arma_inline
Chris@49 703 arma_warn_unused
Chris@49 704 eT&
Chris@49 705 Col<eT>::at(const uword in_row, const uword)
Chris@49 706 {
Chris@49 707 return access::rw( Mat<eT>::mem[in_row] );
Chris@49 708 }
Chris@49 709
Chris@49 710
Chris@49 711
Chris@49 712 template<typename eT>
Chris@49 713 arma_inline
Chris@49 714 arma_warn_unused
Chris@49 715 const eT&
Chris@49 716 Col<eT>::at(const uword in_row, const uword) const
Chris@49 717 {
Chris@49 718 return Mat<eT>::mem[in_row];
Chris@49 719 }
Chris@49 720
Chris@49 721
Chris@49 722
Chris@49 723 template<typename eT>
Chris@49 724 inline
Chris@49 725 typename Col<eT>::row_iterator
Chris@49 726 Col<eT>::begin_row(const uword row_num)
Chris@49 727 {
Chris@49 728 arma_extra_debug_sigprint();
Chris@49 729
Chris@49 730 arma_debug_check( (row_num >= Mat<eT>::n_rows), "begin_row(): index out of bounds");
Chris@49 731
Chris@49 732 return Mat<eT>::memptr() + row_num;
Chris@49 733 }
Chris@49 734
Chris@49 735
Chris@49 736
Chris@49 737 template<typename eT>
Chris@49 738 inline
Chris@49 739 typename Col<eT>::const_row_iterator
Chris@49 740 Col<eT>::begin_row(const uword row_num) const
Chris@49 741 {
Chris@49 742 arma_extra_debug_sigprint();
Chris@49 743
Chris@49 744 arma_debug_check( (row_num >= Mat<eT>::n_rows), "begin_row(): index out of bounds");
Chris@49 745
Chris@49 746 return Mat<eT>::memptr() + row_num;
Chris@49 747 }
Chris@49 748
Chris@49 749
Chris@49 750
Chris@49 751 template<typename eT>
Chris@49 752 inline
Chris@49 753 typename Col<eT>::row_iterator
Chris@49 754 Col<eT>::end_row(const uword row_num)
Chris@49 755 {
Chris@49 756 arma_extra_debug_sigprint();
Chris@49 757
Chris@49 758 arma_debug_check( (row_num >= Mat<eT>::n_rows), "end_row(): index out of bounds");
Chris@49 759
Chris@49 760 return Mat<eT>::memptr() + row_num + 1;
Chris@49 761 }
Chris@49 762
Chris@49 763
Chris@49 764
Chris@49 765 template<typename eT>
Chris@49 766 inline
Chris@49 767 typename Col<eT>::const_row_iterator
Chris@49 768 Col<eT>::end_row(const uword row_num) const
Chris@49 769 {
Chris@49 770 arma_extra_debug_sigprint();
Chris@49 771
Chris@49 772 arma_debug_check( (row_num >= Mat<eT>::n_rows), "end_row(): index out of bounds");
Chris@49 773
Chris@49 774 return Mat<eT>::memptr() + row_num + 1;
Chris@49 775 }
Chris@49 776
Chris@49 777
Chris@49 778
Chris@49 779 template<typename eT>
Chris@49 780 template<uword fixed_n_elem>
Chris@49 781 arma_inline
Chris@49 782 void
Chris@49 783 Col<eT>::fixed<fixed_n_elem>::change_to_row()
Chris@49 784 {
Chris@49 785 arma_extra_debug_sigprint();
Chris@49 786
Chris@49 787 access::rw(Mat<eT>::n_cols) = fixed_n_elem;
Chris@49 788 access::rw(Mat<eT>::n_rows) = 1;
Chris@49 789 }
Chris@49 790
Chris@49 791
Chris@49 792
Chris@49 793 template<typename eT>
Chris@49 794 template<uword fixed_n_elem>
Chris@49 795 arma_inline
Chris@49 796 Col<eT>::fixed<fixed_n_elem>::fixed()
Chris@49 797 : Col<eT>( arma_fixed_indicator(), fixed_n_elem, ((use_extra) ? mem_local_extra : Mat<eT>::mem_local) )
Chris@49 798 {
Chris@49 799 arma_extra_debug_sigprint_this(this);
Chris@49 800 }
Chris@49 801
Chris@49 802
Chris@49 803
Chris@49 804 template<typename eT>
Chris@49 805 template<uword fixed_n_elem>
Chris@49 806 arma_inline
Chris@49 807 Col<eT>::fixed<fixed_n_elem>::fixed(const fixed<fixed_n_elem>& X)
Chris@49 808 : Col<eT>( arma_fixed_indicator(), fixed_n_elem, ((use_extra) ? mem_local_extra : Mat<eT>::mem_local) )
Chris@49 809 {
Chris@49 810 arma_extra_debug_sigprint_this(this);
Chris@49 811
Chris@49 812 eT* dest = (use_extra) ? mem_local_extra : Mat<eT>::mem_local;
Chris@49 813
Chris@49 814 arrayops::copy( dest, X.mem, fixed_n_elem );
Chris@49 815 }
Chris@49 816
Chris@49 817
Chris@49 818
Chris@49 819 template<typename eT>
Chris@49 820 template<uword fixed_n_elem>
Chris@49 821 inline
Chris@49 822 Col<eT>::fixed<fixed_n_elem>::fixed(const subview_cube<eT>& X)
Chris@49 823 : Col<eT>( arma_fixed_indicator(), fixed_n_elem, ((use_extra) ? mem_local_extra : Mat<eT>::mem_local) )
Chris@49 824 {
Chris@49 825 arma_extra_debug_sigprint_this(this);
Chris@49 826
Chris@49 827 Col<eT>::operator=(X);
Chris@49 828 }
Chris@49 829
Chris@49 830
Chris@49 831
Chris@49 832 template<typename eT>
Chris@49 833 template<uword fixed_n_elem>
Chris@49 834 template<typename T1>
Chris@49 835 inline
Chris@49 836 Col<eT>::fixed<fixed_n_elem>::fixed(const Base<eT,T1>& A)
Chris@49 837 : Col<eT>( arma_fixed_indicator(), fixed_n_elem, ((use_extra) ? mem_local_extra : Mat<eT>::mem_local) )
Chris@49 838 {
Chris@49 839 arma_extra_debug_sigprint_this(this);
Chris@49 840
Chris@49 841 Col<eT>::operator=(A.get_ref());
Chris@49 842 }
Chris@49 843
Chris@49 844
Chris@49 845
Chris@49 846 template<typename eT>
Chris@49 847 template<uword fixed_n_elem>
Chris@49 848 template<typename T1, typename T2>
Chris@49 849 inline
Chris@49 850 Col<eT>::fixed<fixed_n_elem>::fixed(const Base<pod_type,T1>& A, const Base<pod_type,T2>& B)
Chris@49 851 : Col<eT>( arma_fixed_indicator(), fixed_n_elem, ((use_extra) ? mem_local_extra : Mat<eT>::mem_local) )
Chris@49 852 {
Chris@49 853 arma_extra_debug_sigprint_this(this);
Chris@49 854
Chris@49 855 Col<eT>::init(A,B);
Chris@49 856 }
Chris@49 857
Chris@49 858
Chris@49 859
Chris@49 860 template<typename eT>
Chris@49 861 template<uword fixed_n_elem>
Chris@49 862 inline
Chris@49 863 Col<eT>::fixed<fixed_n_elem>::fixed(const eT* aux_mem)
Chris@49 864 : Col<eT>( arma_fixed_indicator(), fixed_n_elem, ((use_extra) ? mem_local_extra : Mat<eT>::mem_local) )
Chris@49 865 {
Chris@49 866 arma_extra_debug_sigprint_this(this);
Chris@49 867
Chris@49 868 eT* dest = (use_extra) ? mem_local_extra : Mat<eT>::mem_local;
Chris@49 869
Chris@49 870 arrayops::copy( dest, aux_mem, fixed_n_elem );
Chris@49 871 }
Chris@49 872
Chris@49 873
Chris@49 874
Chris@49 875 //! NOTE: this function relies on
Chris@49 876 //! Col::operator=(text), to change vec_state as well as swapping n_rows and n_cols,
Chris@49 877 //! and Mat::init(), to check that the given vector will not have a different size than fixed_n_elem.
Chris@49 878 template<typename eT>
Chris@49 879 template<uword fixed_n_elem>
Chris@49 880 inline
Chris@49 881 Col<eT>::fixed<fixed_n_elem>::fixed(const char* text)
Chris@49 882 : Col<eT>( arma_fixed_indicator(), fixed_n_elem, ((use_extra) ? mem_local_extra : Mat<eT>::mem_local) )
Chris@49 883 {
Chris@49 884 arma_extra_debug_sigprint_this(this);
Chris@49 885
Chris@49 886 change_to_row();
Chris@49 887
Chris@49 888 Col<eT>::operator=(text);
Chris@49 889 }
Chris@49 890
Chris@49 891
Chris@49 892
Chris@49 893 //! NOTE: this function relies on
Chris@49 894 //! Col::operator=(text), to change vec_state as well as swapping n_rows and n_cols,
Chris@49 895 //! and Mat::init(), to check that the given vector will not have a different size than fixed_n_elem.
Chris@49 896 template<typename eT>
Chris@49 897 template<uword fixed_n_elem>
Chris@49 898 inline
Chris@49 899 Col<eT>::fixed<fixed_n_elem>::fixed(const std::string& text)
Chris@49 900 : Col<eT>( arma_fixed_indicator(), fixed_n_elem, ((use_extra) ? mem_local_extra : Mat<eT>::mem_local) )
Chris@49 901 {
Chris@49 902 arma_extra_debug_sigprint_this(this);
Chris@49 903
Chris@49 904 change_to_row();
Chris@49 905
Chris@49 906 Col<eT>::operator=(text);
Chris@49 907 }
Chris@49 908
Chris@49 909
Chris@49 910
Chris@49 911 template<typename eT>
Chris@49 912 template<uword fixed_n_elem>
Chris@49 913 template<typename T1>
Chris@49 914 const Col<eT>&
Chris@49 915 Col<eT>::fixed<fixed_n_elem>::operator=(const Base<eT,T1>& A)
Chris@49 916 {
Chris@49 917 arma_extra_debug_sigprint();
Chris@49 918
Chris@49 919 Col<eT>::operator=(A.get_ref());
Chris@49 920
Chris@49 921 return *this;
Chris@49 922 }
Chris@49 923
Chris@49 924
Chris@49 925
Chris@49 926 template<typename eT>
Chris@49 927 template<uword fixed_n_elem>
Chris@49 928 const Col<eT>&
Chris@49 929 Col<eT>::fixed<fixed_n_elem>::operator=(const eT val)
Chris@49 930 {
Chris@49 931 arma_extra_debug_sigprint();
Chris@49 932
Chris@49 933 Col<eT>::operator=(val);
Chris@49 934
Chris@49 935 return *this;
Chris@49 936 }
Chris@49 937
Chris@49 938
Chris@49 939
Chris@49 940 template<typename eT>
Chris@49 941 template<uword fixed_n_elem>
Chris@49 942 const Col<eT>&
Chris@49 943 Col<eT>::fixed<fixed_n_elem>::operator=(const char* text)
Chris@49 944 {
Chris@49 945 arma_extra_debug_sigprint();
Chris@49 946
Chris@49 947 change_to_row();
Chris@49 948
Chris@49 949 Col<eT>::operator=(text);
Chris@49 950
Chris@49 951 return *this;
Chris@49 952 }
Chris@49 953
Chris@49 954
Chris@49 955
Chris@49 956 template<typename eT>
Chris@49 957 template<uword fixed_n_elem>
Chris@49 958 const Col<eT>&
Chris@49 959 Col<eT>::fixed<fixed_n_elem>::operator=(const std::string& text)
Chris@49 960 {
Chris@49 961 arma_extra_debug_sigprint();
Chris@49 962
Chris@49 963 change_to_row();
Chris@49 964
Chris@49 965 Col<eT>::operator=(text);
Chris@49 966
Chris@49 967 return *this;
Chris@49 968 }
Chris@49 969
Chris@49 970
Chris@49 971
Chris@49 972 template<typename eT>
Chris@49 973 template<uword fixed_n_elem>
Chris@49 974 const Col<eT>&
Chris@49 975 Col<eT>::fixed<fixed_n_elem>::operator=(const subview_cube<eT>& X)
Chris@49 976 {
Chris@49 977 arma_extra_debug_sigprint();
Chris@49 978
Chris@49 979 Col<eT>::operator=(X);
Chris@49 980
Chris@49 981 return *this;
Chris@49 982 }
Chris@49 983
Chris@49 984
Chris@49 985
Chris@49 986 #if defined(ARMA_USE_CXX11)
Chris@49 987
Chris@49 988 template<typename eT>
Chris@49 989 template<uword fixed_n_elem>
Chris@49 990 inline
Chris@49 991 Col<eT>::fixed<fixed_n_elem>::fixed(const std::initializer_list<eT>& list)
Chris@49 992 : Col<eT>( arma_fixed_indicator(), fixed_n_elem, ((use_extra) ? mem_local_extra : Mat<eT>::mem_local) )
Chris@49 993 {
Chris@49 994 arma_extra_debug_sigprint_this(this);
Chris@49 995
Chris@49 996 (*this).operator=(list);
Chris@49 997 }
Chris@49 998
Chris@49 999
Chris@49 1000
Chris@49 1001 template<typename eT>
Chris@49 1002 template<uword fixed_n_elem>
Chris@49 1003 inline
Chris@49 1004 const Col<eT>&
Chris@49 1005 Col<eT>::fixed<fixed_n_elem>::operator=(const std::initializer_list<eT>& list)
Chris@49 1006 {
Chris@49 1007 arma_extra_debug_sigprint();
Chris@49 1008
Chris@49 1009 const uword N = list.size();
Chris@49 1010
Chris@49 1011 arma_debug_check( (N > fixed_n_elem), "Col::fixed: initialiser list is too long" );
Chris@49 1012
Chris@49 1013 eT* this_mem = (*this).memptr();
Chris@49 1014
Chris@49 1015 arrayops::copy( this_mem, list.begin(), N );
Chris@49 1016
Chris@49 1017 for(uword iq=N; iq < fixed_n_elem; ++iq) { this_mem[iq] = eT(0); }
Chris@49 1018
Chris@49 1019 return *this;
Chris@49 1020 }
Chris@49 1021
Chris@49 1022 #endif
Chris@49 1023
Chris@49 1024
Chris@49 1025
Chris@49 1026 template<typename eT>
Chris@49 1027 template<uword fixed_n_elem>
Chris@49 1028 arma_inline
Chris@49 1029 const Op< typename Col<eT>::template fixed<fixed_n_elem>::Col_fixed_type, op_htrans >
Chris@49 1030 Col<eT>::fixed<fixed_n_elem>::t() const
Chris@49 1031 {
Chris@49 1032 return Op< typename Col<eT>::template fixed<fixed_n_elem>::Col_fixed_type, op_htrans >(*this);
Chris@49 1033 }
Chris@49 1034
Chris@49 1035
Chris@49 1036
Chris@49 1037 template<typename eT>
Chris@49 1038 template<uword fixed_n_elem>
Chris@49 1039 arma_inline
Chris@49 1040 const Op< typename Col<eT>::template fixed<fixed_n_elem>::Col_fixed_type, op_htrans >
Chris@49 1041 Col<eT>::fixed<fixed_n_elem>::ht() const
Chris@49 1042 {
Chris@49 1043 return Op< typename Col<eT>::template fixed<fixed_n_elem>::Col_fixed_type, op_htrans >(*this);
Chris@49 1044 }
Chris@49 1045
Chris@49 1046
Chris@49 1047
Chris@49 1048 template<typename eT>
Chris@49 1049 template<uword fixed_n_elem>
Chris@49 1050 arma_inline
Chris@49 1051 const Op< typename Col<eT>::template fixed<fixed_n_elem>::Col_fixed_type, op_strans >
Chris@49 1052 Col<eT>::fixed<fixed_n_elem>::st() const
Chris@49 1053 {
Chris@49 1054 return Op< typename Col<eT>::template fixed<fixed_n_elem>::Col_fixed_type, op_strans >(*this);
Chris@49 1055 }
Chris@49 1056
Chris@49 1057
Chris@49 1058
Chris@49 1059 template<typename eT>
Chris@49 1060 template<uword fixed_n_elem>
Chris@49 1061 arma_inline
Chris@49 1062 arma_warn_unused
Chris@49 1063 const eT&
Chris@49 1064 Col<eT>::fixed<fixed_n_elem>::at_alt(const uword ii) const
Chris@49 1065 {
Chris@49 1066 #if defined(ARMA_HAVE_ALIGNED_ATTRIBUTE)
Chris@49 1067
Chris@49 1068 return (use_extra) ? mem_local_extra[ii] : Mat<eT>::mem_local[ii];
Chris@49 1069
Chris@49 1070 #else
Chris@49 1071 const eT* mem_aligned = (use_extra) ? mem_local_extra : Mat<eT>::mem_local;
Chris@49 1072
Chris@49 1073 memory::mark_as_aligned(mem_aligned);
Chris@49 1074
Chris@49 1075 return mem_aligned[ii];
Chris@49 1076 #endif
Chris@49 1077 }
Chris@49 1078
Chris@49 1079
Chris@49 1080
Chris@49 1081 template<typename eT>
Chris@49 1082 template<uword fixed_n_elem>
Chris@49 1083 arma_inline
Chris@49 1084 arma_warn_unused
Chris@49 1085 eT&
Chris@49 1086 Col<eT>::fixed<fixed_n_elem>::operator[] (const uword ii)
Chris@49 1087 {
Chris@49 1088 return (use_extra) ? mem_local_extra[ii] : Mat<eT>::mem_local[ii];
Chris@49 1089 }
Chris@49 1090
Chris@49 1091
Chris@49 1092
Chris@49 1093 template<typename eT>
Chris@49 1094 template<uword fixed_n_elem>
Chris@49 1095 arma_inline
Chris@49 1096 arma_warn_unused
Chris@49 1097 const eT&
Chris@49 1098 Col<eT>::fixed<fixed_n_elem>::operator[] (const uword ii) const
Chris@49 1099 {
Chris@49 1100 return (use_extra) ? mem_local_extra[ii] : Mat<eT>::mem_local[ii];
Chris@49 1101 }
Chris@49 1102
Chris@49 1103
Chris@49 1104
Chris@49 1105 template<typename eT>
Chris@49 1106 template<uword fixed_n_elem>
Chris@49 1107 arma_inline
Chris@49 1108 arma_warn_unused
Chris@49 1109 eT&
Chris@49 1110 Col<eT>::fixed<fixed_n_elem>::at(const uword ii)
Chris@49 1111 {
Chris@49 1112 return (use_extra) ? mem_local_extra[ii] : Mat<eT>::mem_local[ii];
Chris@49 1113 }
Chris@49 1114
Chris@49 1115
Chris@49 1116
Chris@49 1117 template<typename eT>
Chris@49 1118 template<uword fixed_n_elem>
Chris@49 1119 arma_inline
Chris@49 1120 arma_warn_unused
Chris@49 1121 const eT&
Chris@49 1122 Col<eT>::fixed<fixed_n_elem>::at(const uword ii) const
Chris@49 1123 {
Chris@49 1124 return (use_extra) ? mem_local_extra[ii] : Mat<eT>::mem_local[ii];
Chris@49 1125 }
Chris@49 1126
Chris@49 1127
Chris@49 1128
Chris@49 1129 template<typename eT>
Chris@49 1130 template<uword fixed_n_elem>
Chris@49 1131 arma_inline
Chris@49 1132 arma_warn_unused
Chris@49 1133 eT&
Chris@49 1134 Col<eT>::fixed<fixed_n_elem>::operator() (const uword ii)
Chris@49 1135 {
Chris@49 1136 arma_debug_check( (ii >= fixed_n_elem), "Col::operator(): index out of bounds");
Chris@49 1137
Chris@49 1138 return (use_extra) ? mem_local_extra[ii] : Mat<eT>::mem_local[ii];
Chris@49 1139 }
Chris@49 1140
Chris@49 1141
Chris@49 1142
Chris@49 1143 template<typename eT>
Chris@49 1144 template<uword fixed_n_elem>
Chris@49 1145 arma_inline
Chris@49 1146 arma_warn_unused
Chris@49 1147 const eT&
Chris@49 1148 Col<eT>::fixed<fixed_n_elem>::operator() (const uword ii) const
Chris@49 1149 {
Chris@49 1150 arma_debug_check( (ii >= fixed_n_elem), "Col::operator(): index out of bounds");
Chris@49 1151
Chris@49 1152 return (use_extra) ? mem_local_extra[ii] : Mat<eT>::mem_local[ii];
Chris@49 1153 }
Chris@49 1154
Chris@49 1155
Chris@49 1156
Chris@49 1157 template<typename eT>
Chris@49 1158 template<uword fixed_n_elem>
Chris@49 1159 arma_inline
Chris@49 1160 arma_warn_unused
Chris@49 1161 eT&
Chris@49 1162 Col<eT>::fixed<fixed_n_elem>::at(const uword in_row, const uword)
Chris@49 1163 {
Chris@49 1164 return (use_extra) ? mem_local_extra[in_row] : Mat<eT>::mem_local[in_row];
Chris@49 1165 }
Chris@49 1166
Chris@49 1167
Chris@49 1168
Chris@49 1169 template<typename eT>
Chris@49 1170 template<uword fixed_n_elem>
Chris@49 1171 arma_inline
Chris@49 1172 arma_warn_unused
Chris@49 1173 const eT&
Chris@49 1174 Col<eT>::fixed<fixed_n_elem>::at(const uword in_row, const uword) const
Chris@49 1175 {
Chris@49 1176 return (use_extra) ? mem_local_extra[in_row] : Mat<eT>::mem_local[in_row];
Chris@49 1177 }
Chris@49 1178
Chris@49 1179
Chris@49 1180
Chris@49 1181 template<typename eT>
Chris@49 1182 template<uword fixed_n_elem>
Chris@49 1183 arma_inline
Chris@49 1184 arma_warn_unused
Chris@49 1185 eT&
Chris@49 1186 Col<eT>::fixed<fixed_n_elem>::operator() (const uword in_row, const uword in_col)
Chris@49 1187 {
Chris@49 1188 arma_debug_check( ((in_row >= fixed_n_elem) || (in_col > 0)), "Col::operator(): index out of bounds" );
Chris@49 1189
Chris@49 1190 return (use_extra) ? mem_local_extra[in_row] : Mat<eT>::mem_local[in_row];
Chris@49 1191 }
Chris@49 1192
Chris@49 1193
Chris@49 1194
Chris@49 1195 template<typename eT>
Chris@49 1196 template<uword fixed_n_elem>
Chris@49 1197 arma_inline
Chris@49 1198 arma_warn_unused
Chris@49 1199 const eT&
Chris@49 1200 Col<eT>::fixed<fixed_n_elem>::operator() (const uword in_row, const uword in_col) const
Chris@49 1201 {
Chris@49 1202 arma_debug_check( ((in_row >= fixed_n_elem) || (in_col > 0)), "Col::operator(): index out of bounds" );
Chris@49 1203
Chris@49 1204 return (use_extra) ? mem_local_extra[in_row] : Mat<eT>::mem_local[in_row];
Chris@49 1205 }
Chris@49 1206
Chris@49 1207
Chris@49 1208
Chris@49 1209 template<typename eT>
Chris@49 1210 template<uword fixed_n_elem>
Chris@49 1211 arma_inline
Chris@49 1212 arma_warn_unused
Chris@49 1213 eT*
Chris@49 1214 Col<eT>::fixed<fixed_n_elem>::memptr()
Chris@49 1215 {
Chris@49 1216 return (use_extra) ? mem_local_extra : Mat<eT>::mem_local;
Chris@49 1217 }
Chris@49 1218
Chris@49 1219
Chris@49 1220
Chris@49 1221 template<typename eT>
Chris@49 1222 template<uword fixed_n_elem>
Chris@49 1223 arma_inline
Chris@49 1224 arma_warn_unused
Chris@49 1225 const eT*
Chris@49 1226 Col<eT>::fixed<fixed_n_elem>::memptr() const
Chris@49 1227 {
Chris@49 1228 return (use_extra) ? mem_local_extra : Mat<eT>::mem_local;
Chris@49 1229 }
Chris@49 1230
Chris@49 1231
Chris@49 1232
Chris@49 1233 template<typename eT>
Chris@49 1234 template<uword fixed_n_elem>
Chris@49 1235 arma_hot
Chris@49 1236 inline
Chris@49 1237 const Col<eT>&
Chris@49 1238 Col<eT>::fixed<fixed_n_elem>::fill(const eT val)
Chris@49 1239 {
Chris@49 1240 arma_extra_debug_sigprint();
Chris@49 1241
Chris@49 1242 eT* mem_use = (use_extra) ? &(mem_local_extra[0]) : &(Mat<eT>::mem_local[0]);
Chris@49 1243
Chris@49 1244 arrayops::inplace_set_fixed<eT,fixed_n_elem>( mem_use, val );
Chris@49 1245
Chris@49 1246 return *this;
Chris@49 1247 }
Chris@49 1248
Chris@49 1249
Chris@49 1250
Chris@49 1251 template<typename eT>
Chris@49 1252 template<uword fixed_n_elem>
Chris@49 1253 arma_hot
Chris@49 1254 inline
Chris@49 1255 const Col<eT>&
Chris@49 1256 Col<eT>::fixed<fixed_n_elem>::zeros()
Chris@49 1257 {
Chris@49 1258 arma_extra_debug_sigprint();
Chris@49 1259
Chris@49 1260 eT* mem_use = (use_extra) ? &(mem_local_extra[0]) : &(Mat<eT>::mem_local[0]);
Chris@49 1261
Chris@49 1262 arrayops::inplace_set_fixed<eT,fixed_n_elem>( mem_use, eT(0) );
Chris@49 1263
Chris@49 1264 return *this;
Chris@49 1265 }
Chris@49 1266
Chris@49 1267
Chris@49 1268
Chris@49 1269 template<typename eT>
Chris@49 1270 template<uword fixed_n_elem>
Chris@49 1271 arma_hot
Chris@49 1272 inline
Chris@49 1273 const Col<eT>&
Chris@49 1274 Col<eT>::fixed<fixed_n_elem>::ones()
Chris@49 1275 {
Chris@49 1276 arma_extra_debug_sigprint();
Chris@49 1277
Chris@49 1278 eT* mem_use = (use_extra) ? &(mem_local_extra[0]) : &(Mat<eT>::mem_local[0]);
Chris@49 1279
Chris@49 1280 arrayops::inplace_set_fixed<eT,fixed_n_elem>( mem_use, eT(1) );
Chris@49 1281
Chris@49 1282 return *this;
Chris@49 1283 }
Chris@49 1284
Chris@49 1285
Chris@49 1286
Chris@49 1287 template<typename eT>
Chris@49 1288 inline
Chris@49 1289 Col<eT>::Col(const arma_fixed_indicator&, const uword in_n_elem, const eT* in_mem)
Chris@49 1290 : Mat<eT>(arma_fixed_indicator(), in_n_elem, 1, 1, in_mem)
Chris@49 1291 {
Chris@49 1292 arma_extra_debug_sigprint_this(this);
Chris@49 1293 }
Chris@49 1294
Chris@49 1295
Chris@49 1296
Chris@49 1297 #ifdef ARMA_EXTRA_COL_MEAT
Chris@49 1298 #include ARMA_INCFILE_WRAP(ARMA_EXTRA_COL_MEAT)
Chris@49 1299 #endif
Chris@49 1300
Chris@49 1301
Chris@49 1302
Chris@49 1303 //! @}