Chris@49
|
1 // Copyright (C) 2012 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 spop_misc
|
Chris@49
|
9 //! @{
|
Chris@49
|
10
|
Chris@49
|
11
|
Chris@49
|
12
|
Chris@49
|
13 namespace priv
|
Chris@49
|
14 {
|
Chris@49
|
15 template<typename eT>
|
Chris@49
|
16 struct functor_scalar_times
|
Chris@49
|
17 {
|
Chris@49
|
18 const eT k;
|
Chris@49
|
19
|
Chris@49
|
20 functor_scalar_times(const eT in_k) : k(in_k) {}
|
Chris@49
|
21
|
Chris@49
|
22 arma_inline eT operator()(const eT val) const { return val * k; }
|
Chris@49
|
23 };
|
Chris@49
|
24 }
|
Chris@49
|
25
|
Chris@49
|
26
|
Chris@49
|
27
|
Chris@49
|
28 template<typename T1>
|
Chris@49
|
29 inline
|
Chris@49
|
30 void
|
Chris@49
|
31 spop_scalar_times::apply(SpMat<typename T1::elem_type>& out, const SpOp<T1,spop_scalar_times>& in)
|
Chris@49
|
32 {
|
Chris@49
|
33 arma_extra_debug_sigprint();
|
Chris@49
|
34
|
Chris@49
|
35 typedef typename T1::elem_type eT;
|
Chris@49
|
36
|
Chris@49
|
37 out.init_xform(in.m, priv::functor_scalar_times<eT>(in.aux));
|
Chris@49
|
38 }
|
Chris@49
|
39
|
Chris@49
|
40
|
Chris@49
|
41
|
Chris@49
|
42 namespace priv
|
Chris@49
|
43 {
|
Chris@49
|
44 struct functor_square
|
Chris@49
|
45 {
|
Chris@49
|
46 template<typename eT>
|
Chris@49
|
47 arma_inline eT operator()(const eT val) const { return val*val; }
|
Chris@49
|
48 };
|
Chris@49
|
49 }
|
Chris@49
|
50
|
Chris@49
|
51
|
Chris@49
|
52
|
Chris@49
|
53 template<typename T1>
|
Chris@49
|
54 inline
|
Chris@49
|
55 void
|
Chris@49
|
56 spop_square::apply(SpMat<typename T1::elem_type>& out, const SpOp<T1,spop_square>& in)
|
Chris@49
|
57 {
|
Chris@49
|
58 arma_extra_debug_sigprint();
|
Chris@49
|
59
|
Chris@49
|
60 out.init_xform(in.m, priv::functor_square());
|
Chris@49
|
61 }
|
Chris@49
|
62
|
Chris@49
|
63
|
Chris@49
|
64
|
Chris@49
|
65 namespace priv
|
Chris@49
|
66 {
|
Chris@49
|
67 struct functor_sqrt
|
Chris@49
|
68 {
|
Chris@49
|
69 template<typename eT>
|
Chris@49
|
70 arma_inline eT operator()(const eT val) const { return eop_aux::sqrt(val); }
|
Chris@49
|
71 };
|
Chris@49
|
72 }
|
Chris@49
|
73
|
Chris@49
|
74
|
Chris@49
|
75
|
Chris@49
|
76 template<typename T1>
|
Chris@49
|
77 inline
|
Chris@49
|
78 void
|
Chris@49
|
79 spop_sqrt::apply(SpMat<typename T1::elem_type>& out, const SpOp<T1,spop_sqrt>& in)
|
Chris@49
|
80 {
|
Chris@49
|
81 arma_extra_debug_sigprint();
|
Chris@49
|
82
|
Chris@49
|
83 out.init_xform(in.m, priv::functor_sqrt());
|
Chris@49
|
84 }
|
Chris@49
|
85
|
Chris@49
|
86
|
Chris@49
|
87
|
Chris@49
|
88 namespace priv
|
Chris@49
|
89 {
|
Chris@49
|
90 struct functor_abs
|
Chris@49
|
91 {
|
Chris@49
|
92 template<typename eT>
|
Chris@49
|
93 arma_inline eT operator()(const eT val) const { return eop_aux::arma_abs(val); }
|
Chris@49
|
94 };
|
Chris@49
|
95 }
|
Chris@49
|
96
|
Chris@49
|
97
|
Chris@49
|
98
|
Chris@49
|
99 template<typename T1>
|
Chris@49
|
100 inline
|
Chris@49
|
101 void
|
Chris@49
|
102 spop_abs::apply(SpMat<typename T1::elem_type>& out, const SpOp<T1,spop_abs>& in)
|
Chris@49
|
103 {
|
Chris@49
|
104 arma_extra_debug_sigprint();
|
Chris@49
|
105
|
Chris@49
|
106 out.init_xform(in.m, priv::functor_abs());
|
Chris@49
|
107 }
|
Chris@49
|
108
|
Chris@49
|
109
|
Chris@49
|
110
|
Chris@49
|
111 namespace priv
|
Chris@49
|
112 {
|
Chris@49
|
113 struct functor_cx_abs
|
Chris@49
|
114 {
|
Chris@49
|
115 template<typename T>
|
Chris@49
|
116 arma_inline T operator()(const std::complex<T>& val) const { return std::abs(val); }
|
Chris@49
|
117 };
|
Chris@49
|
118 }
|
Chris@49
|
119
|
Chris@49
|
120
|
Chris@49
|
121
|
Chris@49
|
122 template<typename T1>
|
Chris@49
|
123 inline
|
Chris@49
|
124 void
|
Chris@49
|
125 spop_cx_abs::apply(SpMat<typename T1::pod_type>& out, const mtSpOp<typename T1::pod_type, T1, spop_cx_abs>& in)
|
Chris@49
|
126 {
|
Chris@49
|
127 arma_extra_debug_sigprint();
|
Chris@49
|
128
|
Chris@49
|
129 out.init_xform_mt(in.m, priv::functor_cx_abs());
|
Chris@49
|
130 }
|
Chris@49
|
131
|
Chris@49
|
132
|
Chris@49
|
133
|
Chris@49
|
134 //! @}
|