max@0
|
1 // Copyright (C) 2010-2011 NICTA (www.nicta.com.au)
|
max@0
|
2 // Copyright (C) 2010-2011 Conrad Sanderson
|
max@0
|
3 //
|
max@0
|
4 // This file is part of the Armadillo C++ library.
|
max@0
|
5 // It is provided without any warranty of fitness
|
max@0
|
6 // for any purpose. You can redistribute this file
|
max@0
|
7 // and/or modify it under the terms of the GNU
|
max@0
|
8 // Lesser General Public License (LGPL) as published
|
max@0
|
9 // by the Free Software Foundation, either version 3
|
max@0
|
10 // of the License or (at your option) any later version.
|
max@0
|
11 // (see http://www.opensource.org/licenses for more info)
|
max@0
|
12
|
max@0
|
13
|
max@0
|
14 //! \addtogroup eGlue
|
max@0
|
15 //! @{
|
max@0
|
16
|
max@0
|
17
|
max@0
|
18
|
max@0
|
19 template<typename T1, typename T2, typename eglue_type>
|
max@0
|
20 arma_inline
|
max@0
|
21 eGlue<T1,T2,eglue_type>::~eGlue()
|
max@0
|
22 {
|
max@0
|
23 arma_extra_debug_sigprint();
|
max@0
|
24 }
|
max@0
|
25
|
max@0
|
26
|
max@0
|
27
|
max@0
|
28 template<typename T1, typename T2, typename eglue_type>
|
max@0
|
29 arma_inline
|
max@0
|
30 eGlue<T1,T2,eglue_type>::eGlue(const T1& in_A, const T2& in_B)
|
max@0
|
31 : P1(in_A)
|
max@0
|
32 , P2(in_B)
|
max@0
|
33 {
|
max@0
|
34 arma_extra_debug_sigprint();
|
max@0
|
35
|
max@0
|
36 // arma_debug_assert_same_size( P1, P2, eglue_type::text() );
|
max@0
|
37 arma_debug_assert_same_size
|
max@0
|
38 (
|
max@0
|
39 P1.get_n_rows(), P1.get_n_cols(),
|
max@0
|
40 P2.get_n_rows(), P2.get_n_cols(),
|
max@0
|
41 eglue_type::text()
|
max@0
|
42 );
|
max@0
|
43 }
|
max@0
|
44
|
max@0
|
45
|
max@0
|
46
|
max@0
|
47 template<typename T1, typename T2, typename eglue_type>
|
max@0
|
48 arma_inline
|
max@0
|
49 uword
|
max@0
|
50 eGlue<T1,T2,eglue_type>::get_n_rows() const
|
max@0
|
51 {
|
max@0
|
52 return P1.get_n_rows();
|
max@0
|
53 }
|
max@0
|
54
|
max@0
|
55
|
max@0
|
56
|
max@0
|
57 template<typename T1, typename T2, typename eglue_type>
|
max@0
|
58 arma_inline
|
max@0
|
59 uword
|
max@0
|
60 eGlue<T1,T2,eglue_type>::get_n_cols() const
|
max@0
|
61 {
|
max@0
|
62 return P1.get_n_cols();
|
max@0
|
63 }
|
max@0
|
64
|
max@0
|
65
|
max@0
|
66
|
max@0
|
67 template<typename T1, typename T2, typename eglue_type>
|
max@0
|
68 arma_inline
|
max@0
|
69 uword
|
max@0
|
70 eGlue<T1,T2,eglue_type>::get_n_elem() const
|
max@0
|
71 {
|
max@0
|
72 return P1.get_n_elem();
|
max@0
|
73 }
|
max@0
|
74
|
max@0
|
75
|
max@0
|
76
|
max@0
|
77 template<typename T1, typename T2, typename eglue_type>
|
max@0
|
78 arma_inline
|
max@0
|
79 typename T1::elem_type
|
max@0
|
80 eGlue<T1,T2,eglue_type>::operator[] (const uword i) const
|
max@0
|
81 {
|
max@0
|
82 typedef typename T1::elem_type eT;
|
max@0
|
83
|
max@0
|
84 // the optimiser will keep only one return statement
|
max@0
|
85
|
max@0
|
86 if(is_same_type<eglue_type, eglue_plus >::value == true) { return P1[i] + P2[i]; }
|
max@0
|
87 else if(is_same_type<eglue_type, eglue_minus>::value == true) { return P1[i] - P2[i]; }
|
max@0
|
88 else if(is_same_type<eglue_type, eglue_div >::value == true) { return P1[i] / P2[i]; }
|
max@0
|
89 else if(is_same_type<eglue_type, eglue_schur>::value == true) { return P1[i] * P2[i]; }
|
max@0
|
90 }
|
max@0
|
91
|
max@0
|
92
|
max@0
|
93 template<typename T1, typename T2, typename eglue_type>
|
max@0
|
94 arma_inline
|
max@0
|
95 typename T1::elem_type
|
max@0
|
96 eGlue<T1,T2,eglue_type>::at(const uword row, const uword col) const
|
max@0
|
97 {
|
max@0
|
98 typedef typename T1::elem_type eT;
|
max@0
|
99
|
max@0
|
100 // the optimiser will keep only one return statement
|
max@0
|
101
|
max@0
|
102 if(is_same_type<eglue_type, eglue_plus >::value == true) { return P1.at(row,col) + P2.at(row,col); }
|
max@0
|
103 else if(is_same_type<eglue_type, eglue_minus>::value == true) { return P1.at(row,col) - P2.at(row,col); }
|
max@0
|
104 else if(is_same_type<eglue_type, eglue_div >::value == true) { return P1.at(row,col) / P2.at(row,col); }
|
max@0
|
105 else if(is_same_type<eglue_type, eglue_schur>::value == true) { return P1.at(row,col) * P2.at(row,col); }
|
max@0
|
106 }
|
max@0
|
107
|
max@0
|
108
|
max@0
|
109
|
max@0
|
110
|
max@0
|
111 //! @}
|