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_dot
|
Chris@49
|
10 //! @{
|
Chris@49
|
11
|
Chris@49
|
12 //! \brief
|
Chris@49
|
13 //! dot product operation
|
Chris@49
|
14
|
Chris@49
|
15 class op_dot
|
Chris@49
|
16 {
|
Chris@49
|
17 public:
|
Chris@49
|
18
|
Chris@49
|
19 template<typename eT>
|
Chris@49
|
20 arma_hot arma_pure arma_inline static
|
Chris@49
|
21 typename arma_not_cx<eT>::result
|
Chris@49
|
22 direct_dot_arma(const uword n_elem, const eT* const A, const eT* const B);
|
Chris@49
|
23
|
Chris@49
|
24 template<typename eT>
|
Chris@49
|
25 arma_hot arma_pure inline static
|
Chris@49
|
26 typename arma_cx_only<eT>::result
|
Chris@49
|
27 direct_dot_arma(const uword n_elem, const eT* const A, const eT* const B);
|
Chris@49
|
28
|
Chris@49
|
29 template<typename eT>
|
Chris@49
|
30 arma_hot arma_pure inline static typename arma_real_only<eT>::result
|
Chris@49
|
31 direct_dot(const uword n_elem, const eT* const A, const eT* const B);
|
Chris@49
|
32
|
Chris@49
|
33 template<typename eT>
|
Chris@49
|
34 arma_hot arma_pure inline static typename arma_cx_only<eT>::result
|
Chris@49
|
35 direct_dot(const uword n_elem, const eT* const A, const eT* const B);
|
Chris@49
|
36
|
Chris@49
|
37 template<typename eT>
|
Chris@49
|
38 arma_hot arma_pure inline static typename arma_integral_only<eT>::result
|
Chris@49
|
39 direct_dot(const uword n_elem, const eT* const A, const eT* const B);
|
Chris@49
|
40
|
Chris@49
|
41
|
Chris@49
|
42 template<typename eT>
|
Chris@49
|
43 arma_hot arma_pure inline static eT direct_dot(const uword n_elem, const eT* const A, const eT* const B, const eT* C);
|
Chris@49
|
44
|
Chris@49
|
45 template<typename T1, typename T2>
|
Chris@49
|
46 arma_hot inline static typename T1::elem_type apply(const T1& X, const T2& Y);
|
Chris@49
|
47
|
Chris@49
|
48 template<typename T1, typename T2>
|
Chris@49
|
49 arma_hot inline static typename arma_not_cx<typename T1::elem_type>::result apply_proxy(const Proxy<T1>& PA, const Proxy<T2>& PB);
|
Chris@49
|
50
|
Chris@49
|
51 template<typename T1, typename T2>
|
Chris@49
|
52 arma_hot inline static typename arma_cx_only<typename T1::elem_type>::result apply_proxy(const Proxy<T1>& PA, const Proxy<T2>& PB);
|
Chris@49
|
53
|
Chris@49
|
54 template<typename eT, typename TA>
|
Chris@49
|
55 arma_hot inline static eT dot_and_copy_row(eT* out, const TA& A, const uword row, const eT* B_mem, const uword N);
|
Chris@49
|
56 };
|
Chris@49
|
57
|
Chris@49
|
58
|
Chris@49
|
59
|
Chris@49
|
60 //! \brief
|
Chris@49
|
61 //! normalised dot product operation
|
Chris@49
|
62
|
Chris@49
|
63 class op_norm_dot
|
Chris@49
|
64 {
|
Chris@49
|
65 public:
|
Chris@49
|
66
|
Chris@49
|
67 template<typename T1, typename T2>
|
Chris@49
|
68 arma_hot inline static typename T1::elem_type apply (const T1& X, const T2& Y);
|
Chris@49
|
69
|
Chris@49
|
70 template<typename T1, typename T2>
|
Chris@49
|
71 arma_hot inline static typename T1::elem_type apply_unwrap(const T1& X, const T2& Y);
|
Chris@49
|
72 };
|
Chris@49
|
73
|
Chris@49
|
74
|
Chris@49
|
75
|
Chris@49
|
76 //! \brief
|
Chris@49
|
77 //! complex conjugate dot product operation
|
Chris@49
|
78
|
Chris@49
|
79 class op_cdot
|
Chris@49
|
80 {
|
Chris@49
|
81 public:
|
Chris@49
|
82
|
Chris@49
|
83 template<typename eT>
|
Chris@49
|
84 arma_hot inline static eT direct_cdot_arma(const uword n_elem, const eT* const A, const eT* const B);
|
Chris@49
|
85
|
Chris@49
|
86 template<typename eT>
|
Chris@49
|
87 arma_hot inline static eT direct_cdot(const uword n_elem, const eT* const A, const eT* const B);
|
Chris@49
|
88
|
Chris@49
|
89 template<typename T1, typename T2>
|
Chris@49
|
90 arma_hot inline static typename T1::elem_type apply (const T1& X, const T2& Y);
|
Chris@49
|
91
|
Chris@49
|
92 template<typename T1, typename T2>
|
Chris@49
|
93 arma_hot inline static typename T1::elem_type apply_unwrap(const T1& X, const T2& Y);
|
Chris@49
|
94
|
Chris@49
|
95 template<typename T1, typename T2>
|
Chris@49
|
96 arma_hot inline static typename T1::elem_type apply_proxy (const T1& X, const T2& Y);
|
Chris@49
|
97 };
|
Chris@49
|
98
|
Chris@49
|
99
|
Chris@49
|
100
|
Chris@49
|
101 //! @}
|