annotate armadillo-3.900.4/include/armadillo_bits/op_cx_scalar_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 op_cx_scalar
Chris@49 10 //! @{
Chris@49 11
Chris@49 12
Chris@49 13
Chris@49 14 template<typename T1>
Chris@49 15 inline
Chris@49 16 void
Chris@49 17 op_cx_scalar_times::apply
Chris@49 18 (
Chris@49 19 Mat< typename std::complex<typename T1::pod_type> >& out,
Chris@49 20 const mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar_times>& X
Chris@49 21 )
Chris@49 22 {
Chris@49 23 arma_extra_debug_sigprint();
Chris@49 24
Chris@49 25 typedef typename std::complex<typename T1::pod_type> eT;
Chris@49 26
Chris@49 27 const Proxy<T1> A(X.m);
Chris@49 28
Chris@49 29 const uword n_rows = A.get_n_rows();
Chris@49 30 const uword n_cols = A.get_n_cols();
Chris@49 31
Chris@49 32 out.set_size(n_rows, n_cols);
Chris@49 33
Chris@49 34 const eT k = X.aux_out_eT;
Chris@49 35 eT* out_mem = out.memptr();
Chris@49 36
Chris@49 37 if(Proxy<T1>::prefer_at_accessor == false)
Chris@49 38 {
Chris@49 39 const uword n_elem = A.get_n_elem();
Chris@49 40
Chris@49 41 for(uword i=0; i<n_elem; ++i)
Chris@49 42 {
Chris@49 43 out_mem[i] = A[i] * k;
Chris@49 44 }
Chris@49 45 }
Chris@49 46 else
Chris@49 47 {
Chris@49 48 for(uword col=0; col < n_cols; ++col)
Chris@49 49 for(uword row=0; row < n_rows; ++row)
Chris@49 50 {
Chris@49 51 *out_mem = A.at(row,col) * k; ++out_mem;
Chris@49 52 }
Chris@49 53 }
Chris@49 54 }
Chris@49 55
Chris@49 56
Chris@49 57
Chris@49 58 template<typename T1>
Chris@49 59 inline
Chris@49 60 void
Chris@49 61 op_cx_scalar_plus::apply
Chris@49 62 (
Chris@49 63 Mat< typename std::complex<typename T1::pod_type> >& out,
Chris@49 64 const mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar_plus>& X
Chris@49 65 )
Chris@49 66 {
Chris@49 67 arma_extra_debug_sigprint();
Chris@49 68
Chris@49 69 typedef typename std::complex<typename T1::pod_type> eT;
Chris@49 70
Chris@49 71 const Proxy<T1> A(X.m);
Chris@49 72
Chris@49 73 const uword n_rows = A.get_n_rows();
Chris@49 74 const uword n_cols = A.get_n_cols();
Chris@49 75
Chris@49 76 out.set_size(n_rows, n_cols);
Chris@49 77
Chris@49 78 const eT k = X.aux_out_eT;
Chris@49 79 eT* out_mem = out.memptr();
Chris@49 80
Chris@49 81 if(Proxy<T1>::prefer_at_accessor == false)
Chris@49 82 {
Chris@49 83 const uword n_elem = A.get_n_elem();
Chris@49 84
Chris@49 85 for(uword i=0; i<n_elem; ++i)
Chris@49 86 {
Chris@49 87 out_mem[i] = A[i] + k;
Chris@49 88 }
Chris@49 89 }
Chris@49 90 else
Chris@49 91 {
Chris@49 92 for(uword col=0; col < n_cols; ++col)
Chris@49 93 for(uword row=0; row < n_rows; ++row)
Chris@49 94 {
Chris@49 95 *out_mem = A.at(row,col) + k; ++out_mem;
Chris@49 96 }
Chris@49 97 }
Chris@49 98 }
Chris@49 99
Chris@49 100
Chris@49 101
Chris@49 102 template<typename T1>
Chris@49 103 inline
Chris@49 104 void
Chris@49 105 op_cx_scalar_minus_pre::apply
Chris@49 106 (
Chris@49 107 Mat< typename std::complex<typename T1::pod_type> >& out,
Chris@49 108 const mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar_minus_pre>& X
Chris@49 109 )
Chris@49 110 {
Chris@49 111 arma_extra_debug_sigprint();
Chris@49 112
Chris@49 113 typedef typename std::complex<typename T1::pod_type> eT;
Chris@49 114
Chris@49 115 const Proxy<T1> A(X.m);
Chris@49 116
Chris@49 117 const uword n_rows = A.get_n_rows();
Chris@49 118 const uword n_cols = A.get_n_cols();
Chris@49 119
Chris@49 120 out.set_size(n_rows, n_cols);
Chris@49 121
Chris@49 122 const eT k = X.aux_out_eT;
Chris@49 123 eT* out_mem = out.memptr();
Chris@49 124
Chris@49 125 if(Proxy<T1>::prefer_at_accessor == false)
Chris@49 126 {
Chris@49 127 const uword n_elem = A.get_n_elem();
Chris@49 128
Chris@49 129 for(uword i=0; i<n_elem; ++i)
Chris@49 130 {
Chris@49 131 out_mem[i] = k - A[i];
Chris@49 132 }
Chris@49 133 }
Chris@49 134 else
Chris@49 135 {
Chris@49 136 for(uword col=0; col < n_cols; ++col)
Chris@49 137 for(uword row=0; row < n_rows; ++row)
Chris@49 138 {
Chris@49 139 *out_mem = k - A.at(row,col); ++out_mem;
Chris@49 140 }
Chris@49 141 }
Chris@49 142 }
Chris@49 143
Chris@49 144
Chris@49 145
Chris@49 146 template<typename T1>
Chris@49 147 inline
Chris@49 148 void
Chris@49 149 op_cx_scalar_minus_post::apply
Chris@49 150 (
Chris@49 151 Mat< typename std::complex<typename T1::pod_type> >& out,
Chris@49 152 const mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar_minus_post>& X
Chris@49 153 )
Chris@49 154 {
Chris@49 155 arma_extra_debug_sigprint();
Chris@49 156
Chris@49 157 typedef typename std::complex<typename T1::pod_type> eT;
Chris@49 158
Chris@49 159 const Proxy<T1> A(X.m);
Chris@49 160
Chris@49 161 const uword n_rows = A.get_n_rows();
Chris@49 162 const uword n_cols = A.get_n_cols();
Chris@49 163
Chris@49 164 out.set_size(n_rows, n_cols);
Chris@49 165
Chris@49 166 const eT k = X.aux_out_eT;
Chris@49 167 eT* out_mem = out.memptr();
Chris@49 168
Chris@49 169 if(Proxy<T1>::prefer_at_accessor == false)
Chris@49 170 {
Chris@49 171 const uword n_elem = A.get_n_elem();
Chris@49 172
Chris@49 173 for(uword i=0; i<n_elem; ++i)
Chris@49 174 {
Chris@49 175 out_mem[i] = A[i] - k;
Chris@49 176 }
Chris@49 177 }
Chris@49 178 else
Chris@49 179 {
Chris@49 180 for(uword col=0; col < n_cols; ++col)
Chris@49 181 for(uword row=0; row < n_rows; ++row)
Chris@49 182 {
Chris@49 183 *out_mem = A.at(row,col) - k; ++out_mem;
Chris@49 184 }
Chris@49 185 }
Chris@49 186 }
Chris@49 187
Chris@49 188
Chris@49 189
Chris@49 190 template<typename T1>
Chris@49 191 inline
Chris@49 192 void
Chris@49 193 op_cx_scalar_div_pre::apply
Chris@49 194 (
Chris@49 195 Mat< typename std::complex<typename T1::pod_type> >& out,
Chris@49 196 const mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar_div_pre>& X
Chris@49 197 )
Chris@49 198 {
Chris@49 199 arma_extra_debug_sigprint();
Chris@49 200
Chris@49 201 typedef typename std::complex<typename T1::pod_type> eT;
Chris@49 202
Chris@49 203 const Proxy<T1> A(X.m);
Chris@49 204
Chris@49 205 const uword n_rows = A.get_n_rows();
Chris@49 206 const uword n_cols = A.get_n_cols();
Chris@49 207
Chris@49 208 out.set_size(n_rows, n_cols);
Chris@49 209
Chris@49 210 const eT k = X.aux_out_eT;
Chris@49 211 eT* out_mem = out.memptr();
Chris@49 212
Chris@49 213 if(Proxy<T1>::prefer_at_accessor == false)
Chris@49 214 {
Chris@49 215 const uword n_elem = A.get_n_elem();
Chris@49 216
Chris@49 217 for(uword i=0; i<n_elem; ++i)
Chris@49 218 {
Chris@49 219 out_mem[i] = k / A[i];
Chris@49 220 }
Chris@49 221 }
Chris@49 222 else
Chris@49 223 {
Chris@49 224 for(uword col=0; col < n_cols; ++col)
Chris@49 225 for(uword row=0; row < n_rows; ++row)
Chris@49 226 {
Chris@49 227 *out_mem = k / A.at(row,col); ++out_mem;
Chris@49 228 }
Chris@49 229 }
Chris@49 230 }
Chris@49 231
Chris@49 232
Chris@49 233
Chris@49 234 template<typename T1>
Chris@49 235 inline
Chris@49 236 void
Chris@49 237 op_cx_scalar_div_post::apply
Chris@49 238 (
Chris@49 239 Mat< typename std::complex<typename T1::pod_type> >& out,
Chris@49 240 const mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar_div_post>& X
Chris@49 241 )
Chris@49 242 {
Chris@49 243 arma_extra_debug_sigprint();
Chris@49 244
Chris@49 245 typedef typename std::complex<typename T1::pod_type> eT;
Chris@49 246
Chris@49 247 const Proxy<T1> A(X.m);
Chris@49 248
Chris@49 249 const uword n_rows = A.get_n_rows();
Chris@49 250 const uword n_cols = A.get_n_cols();
Chris@49 251
Chris@49 252 out.set_size(n_rows, n_cols);
Chris@49 253
Chris@49 254 const eT k = X.aux_out_eT;
Chris@49 255 eT* out_mem = out.memptr();
Chris@49 256
Chris@49 257 if(Proxy<T1>::prefer_at_accessor == false)
Chris@49 258 {
Chris@49 259 const uword n_elem = A.get_n_elem();
Chris@49 260
Chris@49 261 for(uword i=0; i<n_elem; ++i)
Chris@49 262 {
Chris@49 263 out_mem[i] = A[i] / k;
Chris@49 264 }
Chris@49 265 }
Chris@49 266 else
Chris@49 267 {
Chris@49 268 for(uword col=0; col < n_cols; ++col)
Chris@49 269 for(uword row=0; row < n_rows; ++row)
Chris@49 270 {
Chris@49 271 *out_mem = A.at(row,col) / k; ++out_mem;
Chris@49 272 }
Chris@49 273 }
Chris@49 274 }
Chris@49 275
Chris@49 276
Chris@49 277
Chris@49 278 //
Chris@49 279 //
Chris@49 280 //
Chris@49 281
Chris@49 282
Chris@49 283
Chris@49 284 template<typename T1>
Chris@49 285 inline
Chris@49 286 void
Chris@49 287 op_cx_scalar_times::apply
Chris@49 288 (
Chris@49 289 Cube< typename std::complex<typename T1::pod_type> >& out,
Chris@49 290 const mtOpCube<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar_times>& X
Chris@49 291 )
Chris@49 292 {
Chris@49 293 arma_extra_debug_sigprint();
Chris@49 294
Chris@49 295 typedef typename std::complex<typename T1::pod_type> eT;
Chris@49 296
Chris@49 297 const ProxyCube<T1> A(X.m);
Chris@49 298
Chris@49 299 out.set_size(A.get_n_rows(), A.get_n_cols(), A.get_n_slices());
Chris@49 300
Chris@49 301 const eT k = X.aux_out_eT;
Chris@49 302 const uword n_elem = out.n_elem;
Chris@49 303 eT* out_mem = out.memptr();
Chris@49 304
Chris@49 305 // TODO: implement handling for ProxyCube<T1>::prefer_at_accessor == true
Chris@49 306 for(uword i=0; i<n_elem; ++i)
Chris@49 307 {
Chris@49 308 out_mem[i] = A[i] * k;
Chris@49 309 }
Chris@49 310 }
Chris@49 311
Chris@49 312
Chris@49 313
Chris@49 314 template<typename T1>
Chris@49 315 inline
Chris@49 316 void
Chris@49 317 op_cx_scalar_plus::apply
Chris@49 318 (
Chris@49 319 Cube< typename std::complex<typename T1::pod_type> >& out,
Chris@49 320 const mtOpCube<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar_plus>& X
Chris@49 321 )
Chris@49 322 {
Chris@49 323 arma_extra_debug_sigprint();
Chris@49 324
Chris@49 325 typedef typename std::complex<typename T1::pod_type> eT;
Chris@49 326
Chris@49 327 const ProxyCube<T1> A(X.m);
Chris@49 328
Chris@49 329 out.set_size(A.get_n_rows(), A.get_n_cols(), A.get_n_slices());
Chris@49 330
Chris@49 331 const eT k = X.aux_out_eT;
Chris@49 332 const uword n_elem = out.n_elem;
Chris@49 333 eT* out_mem = out.memptr();
Chris@49 334
Chris@49 335 for(uword i=0; i<n_elem; ++i)
Chris@49 336 {
Chris@49 337 out_mem[i] = A[i] + k;
Chris@49 338 }
Chris@49 339 }
Chris@49 340
Chris@49 341
Chris@49 342
Chris@49 343 template<typename T1>
Chris@49 344 inline
Chris@49 345 void
Chris@49 346 op_cx_scalar_minus_pre::apply
Chris@49 347 (
Chris@49 348 Cube< typename std::complex<typename T1::pod_type> >& out,
Chris@49 349 const mtOpCube<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar_minus_pre>& X
Chris@49 350 )
Chris@49 351 {
Chris@49 352 arma_extra_debug_sigprint();
Chris@49 353
Chris@49 354 typedef typename std::complex<typename T1::pod_type> eT;
Chris@49 355
Chris@49 356 const ProxyCube<T1> A(X.m);
Chris@49 357
Chris@49 358 out.set_size(A.get_n_rows(), A.get_n_cols(), A.get_n_slices());
Chris@49 359
Chris@49 360 const eT k = X.aux_out_eT;
Chris@49 361 const uword n_elem = out.n_elem;
Chris@49 362 eT* out_mem = out.memptr();
Chris@49 363
Chris@49 364 for(uword i=0; i<n_elem; ++i)
Chris@49 365 {
Chris@49 366 out_mem[i] = k - A[i];
Chris@49 367 }
Chris@49 368 }
Chris@49 369
Chris@49 370
Chris@49 371
Chris@49 372 template<typename T1>
Chris@49 373 inline
Chris@49 374 void
Chris@49 375 op_cx_scalar_minus_post::apply
Chris@49 376 (
Chris@49 377 Cube< typename std::complex<typename T1::pod_type> >& out,
Chris@49 378 const mtOpCube<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar_minus_post>& X
Chris@49 379 )
Chris@49 380 {
Chris@49 381 arma_extra_debug_sigprint();
Chris@49 382
Chris@49 383 typedef typename std::complex<typename T1::pod_type> eT;
Chris@49 384
Chris@49 385 const ProxyCube<T1> A(X.m);
Chris@49 386
Chris@49 387 out.set_size(A.get_n_rows(), A.get_n_cols(), A.get_n_slices());
Chris@49 388
Chris@49 389 const eT k = X.aux_out_eT;
Chris@49 390 const uword n_elem = out.n_elem;
Chris@49 391 eT* out_mem = out.memptr();
Chris@49 392
Chris@49 393 for(uword i=0; i<n_elem; ++i)
Chris@49 394 {
Chris@49 395 out_mem[i] = A[i] - k;
Chris@49 396 }
Chris@49 397 }
Chris@49 398
Chris@49 399
Chris@49 400
Chris@49 401 template<typename T1>
Chris@49 402 inline
Chris@49 403 void
Chris@49 404 op_cx_scalar_div_pre::apply
Chris@49 405 (
Chris@49 406 Cube< typename std::complex<typename T1::pod_type> >& out,
Chris@49 407 const mtOpCube<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar_div_pre>& X
Chris@49 408 )
Chris@49 409 {
Chris@49 410 arma_extra_debug_sigprint();
Chris@49 411
Chris@49 412 typedef typename std::complex<typename T1::pod_type> eT;
Chris@49 413
Chris@49 414 const ProxyCube<T1> A(X.m);
Chris@49 415
Chris@49 416 out.set_size(A.get_n_rows(), A.get_n_cols(), A.get_n_slices());
Chris@49 417
Chris@49 418 const eT k = X.aux_out_eT;
Chris@49 419 const uword n_elem = out.n_elem;
Chris@49 420 eT* out_mem = out.memptr();
Chris@49 421
Chris@49 422 for(uword i=0; i<n_elem; ++i)
Chris@49 423 {
Chris@49 424 out_mem[i] = k / A[i];
Chris@49 425 }
Chris@49 426 }
Chris@49 427
Chris@49 428
Chris@49 429
Chris@49 430 template<typename T1>
Chris@49 431 inline
Chris@49 432 void
Chris@49 433 op_cx_scalar_div_post::apply
Chris@49 434 (
Chris@49 435 Cube< typename std::complex<typename T1::pod_type> >& out,
Chris@49 436 const mtOpCube<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar_div_post>& X
Chris@49 437 )
Chris@49 438 {
Chris@49 439 arma_extra_debug_sigprint();
Chris@49 440
Chris@49 441 typedef typename std::complex<typename T1::pod_type> eT;
Chris@49 442
Chris@49 443 const ProxyCube<T1> A(X.m);
Chris@49 444
Chris@49 445 out.set_size(A.get_n_rows(), A.get_n_cols(), A.get_n_slices());
Chris@49 446
Chris@49 447 const eT k = X.aux_out_eT;
Chris@49 448 const uword n_elem = out.n_elem;
Chris@49 449 eT* out_mem = out.memptr();
Chris@49 450
Chris@49 451 for(uword i=0; i<n_elem; ++i)
Chris@49 452 {
Chris@49 453 out_mem[i] = A[i] / k;
Chris@49 454 }
Chris@49 455 }
Chris@49 456
Chris@49 457
Chris@49 458
Chris@49 459 //! @}