Chris@49
|
1 // Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
|
Chris@49
|
2 // Copyright (C) 2008-2012 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 fn_max
|
Chris@49
|
10 //! @{
|
Chris@49
|
11
|
Chris@49
|
12
|
Chris@49
|
13 //! \brief
|
Chris@49
|
14 //! Delayed 'maximum values' operation.
|
Chris@49
|
15 //! The dimension, along which the maxima are found, is set via 'dim'.
|
Chris@49
|
16 //! For dim = 0, the maximum value of each column is found (i.e. searches by traversing across rows).
|
Chris@49
|
17 //! For dim = 1, the maximum value of each row is found (i.e. searches by traversing across columns).
|
Chris@49
|
18 //! The default is dim = 0.
|
Chris@49
|
19
|
Chris@49
|
20 template<typename T1>
|
Chris@49
|
21 arma_inline
|
Chris@49
|
22 const Op<T1, op_max>
|
Chris@49
|
23 max
|
Chris@49
|
24 (
|
Chris@49
|
25 const T1& X,
|
Chris@49
|
26 const uword dim = 0,
|
Chris@49
|
27 const typename enable_if< is_arma_type<T1>::value == true >::result* junk1 = 0,
|
Chris@49
|
28 const typename enable_if< resolves_to_vector<T1>::value == false >::result* junk2 = 0
|
Chris@49
|
29 )
|
Chris@49
|
30 {
|
Chris@49
|
31 arma_extra_debug_sigprint();
|
Chris@49
|
32 arma_ignore(junk1);
|
Chris@49
|
33 arma_ignore(junk2);
|
Chris@49
|
34
|
Chris@49
|
35 return Op<T1, op_max>(X, dim, 0);
|
Chris@49
|
36 }
|
Chris@49
|
37
|
Chris@49
|
38
|
Chris@49
|
39
|
Chris@49
|
40 template<typename T1>
|
Chris@49
|
41 arma_inline
|
Chris@49
|
42 const Op<T1, op_max>
|
Chris@49
|
43 max
|
Chris@49
|
44 (
|
Chris@49
|
45 const T1& X,
|
Chris@49
|
46 const uword dim,
|
Chris@49
|
47 const typename enable_if<resolves_to_vector<T1>::value == true>::result* junk = 0
|
Chris@49
|
48 )
|
Chris@49
|
49 {
|
Chris@49
|
50 arma_extra_debug_sigprint();
|
Chris@49
|
51 arma_ignore(junk);
|
Chris@49
|
52
|
Chris@49
|
53 return Op<T1, op_max>(X, dim, 0);
|
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 arma_warn_unused
|
Chris@49
|
61 typename T1::elem_type
|
Chris@49
|
62 max
|
Chris@49
|
63 (
|
Chris@49
|
64 const T1& X,
|
Chris@49
|
65 const arma_empty_class junk1 = arma_empty_class(),
|
Chris@49
|
66 const typename enable_if<resolves_to_vector<T1>::value == true>::result* junk2 = 0
|
Chris@49
|
67 )
|
Chris@49
|
68 {
|
Chris@49
|
69 arma_extra_debug_sigprint();
|
Chris@49
|
70 arma_ignore(junk1);
|
Chris@49
|
71 arma_ignore(junk2);
|
Chris@49
|
72
|
Chris@49
|
73 return op_max::max(X);
|
Chris@49
|
74 }
|
Chris@49
|
75
|
Chris@49
|
76
|
Chris@49
|
77
|
Chris@49
|
78 //! \brief
|
Chris@49
|
79 //! Immediate 'find maximum value' operation,
|
Chris@49
|
80 //! invoked, for example, by: max(max(A))
|
Chris@49
|
81 template<typename T1>
|
Chris@49
|
82 inline
|
Chris@49
|
83 arma_warn_unused
|
Chris@49
|
84 typename T1::elem_type
|
Chris@49
|
85 max(const Op<T1, op_max>& in)
|
Chris@49
|
86 {
|
Chris@49
|
87 arma_extra_debug_sigprint();
|
Chris@49
|
88 arma_extra_debug_print("max(): two consecutive max() calls detected");
|
Chris@49
|
89
|
Chris@49
|
90 return op_max::max(in.m);
|
Chris@49
|
91 }
|
Chris@49
|
92
|
Chris@49
|
93
|
Chris@49
|
94
|
Chris@49
|
95 template<typename T1>
|
Chris@49
|
96 arma_inline
|
Chris@49
|
97 const Op< Op<T1, op_max>, op_max>
|
Chris@49
|
98 max(const Op<T1, op_max>& in, const uword dim)
|
Chris@49
|
99 {
|
Chris@49
|
100 arma_extra_debug_sigprint();
|
Chris@49
|
101
|
Chris@49
|
102 return Op< Op<T1, op_max>, op_max>(in, dim, 0);
|
Chris@49
|
103 }
|
Chris@49
|
104
|
Chris@49
|
105
|
Chris@49
|
106
|
Chris@49
|
107 template<typename T>
|
Chris@49
|
108 arma_inline
|
Chris@49
|
109 arma_warn_unused
|
Chris@49
|
110 const typename arma_scalar_only<T>::result &
|
Chris@49
|
111 max(const T& x)
|
Chris@49
|
112 {
|
Chris@49
|
113 return x;
|
Chris@49
|
114 }
|
Chris@49
|
115
|
Chris@49
|
116
|
Chris@49
|
117
|
Chris@49
|
118
|
Chris@49
|
119 template<typename T1>
|
Chris@49
|
120 inline
|
Chris@49
|
121 arma_warn_unused
|
Chris@49
|
122 typename
|
Chris@49
|
123 enable_if2
|
Chris@49
|
124 <
|
Chris@49
|
125 (is_arma_sparse_type<T1>::value == true) && (resolves_to_sparse_vector<T1>::value == true),
|
Chris@49
|
126 typename T1::elem_type
|
Chris@49
|
127 >::result
|
Chris@49
|
128 max(const T1& x)
|
Chris@49
|
129 {
|
Chris@49
|
130 arma_extra_debug_sigprint();
|
Chris@49
|
131
|
Chris@49
|
132 return spop_max::vector_max(x);
|
Chris@49
|
133 }
|
Chris@49
|
134
|
Chris@49
|
135
|
Chris@49
|
136
|
Chris@49
|
137 template<typename T1>
|
Chris@49
|
138 inline
|
Chris@49
|
139 typename
|
Chris@49
|
140 enable_if2
|
Chris@49
|
141 <
|
Chris@49
|
142 (is_arma_sparse_type<T1>::value == true) && (resolves_to_sparse_vector<T1>::value == false),
|
Chris@49
|
143 const SpOp<T1, spop_max>
|
Chris@49
|
144 >::result
|
Chris@49
|
145 max(const T1& X, const uword dim = 0)
|
Chris@49
|
146 {
|
Chris@49
|
147 arma_extra_debug_sigprint();
|
Chris@49
|
148
|
Chris@49
|
149 return SpOp<T1, spop_max>(X, dim, 0);
|
Chris@49
|
150 }
|
Chris@49
|
151
|
Chris@49
|
152
|
Chris@49
|
153
|
Chris@49
|
154 template<typename T1>
|
Chris@49
|
155 inline
|
Chris@49
|
156 arma_warn_unused
|
Chris@49
|
157 typename T1::elem_type
|
Chris@49
|
158 max(const SpOp<T1, spop_max>& X)
|
Chris@49
|
159 {
|
Chris@49
|
160 arma_extra_debug_sigprint();
|
Chris@49
|
161 arma_extra_debug_print("max(): two consecutive max() calls detected");
|
Chris@49
|
162
|
Chris@49
|
163 return spop_max::vector_max(X.m);
|
Chris@49
|
164 }
|
Chris@49
|
165
|
Chris@49
|
166
|
Chris@49
|
167
|
Chris@49
|
168 template<typename T1>
|
Chris@49
|
169 inline
|
Chris@49
|
170 const SpOp< SpOp<T1, spop_max>, spop_max>
|
Chris@49
|
171 max(const SpOp<T1, spop_max>& in, const uword dim)
|
Chris@49
|
172 {
|
Chris@49
|
173 arma_extra_debug_sigprint();
|
Chris@49
|
174
|
Chris@49
|
175 return SpOp< SpOp<T1, spop_max>, spop_max>(in, dim, 0);
|
Chris@49
|
176 }
|
Chris@49
|
177
|
Chris@49
|
178
|
Chris@49
|
179
|
Chris@49
|
180 //! @}
|