annotate armadillo-3.900.4/include/armadillo_bits/fn_elem.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 fn_elem
Chris@49 10 //! @{
Chris@49 11
Chris@49 12
Chris@49 13
Chris@49 14 //
Chris@49 15 // find
Chris@49 16
Chris@49 17 template<typename eT, typename T1>
Chris@49 18 inline
Chris@49 19 const mtOp<uword, T1, op_find>
Chris@49 20 find(const Base<eT,T1>& X, const uword k = 0, const char* direction = "first")
Chris@49 21 {
Chris@49 22 arma_extra_debug_sigprint();
Chris@49 23
Chris@49 24 const char sig = direction[0];
Chris@49 25
Chris@49 26 arma_debug_check
Chris@49 27 (
Chris@49 28 (sig != 'f' && sig != 'F' && sig != 'l' && sig != 'L'),
Chris@49 29 "find(): 3rd input argument must be \"first\" or \"last\""
Chris@49 30 );
Chris@49 31
Chris@49 32 const uword type = (sig == 'f' || sig == 'F') ? 0 : 1;
Chris@49 33
Chris@49 34 return mtOp<uword, T1, op_find>(X.get_ref(), k, type);
Chris@49 35 }
Chris@49 36
Chris@49 37
Chris@49 38
Chris@49 39 //
Chris@49 40 // real
Chris@49 41
Chris@49 42 template<typename T1>
Chris@49 43 arma_inline
Chris@49 44 const T1&
Chris@49 45 real(const Base<typename T1::pod_type, T1>& X)
Chris@49 46 {
Chris@49 47 arma_extra_debug_sigprint();
Chris@49 48
Chris@49 49 return X.get_ref();
Chris@49 50 }
Chris@49 51
Chris@49 52
Chris@49 53
Chris@49 54 template<typename T1>
Chris@49 55 arma_inline
Chris@49 56 const T1&
Chris@49 57 real(const BaseCube<typename T1::pod_type, T1>& X)
Chris@49 58 {
Chris@49 59 arma_extra_debug_sigprint();
Chris@49 60
Chris@49 61 return X.get_ref();
Chris@49 62 }
Chris@49 63
Chris@49 64
Chris@49 65
Chris@49 66 template<typename T1>
Chris@49 67 inline
Chris@49 68 const mtOp<typename T1::pod_type, T1, op_real>
Chris@49 69 real(const Base<std::complex<typename T1::pod_type>, T1>& X)
Chris@49 70 {
Chris@49 71 arma_extra_debug_sigprint();
Chris@49 72
Chris@49 73 return mtOp<typename T1::pod_type, T1, op_real>( X.get_ref() );
Chris@49 74 }
Chris@49 75
Chris@49 76
Chris@49 77
Chris@49 78 template<typename T1>
Chris@49 79 inline
Chris@49 80 const mtOpCube<typename T1::pod_type, T1, op_real>
Chris@49 81 real(const BaseCube<std::complex<typename T1::pod_type>, T1>& X)
Chris@49 82 {
Chris@49 83 arma_extra_debug_sigprint();
Chris@49 84
Chris@49 85 return mtOpCube<typename T1::pod_type, T1, op_real>( X.get_ref() );
Chris@49 86 }
Chris@49 87
Chris@49 88
Chris@49 89
Chris@49 90 //
Chris@49 91 // imag
Chris@49 92
Chris@49 93 template<typename T1>
Chris@49 94 inline
Chris@49 95 const Gen< Mat<typename T1::pod_type>, gen_zeros >
Chris@49 96 imag(const Base<typename T1::pod_type,T1>& X)
Chris@49 97 {
Chris@49 98 arma_extra_debug_sigprint();
Chris@49 99
Chris@49 100 const Proxy<T1> A(X.get_ref());
Chris@49 101
Chris@49 102 return Gen< Mat<typename T1::pod_type>, gen_zeros>(A.get_n_rows(), A.get_n_cols());
Chris@49 103 }
Chris@49 104
Chris@49 105
Chris@49 106
Chris@49 107 template<typename T1>
Chris@49 108 inline
Chris@49 109 const GenCube<typename T1::pod_type, gen_zeros>
Chris@49 110 imag(const BaseCube<typename T1::pod_type,T1>& X)
Chris@49 111 {
Chris@49 112 arma_extra_debug_sigprint();
Chris@49 113
Chris@49 114 const ProxyCube<T1> A(X.get_ref());
Chris@49 115
Chris@49 116 return GenCube<typename T1::pod_type, gen_zeros>(A.get_n_rows(), A.get_n_cols(), A.get_n_slices());
Chris@49 117 }
Chris@49 118
Chris@49 119
Chris@49 120
Chris@49 121 template<typename T1>
Chris@49 122 inline
Chris@49 123 const mtOp<typename T1::pod_type, T1, op_imag>
Chris@49 124 imag(const Base<std::complex<typename T1::pod_type>, T1>& X)
Chris@49 125 {
Chris@49 126 arma_extra_debug_sigprint();
Chris@49 127
Chris@49 128 return mtOp<typename T1::pod_type, T1, op_imag>( X.get_ref() );
Chris@49 129 }
Chris@49 130
Chris@49 131
Chris@49 132
Chris@49 133 template<typename T1>
Chris@49 134 inline
Chris@49 135 const mtOpCube<typename T1::pod_type, T1, op_imag>
Chris@49 136 imag(const BaseCube<std::complex<typename T1::pod_type>,T1>& X)
Chris@49 137 {
Chris@49 138 arma_extra_debug_sigprint();
Chris@49 139
Chris@49 140 return mtOpCube<typename T1::pod_type, T1, op_imag>( X.get_ref() );
Chris@49 141 }
Chris@49 142
Chris@49 143
Chris@49 144
Chris@49 145 //
Chris@49 146 // log
Chris@49 147
Chris@49 148 template<typename T1>
Chris@49 149 arma_inline
Chris@49 150 typename enable_if2< is_arma_type<T1>::value, const eOp<T1, eop_log> >::result
Chris@49 151 log(const T1& A)
Chris@49 152 {
Chris@49 153 arma_extra_debug_sigprint();
Chris@49 154
Chris@49 155 return eOp<T1, eop_log>(A);
Chris@49 156 }
Chris@49 157
Chris@49 158
Chris@49 159
Chris@49 160 template<typename T1>
Chris@49 161 arma_inline
Chris@49 162 const eOpCube<T1, eop_log>
Chris@49 163 log(const BaseCube<typename T1::elem_type,T1>& A)
Chris@49 164 {
Chris@49 165 arma_extra_debug_sigprint();
Chris@49 166
Chris@49 167 return eOpCube<T1, eop_log>(A.get_ref());
Chris@49 168 }
Chris@49 169
Chris@49 170
Chris@49 171
Chris@49 172 //
Chris@49 173 // log2
Chris@49 174
Chris@49 175 template<typename T1>
Chris@49 176 arma_inline
Chris@49 177 typename enable_if2< is_arma_type<T1>::value, const eOp<T1, eop_log2> >::result
Chris@49 178 log2(const T1& A)
Chris@49 179 {
Chris@49 180 arma_extra_debug_sigprint();
Chris@49 181
Chris@49 182 return eOp<T1, eop_log2>(A);
Chris@49 183 }
Chris@49 184
Chris@49 185
Chris@49 186
Chris@49 187 template<typename T1>
Chris@49 188 arma_inline
Chris@49 189 const eOpCube<T1, eop_log2>
Chris@49 190 log2(const BaseCube<typename T1::elem_type,T1>& A)
Chris@49 191 {
Chris@49 192 arma_extra_debug_sigprint();
Chris@49 193
Chris@49 194 return eOpCube<T1, eop_log2>(A.get_ref());
Chris@49 195 }
Chris@49 196
Chris@49 197
Chris@49 198
Chris@49 199 //
Chris@49 200 // log10
Chris@49 201
Chris@49 202 template<typename T1>
Chris@49 203 arma_inline
Chris@49 204 typename enable_if2< is_arma_type<T1>::value, const eOp<T1, eop_log10> >::result
Chris@49 205 log10(const T1& A)
Chris@49 206 {
Chris@49 207 arma_extra_debug_sigprint();
Chris@49 208
Chris@49 209 return eOp<T1, eop_log10>(A);
Chris@49 210 }
Chris@49 211
Chris@49 212
Chris@49 213
Chris@49 214 template<typename T1>
Chris@49 215 arma_inline
Chris@49 216 const eOpCube<T1, eop_log10>
Chris@49 217 log10(const BaseCube<typename T1::elem_type,T1>& A)
Chris@49 218 {
Chris@49 219 arma_extra_debug_sigprint();
Chris@49 220
Chris@49 221 return eOpCube<T1, eop_log10>(A.get_ref());
Chris@49 222 }
Chris@49 223
Chris@49 224
Chris@49 225
Chris@49 226 //
Chris@49 227 // exp
Chris@49 228
Chris@49 229 template<typename T1>
Chris@49 230 arma_inline
Chris@49 231 typename enable_if2< is_arma_type<T1>::value, const eOp<T1, eop_exp> >::result
Chris@49 232 exp(const T1& A)
Chris@49 233 {
Chris@49 234 arma_extra_debug_sigprint();
Chris@49 235
Chris@49 236 return eOp<T1, eop_exp>(A);
Chris@49 237 }
Chris@49 238
Chris@49 239
Chris@49 240
Chris@49 241 template<typename T1>
Chris@49 242 arma_inline
Chris@49 243 const eOpCube<T1, eop_exp>
Chris@49 244 exp(const BaseCube<typename T1::elem_type,T1>& A)
Chris@49 245 {
Chris@49 246 arma_extra_debug_sigprint();
Chris@49 247
Chris@49 248 return eOpCube<T1, eop_exp>(A.get_ref());
Chris@49 249 }
Chris@49 250
Chris@49 251
Chris@49 252
Chris@49 253 // exp2
Chris@49 254
Chris@49 255 template<typename T1>
Chris@49 256 arma_inline
Chris@49 257 typename enable_if2< is_arma_type<T1>::value, const eOp<T1, eop_exp2> >::result
Chris@49 258 exp2(const T1& A)
Chris@49 259 {
Chris@49 260 arma_extra_debug_sigprint();
Chris@49 261
Chris@49 262 return eOp<T1, eop_exp2>(A);
Chris@49 263 }
Chris@49 264
Chris@49 265
Chris@49 266
Chris@49 267 template<typename T1>
Chris@49 268 arma_inline
Chris@49 269 const eOpCube<T1, eop_exp2>
Chris@49 270 exp2(const BaseCube<typename T1::elem_type,T1>& A)
Chris@49 271 {
Chris@49 272 arma_extra_debug_sigprint();
Chris@49 273
Chris@49 274 return eOpCube<T1, eop_exp2>(A.get_ref());
Chris@49 275 }
Chris@49 276
Chris@49 277
Chris@49 278
Chris@49 279 // exp10
Chris@49 280
Chris@49 281 template<typename T1>
Chris@49 282 arma_inline
Chris@49 283 typename enable_if2< is_arma_type<T1>::value, const eOp<T1, eop_exp10> >::result
Chris@49 284 exp10(const T1& A)
Chris@49 285 {
Chris@49 286 arma_extra_debug_sigprint();
Chris@49 287
Chris@49 288 return eOp<T1, eop_exp10>(A);
Chris@49 289 }
Chris@49 290
Chris@49 291
Chris@49 292
Chris@49 293 template<typename T1>
Chris@49 294 arma_inline
Chris@49 295 const eOpCube<T1, eop_exp10>
Chris@49 296 exp10(const BaseCube<typename T1::elem_type,T1>& A)
Chris@49 297 {
Chris@49 298 arma_extra_debug_sigprint();
Chris@49 299
Chris@49 300 return eOpCube<T1, eop_exp10>(A.get_ref());
Chris@49 301 }
Chris@49 302
Chris@49 303
Chris@49 304
Chris@49 305 //
Chris@49 306 // abs
Chris@49 307
Chris@49 308
Chris@49 309 template<typename T1>
Chris@49 310 arma_inline
Chris@49 311 typename enable_if2< is_arma_type<T1>::value, const eOp<T1, eop_abs> >::result
Chris@49 312 abs(const T1& X, const typename arma_not_cx<typename T1::elem_type>::result* junk = 0)
Chris@49 313 {
Chris@49 314 arma_extra_debug_sigprint();
Chris@49 315
Chris@49 316 arma_ignore(junk);
Chris@49 317
Chris@49 318 return eOp<T1, eop_abs>(X);
Chris@49 319 }
Chris@49 320
Chris@49 321
Chris@49 322
Chris@49 323 template<typename T1>
Chris@49 324 arma_inline
Chris@49 325 const eOpCube<T1, eop_abs>
Chris@49 326 abs(const BaseCube<typename T1::elem_type,T1>& X, const typename arma_not_cx<typename T1::elem_type>::result* junk = 0)
Chris@49 327 {
Chris@49 328 arma_extra_debug_sigprint();
Chris@49 329
Chris@49 330 arma_ignore(junk);
Chris@49 331
Chris@49 332 return eOpCube<T1, eop_abs>(X.get_ref());
Chris@49 333 }
Chris@49 334
Chris@49 335
Chris@49 336
Chris@49 337 template<typename T1>
Chris@49 338 inline
Chris@49 339 const mtOp<typename T1::pod_type, T1, op_abs>
Chris@49 340 abs(const Base<std::complex<typename T1::pod_type>, T1>& X, const typename arma_cx_only<typename T1::elem_type>::result* junk = 0)
Chris@49 341 {
Chris@49 342 arma_extra_debug_sigprint();
Chris@49 343
Chris@49 344 arma_ignore(junk);
Chris@49 345
Chris@49 346 return mtOp<typename T1::pod_type, T1, op_abs>( X.get_ref() );
Chris@49 347 }
Chris@49 348
Chris@49 349
Chris@49 350
Chris@49 351 template<typename T1>
Chris@49 352 inline
Chris@49 353 const mtOpCube<typename T1::pod_type, T1, op_abs>
Chris@49 354 abs(const BaseCube< std::complex<typename T1::pod_type>,T1>& X, const typename arma_cx_only<typename T1::elem_type>::result* junk = 0)
Chris@49 355 {
Chris@49 356 arma_extra_debug_sigprint();
Chris@49 357
Chris@49 358 arma_ignore(junk);
Chris@49 359
Chris@49 360 return mtOpCube<typename T1::pod_type, T1, op_abs>( X.get_ref() );
Chris@49 361 }
Chris@49 362
Chris@49 363
Chris@49 364
Chris@49 365 template<typename T1>
Chris@49 366 arma_inline
Chris@49 367 const SpOp<T1, spop_abs>
Chris@49 368 abs(const SpBase<typename T1::elem_type,T1>& X, const typename arma_not_cx<typename T1::elem_type>::result* junk = 0)
Chris@49 369 {
Chris@49 370 arma_extra_debug_sigprint();
Chris@49 371 arma_ignore(junk);
Chris@49 372
Chris@49 373 return SpOp<T1, spop_abs>(X.get_ref());
Chris@49 374 }
Chris@49 375
Chris@49 376
Chris@49 377
Chris@49 378 template<typename T1>
Chris@49 379 arma_inline
Chris@49 380 const mtSpOp<typename T1::pod_type, T1, spop_cx_abs>
Chris@49 381 abs(const SpBase< std::complex<typename T1::pod_type>, T1>& X, const typename arma_cx_only<typename T1::elem_type>::result* junk = 0)
Chris@49 382 {
Chris@49 383 arma_extra_debug_sigprint();
Chris@49 384 arma_ignore(junk);
Chris@49 385
Chris@49 386 return mtSpOp<typename T1::pod_type, T1, spop_cx_abs>(X.get_ref());
Chris@49 387 }
Chris@49 388
Chris@49 389
Chris@49 390
Chris@49 391 //
Chris@49 392 // square
Chris@49 393
Chris@49 394 template<typename T1>
Chris@49 395 arma_inline
Chris@49 396 typename enable_if2< is_arma_type<T1>::value, const eOp<T1, eop_square> >::result
Chris@49 397 square(const T1& A)
Chris@49 398 {
Chris@49 399 arma_extra_debug_sigprint();
Chris@49 400
Chris@49 401 return eOp<T1, eop_square>(A);
Chris@49 402 }
Chris@49 403
Chris@49 404
Chris@49 405
Chris@49 406 template<typename T1>
Chris@49 407 arma_inline
Chris@49 408 const eOpCube<T1, eop_square>
Chris@49 409 square(const BaseCube<typename T1::elem_type,T1>& A)
Chris@49 410 {
Chris@49 411 arma_extra_debug_sigprint();
Chris@49 412
Chris@49 413 return eOpCube<T1, eop_square>(A.get_ref());
Chris@49 414 }
Chris@49 415
Chris@49 416
Chris@49 417
Chris@49 418 template<typename T1>
Chris@49 419 arma_inline
Chris@49 420 const SpOp<T1, spop_square>
Chris@49 421 square(const SpBase<typename T1::elem_type,T1>& A)
Chris@49 422 {
Chris@49 423 arma_extra_debug_sigprint();
Chris@49 424
Chris@49 425 return SpOp<T1, spop_square>(A.get_ref());
Chris@49 426 }
Chris@49 427
Chris@49 428
Chris@49 429
Chris@49 430 //
Chris@49 431 // sqrt
Chris@49 432
Chris@49 433 template<typename T1>
Chris@49 434 arma_inline
Chris@49 435 typename enable_if2< is_arma_type<T1>::value, const eOp<T1, eop_sqrt> >::result
Chris@49 436 sqrt(const T1& A)
Chris@49 437 {
Chris@49 438 arma_extra_debug_sigprint();
Chris@49 439
Chris@49 440 return eOp<T1, eop_sqrt>(A);
Chris@49 441 }
Chris@49 442
Chris@49 443
Chris@49 444
Chris@49 445 template<typename T1>
Chris@49 446 arma_inline
Chris@49 447 const eOpCube<T1, eop_sqrt>
Chris@49 448 sqrt(const BaseCube<typename T1::elem_type,T1>& A)
Chris@49 449 {
Chris@49 450 arma_extra_debug_sigprint();
Chris@49 451
Chris@49 452 return eOpCube<T1, eop_sqrt>(A.get_ref());
Chris@49 453 }
Chris@49 454
Chris@49 455
Chris@49 456
Chris@49 457 template<typename T1>
Chris@49 458 arma_inline
Chris@49 459 const SpOp<T1, spop_sqrt>
Chris@49 460 sqrt(const SpBase<typename T1::elem_type,T1>& A)
Chris@49 461 {
Chris@49 462 arma_extra_debug_sigprint();
Chris@49 463
Chris@49 464 return SpOp<T1, spop_sqrt>(A.get_ref());
Chris@49 465 }
Chris@49 466
Chris@49 467
Chris@49 468
Chris@49 469 //
Chris@49 470 // conj
Chris@49 471
Chris@49 472 template<typename T1>
Chris@49 473 arma_inline
Chris@49 474 const T1&
Chris@49 475 conj(const Base<typename T1::pod_type,T1>& A)
Chris@49 476 {
Chris@49 477 arma_extra_debug_sigprint();
Chris@49 478
Chris@49 479 return A.get_ref();
Chris@49 480 }
Chris@49 481
Chris@49 482
Chris@49 483
Chris@49 484 template<typename T1>
Chris@49 485 arma_inline
Chris@49 486 const T1&
Chris@49 487 conj(const BaseCube<typename T1::pod_type,T1>& A)
Chris@49 488 {
Chris@49 489 arma_extra_debug_sigprint();
Chris@49 490
Chris@49 491 return A.get_ref();
Chris@49 492 }
Chris@49 493
Chris@49 494
Chris@49 495
Chris@49 496 template<typename T1>
Chris@49 497 arma_inline
Chris@49 498 const eOp<T1, eop_conj>
Chris@49 499 conj(const Base<std::complex<typename T1::pod_type>,T1>& A)
Chris@49 500 {
Chris@49 501 arma_extra_debug_sigprint();
Chris@49 502
Chris@49 503 return eOp<T1, eop_conj>(A.get_ref());
Chris@49 504 }
Chris@49 505
Chris@49 506
Chris@49 507
Chris@49 508 template<typename T1>
Chris@49 509 arma_inline
Chris@49 510 const eOpCube<T1, eop_conj>
Chris@49 511 conj(const BaseCube<std::complex<typename T1::pod_type>,T1>& A)
Chris@49 512 {
Chris@49 513 arma_extra_debug_sigprint();
Chris@49 514
Chris@49 515 return eOpCube<T1, eop_conj>(A.get_ref());
Chris@49 516 }
Chris@49 517
Chris@49 518
Chris@49 519
Chris@49 520 template<typename T1>
Chris@49 521 arma_inline
Chris@49 522 const T1&
Chris@49 523 conj(const eOp<T1, eop_conj>& A)
Chris@49 524 {
Chris@49 525 arma_extra_debug_sigprint();
Chris@49 526
Chris@49 527 return A.m;
Chris@49 528 }
Chris@49 529
Chris@49 530
Chris@49 531
Chris@49 532 template<typename T1>
Chris@49 533 arma_inline
Chris@49 534 const T1&
Chris@49 535 conj(const eOpCube<T1, eop_conj>& A)
Chris@49 536 {
Chris@49 537 arma_extra_debug_sigprint();
Chris@49 538
Chris@49 539 return A.m;
Chris@49 540 }
Chris@49 541
Chris@49 542
Chris@49 543
Chris@49 544 // TODO: this needs a more elaborate template restriction mechanism to work properly,
Chris@49 545 // i.e. an overloaded version of thus function should do nothing if the input type is non-complex
Chris@49 546 //
Chris@49 547 // //! the conjugate of the transpose of a complex matrix is the same as the hermitian transpose
Chris@49 548 // template<typename T1>
Chris@49 549 // arma_inline
Chris@49 550 // const Op<T1, op_htrans>
Chris@49 551 // conj(const Op<T1, op_strans>& A)
Chris@49 552 // {
Chris@49 553 // arma_extra_debug_sigprint();
Chris@49 554 //
Chris@49 555 // return Op<T1, op_htrans>(A.m);
Chris@49 556 // }
Chris@49 557
Chris@49 558
Chris@49 559
Chris@49 560 // pow
Chris@49 561
Chris@49 562 template<typename T1>
Chris@49 563 arma_inline
Chris@49 564 const eOp<T1, eop_pow>
Chris@49 565 pow(const Base<typename T1::elem_type,T1>& A, const typename T1::elem_type exponent)
Chris@49 566 {
Chris@49 567 arma_extra_debug_sigprint();
Chris@49 568
Chris@49 569 return eOp<T1, eop_pow>(A.get_ref(), exponent);
Chris@49 570 }
Chris@49 571
Chris@49 572
Chris@49 573
Chris@49 574 template<typename T1>
Chris@49 575 arma_inline
Chris@49 576 const eOpCube<T1, eop_pow>
Chris@49 577 pow(const BaseCube<typename T1::elem_type,T1>& A, const typename T1::elem_type exponent)
Chris@49 578 {
Chris@49 579 arma_extra_debug_sigprint();
Chris@49 580
Chris@49 581 return eOpCube<T1, eop_pow>(A.get_ref(), exponent);
Chris@49 582 }
Chris@49 583
Chris@49 584
Chris@49 585
Chris@49 586 // pow, specialised handling (non-complex exponent for complex matrices)
Chris@49 587
Chris@49 588 template<typename T1>
Chris@49 589 arma_inline
Chris@49 590 const eOp<T1, eop_pow>
Chris@49 591 pow(const Base<typename T1::elem_type,T1>& A, const typename T1::elem_type::value_type exponent)
Chris@49 592 {
Chris@49 593 arma_extra_debug_sigprint();
Chris@49 594
Chris@49 595 typedef typename T1::elem_type eT;
Chris@49 596
Chris@49 597 return eOp<T1, eop_pow>(A.get_ref(), eT(exponent));
Chris@49 598 }
Chris@49 599
Chris@49 600
Chris@49 601
Chris@49 602 template<typename T1>
Chris@49 603 arma_inline
Chris@49 604 const eOpCube<T1, eop_pow>
Chris@49 605 pow(const BaseCube<typename T1::elem_type,T1>& A, const typename T1::elem_type::value_type exponent)
Chris@49 606 {
Chris@49 607 arma_extra_debug_sigprint();
Chris@49 608
Chris@49 609 typedef typename T1::elem_type eT;
Chris@49 610
Chris@49 611 return eOpCube<T1, eop_pow>(A.get_ref(), eT(exponent));
Chris@49 612 }
Chris@49 613
Chris@49 614
Chris@49 615
Chris@49 616 //
Chris@49 617 // floor
Chris@49 618
Chris@49 619 template<typename T1>
Chris@49 620 arma_inline
Chris@49 621 typename enable_if2< is_arma_type<T1>::value, const eOp<T1, eop_floor> >::result
Chris@49 622 floor(const T1& A)
Chris@49 623 {
Chris@49 624 arma_extra_debug_sigprint();
Chris@49 625
Chris@49 626 return eOp<T1, eop_floor>(A);
Chris@49 627 }
Chris@49 628
Chris@49 629
Chris@49 630
Chris@49 631 template<typename T1>
Chris@49 632 arma_inline
Chris@49 633 const eOpCube<T1, eop_floor>
Chris@49 634 floor(const BaseCube<typename T1::elem_type,T1>& A)
Chris@49 635 {
Chris@49 636 arma_extra_debug_sigprint();
Chris@49 637
Chris@49 638 return eOpCube<T1, eop_floor>(A.get_ref());
Chris@49 639 }
Chris@49 640
Chris@49 641
Chris@49 642
Chris@49 643 //
Chris@49 644 // ceil
Chris@49 645
Chris@49 646 template<typename T1>
Chris@49 647 arma_inline
Chris@49 648 typename enable_if2< is_arma_type<T1>::value, const eOp<T1, eop_ceil> >::result
Chris@49 649 ceil(const T1& A)
Chris@49 650 {
Chris@49 651 arma_extra_debug_sigprint();
Chris@49 652
Chris@49 653 return eOp<T1, eop_ceil>(A);
Chris@49 654 }
Chris@49 655
Chris@49 656
Chris@49 657
Chris@49 658 template<typename T1>
Chris@49 659 arma_inline
Chris@49 660 const eOpCube<T1, eop_ceil>
Chris@49 661 ceil(const BaseCube<typename T1::elem_type,T1>& A)
Chris@49 662 {
Chris@49 663 arma_extra_debug_sigprint();
Chris@49 664
Chris@49 665 return eOpCube<T1, eop_ceil>(A.get_ref());
Chris@49 666 }
Chris@49 667
Chris@49 668
Chris@49 669
Chris@49 670 //
Chris@49 671 // round
Chris@49 672
Chris@49 673 template<typename T1>
Chris@49 674 arma_inline
Chris@49 675 typename enable_if2< is_arma_type<T1>::value, const eOp<T1, eop_round> >::result
Chris@49 676 round(const T1& A)
Chris@49 677 {
Chris@49 678 arma_extra_debug_sigprint();
Chris@49 679
Chris@49 680 return eOp<T1, eop_round>(A);
Chris@49 681 }
Chris@49 682
Chris@49 683
Chris@49 684
Chris@49 685 template<typename T1>
Chris@49 686 arma_inline
Chris@49 687 const eOpCube<T1, eop_round>
Chris@49 688 round(const BaseCube<typename T1::elem_type,T1>& A)
Chris@49 689 {
Chris@49 690 arma_extra_debug_sigprint();
Chris@49 691
Chris@49 692 return eOpCube<T1, eop_round>(A.get_ref());
Chris@49 693 }
Chris@49 694
Chris@49 695
Chris@49 696
Chris@49 697 //! @}