Chris@49
|
1 // Copyright (C) 2013 Conrad Sanderson
|
Chris@49
|
2 //
|
Chris@49
|
3 // This Source Code Form is subject to the terms of the Mozilla Public
|
Chris@49
|
4 // License, v. 2.0. If a copy of the MPL was not distributed with this
|
Chris@49
|
5 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
Chris@49
|
6
|
Chris@49
|
7
|
Chris@49
|
8 //! \addtogroup xvec_htrans
|
Chris@49
|
9 //! @{
|
Chris@49
|
10
|
Chris@49
|
11
|
Chris@49
|
12 template<typename eT>
|
Chris@49
|
13 inline
|
Chris@49
|
14 xvec_htrans<eT>::xvec_htrans(const eT* const in_mem, const uword in_n_rows, const uword in_n_cols)
|
Chris@49
|
15 : mem (in_mem )
|
Chris@49
|
16 , n_rows(in_n_cols ) // deliberately swapped
|
Chris@49
|
17 , n_cols(in_n_rows )
|
Chris@49
|
18 , n_elem(in_n_rows*in_n_cols)
|
Chris@49
|
19 {
|
Chris@49
|
20 arma_extra_debug_sigprint();
|
Chris@49
|
21 }
|
Chris@49
|
22
|
Chris@49
|
23
|
Chris@49
|
24
|
Chris@49
|
25 template<typename eT>
|
Chris@49
|
26 inline
|
Chris@49
|
27 void
|
Chris@49
|
28 xvec_htrans<eT>::extract(Mat<eT>& out) const
|
Chris@49
|
29 {
|
Chris@49
|
30 arma_extra_debug_sigprint();
|
Chris@49
|
31
|
Chris@49
|
32 // NOTE: this function assumes that matrix 'out' has already been set to the correct size
|
Chris@49
|
33
|
Chris@49
|
34 const eT* in_mem = mem;
|
Chris@49
|
35 eT* out_mem = out.memptr();
|
Chris@49
|
36
|
Chris@49
|
37 const uword N = n_elem;
|
Chris@49
|
38
|
Chris@49
|
39 for(uword ii=0; ii < N; ++ii)
|
Chris@49
|
40 {
|
Chris@49
|
41 out_mem[ii] = access::alt_conj( in_mem[ii] );
|
Chris@49
|
42 }
|
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 eT
|
Chris@49
|
50 xvec_htrans<eT>::operator[](const uword ii) const
|
Chris@49
|
51 {
|
Chris@49
|
52 return access::alt_conj( mem[ii] );
|
Chris@49
|
53 }
|
Chris@49
|
54
|
Chris@49
|
55
|
Chris@49
|
56
|
Chris@49
|
57 template<typename eT>
|
Chris@49
|
58 inline
|
Chris@49
|
59 eT
|
Chris@49
|
60 xvec_htrans<eT>::at_alt(const uword ii) const
|
Chris@49
|
61 {
|
Chris@49
|
62 return access::alt_conj( mem[ii] );
|
Chris@49
|
63 }
|
Chris@49
|
64
|
Chris@49
|
65
|
Chris@49
|
66
|
Chris@49
|
67 template<typename eT>
|
Chris@49
|
68 inline
|
Chris@49
|
69 eT
|
Chris@49
|
70 xvec_htrans<eT>::at(const uword in_row, const uword in_col) const
|
Chris@49
|
71 {
|
Chris@49
|
72 //return (n_rows == 1) ? access::alt_conj( mem[in_col] ) : access::alt_conj( mem[in_row] );
|
Chris@49
|
73
|
Chris@49
|
74 return access::alt_conj( mem[in_row + in_col] ); // either in_row or in_col must be zero, as we're storing a vector
|
Chris@49
|
75 }
|
Chris@49
|
76
|
Chris@49
|
77
|
Chris@49
|
78
|
Chris@49
|
79 //! @}
|