4905
|
1 /* |
|
2 |
|
3 Copyright (C) 1996, 1997 John W. Eaton |
|
4 |
|
5 This file is part of Octave. |
|
6 |
|
7 Octave is free software; you can redistribute it and/or modify it |
|
8 under the terms of the GNU General Public License as published by the |
|
9 Free Software Foundation; either version 2, or (at your option) any |
|
10 later version. |
|
11 |
|
12 Octave is distributed in the hope that it will be useful, but WITHOUT |
|
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
15 for more details. |
|
16 |
|
17 You should have received a copy of the GNU General Public License |
|
18 along with Octave; see the file COPYING. If not, write to the Free |
5307
|
19 Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
|
20 02110-1301, USA. |
4905
|
21 |
|
22 */ |
|
23 |
4952
|
24 #include "quit.h" |
|
25 |
5075
|
26 #define OCTAVE_CONCAT_FN2(T1, T2) \ |
|
27 DEFNDCATOP_FN2 (T1 ## _ ## T2 ## _s_s, T1 ## _scalar, T2 ## _scalar, , T1 ## NDArray, T1 ## _array, T2 ## _array, concat) \ |
|
28 DEFNDCATOP_FN2 (T1 ## _ ## T2 ## _s_m, T1 ## _scalar, T2 ## _matrix, , T1 ## NDArray, T1 ## _array, T2 ## _array, concat) \ |
|
29 DEFNDCATOP_FN2 (T1 ## _ ## T2 ## _m_s, T1 ## _matrix, T2 ## _scalar, , T1 ## NDArray, T1 ## _array, T2 ## _array, concat) \ |
|
30 DEFNDCATOP_FN2 (T1 ## _ ## T2 ## _m_m, T1 ## _matrix, T2 ## _matrix, , T1 ## NDArray, T1 ## _array, T2 ## _array, concat) |
|
31 |
|
32 #define OCTAVE_INSTALL_CONCAT_FN2(T1, T2) \ |
|
33 INSTALL_CATOP (octave_ ## T1 ## _scalar, octave_ ## T2 ## _scalar, T1 ## _ ## T2 ## _s_s) \ |
|
34 INSTALL_CATOP (octave_ ## T1 ## _scalar, octave_ ## T2 ## _matrix, T1 ## _ ## T2 ## _s_m) \ |
|
35 INSTALL_CATOP (octave_ ## T1 ## _matrix, octave_ ## T2 ## _scalar, T1 ## _ ## T2 ## _m_s) \ |
|
36 INSTALL_CATOP (octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, T1 ## _ ## T2 ## _m_m) |
|
37 |
|
38 #define OCTAVE_DOUBLE_INT_CONCAT_FN(TYPE) \ |
|
39 DEFNDCATOP_FN2 (double ## _ ## TYPE ## _s_s, scalar, TYPE ## _scalar, TYPE ## NDArray, , array, TYPE ## _array, concat) \ |
|
40 DEFNDCATOP_FN2 (double ## _ ## TYPE ## _s_m, scalar, TYPE ## _matrix, TYPE ## NDArray, , array, TYPE ## _array, concat) \ |
|
41 DEFNDCATOP_FN2 (double ## _ ## TYPE ## _m_s, matrix, TYPE ## _scalar, TYPE ## NDArray, , array, TYPE ## _array, concat) \ |
|
42 DEFNDCATOP_FN2 (double ## _ ## TYPE ## _m_m, matrix, TYPE ## _matrix, TYPE ## NDArray, , array, TYPE ## _array, concat) |
|
43 |
|
44 #define OCTAVE_INSTALL_DOUBLE_INT_CONCAT_FN(TYPE) \ |
|
45 INSTALL_CATOP (octave_scalar, octave_ ## TYPE ## _scalar, double ## _ ## TYPE ## _s_s) \ |
|
46 INSTALL_CATOP (octave_scalar, octave_ ## TYPE ## _matrix, double ## _ ## TYPE ## _s_m) \ |
|
47 INSTALL_CATOP (octave_matrix, octave_ ## TYPE ## _scalar, double ## _ ## TYPE ## _m_s) \ |
|
48 INSTALL_CATOP (octave_matrix, octave_ ## TYPE ## _matrix, double ## _ ## TYPE ## _m_m) |
|
49 |
|
50 #define OCTAVE_INT_DOUBLE_CONCAT_FN(TYPE) \ |
|
51 DEFNDCATOP_FN2 (TYPE ## _ ## double ## _s_s, TYPE ## _scalar, scalar, , TYPE ## NDArray, TYPE ## _array, array, concat) \ |
|
52 DEFNDCATOP_FN2 (TYPE ## _ ## double ## _s_m, TYPE ## _scalar, matrix, , TYPE ## NDArray, TYPE ## _array, array, concat) \ |
|
53 DEFNDCATOP_FN2 (TYPE ## _ ## double ## _m_s, TYPE ## _matrix, scalar, , TYPE ## NDArray, TYPE ## _array, array, concat) \ |
|
54 DEFNDCATOP_FN2 (TYPE ## _ ## double ## _m_m, TYPE ## _matrix, matrix, , TYPE ## NDArray, TYPE ## _array, array, concat) |
|
55 |
|
56 #define OCTAVE_INSTALL_INT_DOUBLE_CONCAT_FN(TYPE) \ |
|
57 INSTALL_CATOP (octave_ ## TYPE ## _scalar, octave_scalar, TYPE ## _ ## double ## _s_s) \ |
|
58 INSTALL_CATOP (octave_ ## TYPE ## _scalar, octave_matrix, TYPE ## _ ## double ## _s_m) \ |
|
59 INSTALL_CATOP (octave_ ## TYPE ## _matrix, octave_scalar, TYPE ## _ ## double ## _m_s) \ |
|
60 INSTALL_CATOP (octave_ ## TYPE ## _matrix, octave_matrix, TYPE ## _ ## double ## _m_m) |
|
61 |
5533
|
62 // For compatibility, concatenation with a character always returns a |
|
63 // character. |
|
64 |
|
65 #define OCTAVE_CHAR_INT_CONCAT_FN(TYPE) \ |
|
66 DEFNDCHARCATOP_FN (char ## _ ## TYPE ## _m_s, char_matrix, TYPE ## _scalar, concat) \ |
|
67 DEFNDCHARCATOP_FN (char ## _ ## TYPE ## _m_m, char_matrix, TYPE ## _matrix, concat) |
|
68 |
|
69 #define OCTAVE_INSTALL_CHAR_INT_CONCAT_FN(TYPE) \ |
|
70 INSTALL_CATOP (octave_char_matrix_str, octave_ ## TYPE ## _scalar, char ## _ ## TYPE ## _m_s) \ |
|
71 INSTALL_CATOP (octave_char_matrix_str, octave_ ## TYPE ## _matrix, char ## _ ## TYPE ## _m_m) \ |
|
72 INSTALL_CATOP (octave_char_matrix_sq_str, octave_ ## TYPE ## _scalar, char ## _ ## TYPE ## _m_s) \ |
|
73 INSTALL_CATOP (octave_char_matrix_sq_str, octave_ ## TYPE ## _matrix, char ## _ ## TYPE ## _m_m) |
|
74 |
|
75 #define OCTAVE_INT_CHAR_CONCAT_FN(TYPE) \ |
|
76 DEFNDCHARCATOP_FN (TYPE ## _ ## char ## _s_m, TYPE ## _scalar, char_matrix, concat) \ |
|
77 DEFNDCHARCATOP_FN (TYPE ## _ ## char ## _m_m, TYPE ## _matrix, char_matrix, concat) |
|
78 |
|
79 #define OCTAVE_INSTALL_INT_CHAR_CONCAT_FN(TYPE) \ |
|
80 INSTALL_CATOP (octave_ ## TYPE ## _scalar, octave_char_matrix_str, TYPE ## _ ## char ## _s_m) \ |
|
81 INSTALL_CATOP (octave_ ## TYPE ## _matrix, octave_char_matrix_str, TYPE ## _ ## char ## _m_m) \ |
|
82 INSTALL_CATOP (octave_ ## TYPE ## _scalar, octave_char_matrix_sq_str, TYPE ## _ ## char ## _s_m) \ |
|
83 INSTALL_CATOP (octave_ ## TYPE ## _matrix, octave_char_matrix_sq_str, TYPE ## _ ## char ## _m_m) |
|
84 |
4915
|
85 #define OCTAVE_CONCAT_FN(TYPE) \ |
|
86 DEFNDCATOP_FN (TYPE ## _s_s, TYPE ## _scalar, TYPE ## _scalar, TYPE ## _array, TYPE ## _array, concat) \ |
|
87 DEFNDCATOP_FN (TYPE ## _s_m, TYPE ## _scalar, TYPE ## _matrix, TYPE ## _array, TYPE ## _array, concat) \ |
|
88 DEFNDCATOP_FN (TYPE ## _m_s, TYPE ## _matrix, TYPE ## _scalar, TYPE ## _array, TYPE ## _array, concat) \ |
|
89 DEFNDCATOP_FN (TYPE ## _m_m, TYPE ## _matrix, TYPE ## _matrix, TYPE ## _array, TYPE ## _array, concat) |
|
90 |
|
91 #define OCTAVE_INSTALL_CONCAT_FN(TYPE) \ |
|
92 INSTALL_CATOP (octave_ ## TYPE ## _scalar, octave_ ## TYPE ## _scalar, TYPE ## _s_s) \ |
|
93 INSTALL_CATOP (octave_ ## TYPE ## _scalar, octave_ ## TYPE ## _matrix, TYPE ## _s_m) \ |
|
94 INSTALL_CATOP (octave_ ## TYPE ## _matrix, octave_ ## TYPE ## _scalar, TYPE ## _m_s) \ |
|
95 INSTALL_CATOP (octave_ ## TYPE ## _matrix, octave_ ## TYPE ## _matrix, TYPE ## _m_m) |
|
96 |
4905
|
97 #define OCTAVE_S_INT_UNOPS(TYPE) \ |
|
98 /* scalar unary ops. */ \ |
|
99 \ |
|
100 DEFUNOP_OP (s_not, TYPE ## _scalar, !) \ |
4965
|
101 DEFUNOP_OP (s_uplus, TYPE ## _scalar, /* no-op */) \ |
4905
|
102 DEFUNOP_OP (s_uminus, TYPE ## _scalar, -) \ |
|
103 DEFUNOP_OP (s_transpose, TYPE ## _scalar, /* no-op */) \ |
|
104 DEFUNOP_OP (s_hermitian, TYPE ## _scalar, /* no-op */) \ |
|
105 \ |
|
106 /* DEFNCUNOP_METHOD (s_incr, TYPE ## _scalar, increment) */ \ |
|
107 /* DEFNCUNOP_METHOD (s_decr, TYPE ## _scalar, decrement) */ |
|
108 |
4953
|
109 #define OCTAVE_SS_INT_ARITH_OPS(PFX, T1, T2) \ |
4905
|
110 /* scalar by scalar ops. */ \ |
|
111 \ |
4953
|
112 DEFBINOP_OP (PFX ## _add, T1 ## scalar, T2 ## scalar, +) \ |
|
113 DEFBINOP_OP (PFX ## _sub, T1 ## scalar, T2 ## scalar, -) \ |
|
114 DEFBINOP_OP (PFX ## _mul, T1 ## scalar, T2 ## scalar, *) \ |
4905
|
115 \ |
4953
|
116 DEFBINOP (PFX ## _div, T1 ## scalar, T2 ## scalar) \ |
4905
|
117 { \ |
4953
|
118 CAST_BINOP_ARGS (const octave_ ## T1 ## scalar&, const octave_ ## T2 ## scalar&); \ |
4905
|
119 \ |
4953
|
120 if (! v2.T2 ## scalar_value ()) \ |
4905
|
121 gripe_divide_by_zero (); \ |
|
122 \ |
4953
|
123 return octave_value (v1.T1 ## scalar_value () / v2.T2 ## scalar_value ()); \ |
4905
|
124 } \ |
|
125 \ |
4953
|
126 DEFBINOP_FN (PFX ## _pow, T1 ## scalar, T2 ## scalar, xpow) \ |
4905
|
127 \ |
4953
|
128 DEFBINOP (PFX ## _ldiv, T1 ## scalar, T2 ## scalar) \ |
4905
|
129 { \ |
4953
|
130 CAST_BINOP_ARGS (const octave_ ## T1 ## scalar&, const octave_ ## T2 ## scalar&); \ |
4905
|
131 \ |
4953
|
132 if (! v1.T1 ## scalar_value ()) \ |
4905
|
133 gripe_divide_by_zero (); \ |
|
134 \ |
4953
|
135 return octave_value (v2.T2 ## scalar_value () / v1.T1 ## scalar_value ()); \ |
|
136 } \ |
|
137 \ |
|
138 DEFBINOP_OP (PFX ## _el_mul, T1 ## scalar, T2 ## scalar, *) \ |
|
139 \ |
|
140 DEFBINOP (PFX ## _el_div, T1 ## scalar, T2 ## scalar) \ |
|
141 { \ |
|
142 CAST_BINOP_ARGS (const octave_ ## T1 ## scalar&, const octave_ ## T2 ## scalar&); \ |
|
143 \ |
|
144 if (! v2.T2 ## scalar_value ()) \ |
|
145 gripe_divide_by_zero (); \ |
|
146 \ |
|
147 return octave_value (v1.T1 ## scalar_value () / v2.T2 ## scalar_value ()); \ |
4905
|
148 } \ |
|
149 \ |
4953
|
150 DEFBINOP_FN (PFX ## _el_pow, T1 ## scalar, T2 ## scalar, xpow) \ |
4905
|
151 \ |
4953
|
152 DEFBINOP (PFX ## _el_ldiv, T1 ## scalar, T2 ## scalar) \ |
4905
|
153 { \ |
4953
|
154 CAST_BINOP_ARGS (const octave_ ## T1 ## scalar&, const octave_ ## T2 ## scalar&); \ |
4905
|
155 \ |
4953
|
156 if (! v1.T1 ## scalar_value ()) \ |
4905
|
157 gripe_divide_by_zero (); \ |
|
158 \ |
4953
|
159 return octave_value (v2.T2 ## scalar_value () / v1.T1 ## scalar_value ()); \ |
|
160 } \ |
|
161 |
5030
|
162 #define OCTAVE_SS_INT_BOOL_OPS(PFX, T1, T2, Z1, Z2) \ |
4964
|
163 DEFBINOP (PFX ## _el_and, T2, T2) \ |
|
164 { \ |
|
165 CAST_BINOP_ARGS (const octave_ ## T1 ## scalar&, const octave_ ## T2 ## scalar&); \ |
|
166 \ |
5030
|
167 return v1.T1 ## scalar_value () != Z1 && v2.T2 ## scalar_value () != Z2; \ |
4964
|
168 } \ |
|
169 \ |
|
170 DEFBINOP (PFX ## _el_or, T1, T2) \ |
|
171 { \ |
|
172 CAST_BINOP_ARGS (const octave_ ## T1 ## scalar&, const octave_ ## T2 ## scalar&); \ |
|
173 \ |
5030
|
174 return v1.T1 ## scalar_value () != Z1 || v2.T2 ## scalar_value () != Z2; \ |
4964
|
175 } |
4953
|
176 |
|
177 #define OCTAVE_SS_INT_CMP_OPS(PFX, T1, T2) \ |
|
178 DEFBINOP_OP (PFX ## _lt, T1 ## scalar, T2 ## scalar, <) \ |
|
179 DEFBINOP_OP (PFX ## _le, T1 ## scalar, T2 ## scalar, <=) \ |
|
180 DEFBINOP_OP (PFX ## _eq, T1 ## scalar, T2 ## scalar, ==) \ |
|
181 DEFBINOP_OP (PFX ## _ge, T1 ## scalar, T2 ## scalar, >=) \ |
|
182 DEFBINOP_OP (PFX ## _gt, T1 ## scalar, T2 ## scalar, >) \ |
|
183 DEFBINOP_OP (PFX ## _ne, T1 ## scalar, T2 ## scalar, !=) |
|
184 |
|
185 #define OCTAVE_SS_POW_OPS(T1, T2) \ |
|
186 octave_value \ |
|
187 xpow (const octave_ ## T1& a, const octave_ ## T2& b) \ |
|
188 { \ |
|
189 return pow (a, b); \ |
4905
|
190 } \ |
|
191 \ |
4953
|
192 octave_value \ |
|
193 xpow (const octave_ ## T1& a, double b) \ |
4905
|
194 { \ |
4953
|
195 return pow (a, b); \ |
4905
|
196 } \ |
4953
|
197 \ |
|
198 octave_value \ |
|
199 xpow (double a, const octave_ ## T1& b) \ |
|
200 { \ |
|
201 return pow (a, b); \ |
|
202 } |
4952
|
203 |
4905
|
204 #define OCTAVE_SS_INT_OPS(TYPE) \ |
|
205 OCTAVE_S_INT_UNOPS (TYPE) \ |
4952
|
206 OCTAVE_SS_POW_OPS (TYPE, TYPE) \ |
4953
|
207 OCTAVE_SS_INT_ARITH_OPS (ss, TYPE ## _, TYPE ## _) \ |
|
208 OCTAVE_SS_INT_ARITH_OPS (sx, TYPE ## _, ) \ |
|
209 OCTAVE_SS_INT_ARITH_OPS (xs, , TYPE ## _) \ |
|
210 OCTAVE_SS_INT_CMP_OPS (ss, TYPE ## _, TYPE ## _) \ |
|
211 OCTAVE_SS_INT_CMP_OPS (sx, TYPE ## _, ) \ |
|
212 OCTAVE_SS_INT_CMP_OPS (xs, , TYPE ## _) \ |
5030
|
213 OCTAVE_SS_INT_BOOL_OPS (ss, TYPE ## _, TYPE ## _, octave_ ## TYPE (0), octave_ ## TYPE (0)) \ |
|
214 OCTAVE_SS_INT_BOOL_OPS (sx, TYPE ## _, , octave_ ## TYPE (0), 0) \ |
|
215 OCTAVE_SS_INT_BOOL_OPS (xs, , TYPE ## _, 0, octave_ ## TYPE (0)) |
4905
|
216 |
4953
|
217 #define OCTAVE_SM_INT_ARITH_OPS(PFX, TS, TM) \ |
4905
|
218 /* scalar by matrix ops. */ \ |
|
219 \ |
4953
|
220 DEFNDBINOP_OP (PFX ## _add, TS ## scalar, TM ## matrix, TS ## scalar, TM ## array, +) \ |
|
221 DEFNDBINOP_OP (PFX ## _sub, TS ## scalar, TM ## matrix, TS ## scalar, TM ## array, -) \ |
|
222 DEFNDBINOP_OP (PFX ## _mul, TS ## scalar, TM ## matrix, TS ## scalar, TM ## array, *) \ |
4905
|
223 \ |
4953
|
224 /* DEFBINOP (PFX ## _div, TS ## scalar, TM ## matrix) */ \ |
4905
|
225 /* { */ \ |
4953
|
226 /* CAST_BINOP_ARGS (const octave_ ## TS ## scalar&, const octave_ ## TM ## matrix&); */ \ |
4905
|
227 /* */ \ |
4953
|
228 /* Matrix m1 = v1.TM ## matrix_value (); */ \ |
|
229 /* Matrix m2 = v2.TM ## matrix_value (); */ \ |
4905
|
230 /* */ \ |
|
231 /* return octave_value (xdiv (m1, m2)); */ \ |
|
232 /* } */ \ |
|
233 \ |
4953
|
234 /* DEFBINOP_FN (PFX ## _pow, TS ## scalar, TM ## matrix, xpow) */ \ |
|
235 \ |
|
236 DEFBINOP (PFX ## _ldiv, TS ## scalar, TM ## matrix) \ |
|
237 { \ |
|
238 CAST_BINOP_ARGS (const octave_ ## TS ## scalar&, const octave_ ## TM ## matrix&); \ |
4905
|
239 \ |
4953
|
240 if (! v1.TS ## scalar_value ()) \ |
|
241 gripe_divide_by_zero (); \ |
4905
|
242 \ |
4953
|
243 return octave_value (v2.TS ## scalar_value () / v1.TS ## scalar_value ()); \ |
|
244 } \ |
|
245 \ |
|
246 DEFNDBINOP_OP (PFX ## _el_mul, TS ## scalar, TM ## matrix, TS ## scalar, TM ## array, *) \ |
|
247 /* DEFNDBINOP_FN (PFX ## _el_div, TS ## scalar, TM ## matrix, TS ## scalar, TM ## array, x_el_div) */ \ |
|
248 DEFNDBINOP_FN (PFX ## _el_pow, TS ## scalar, TM ## matrix, TS ## scalar, TM ## array, elem_xpow) \ |
4905
|
249 \ |
4953
|
250 DEFBINOP (PFX ## _el_ldiv, TS ## scalar, TM ## matrix) \ |
|
251 { \ |
|
252 CAST_BINOP_ARGS (const octave_ ## TS ## scalar&, const octave_ ## TM ## matrix&); \ |
|
253 \ |
|
254 if (! v1.TS ## scalar_value ()) \ |
|
255 gripe_divide_by_zero (); \ |
|
256 \ |
|
257 return octave_value (v2.TM ## array_value () / v1.TS ## scalar_value ()); \ |
|
258 } |
4905
|
259 |
4953
|
260 #define OCTAVE_SM_INT_CMP_OPS(PFX, TS, TM) \ |
|
261 DEFNDBINOP_FN (PFX ## _lt, TS ## scalar, TM ## matrix, TS ## scalar, TM ## array, mx_el_lt) \ |
|
262 DEFNDBINOP_FN (PFX ## _le, TS ## scalar, TM ## matrix, TS ## scalar, TM ## array, mx_el_le) \ |
|
263 DEFNDBINOP_FN (PFX ## _eq, TS ## scalar, TM ## matrix, TS ## scalar, TM ## array, mx_el_eq) \ |
|
264 DEFNDBINOP_FN (PFX ## _ge, TS ## scalar, TM ## matrix, TS ## scalar, TM ## array, mx_el_ge) \ |
|
265 DEFNDBINOP_FN (PFX ## _gt, TS ## scalar, TM ## matrix, TS ## scalar, TM ## array, mx_el_gt) \ |
|
266 DEFNDBINOP_FN (PFX ## _ne, TS ## scalar, TM ## matrix, TS ## scalar, TM ## array, mx_el_ne) |
4905
|
267 |
4953
|
268 #define OCTAVE_SM_INT_BOOL_OPS(PFX, TS, TM) \ |
4964
|
269 DEFNDBINOP_FN (PFX ## _el_and, TS ## scalar, TM ## matrix, TS ## scalar, TM ## array, mx_el_and) \ |
|
270 DEFNDBINOP_FN (PFX ## _el_or, TS ## scalar, TM ## matrix, TS ## scalar, TM ## array, mx_el_or) |
4905
|
271 |
4952
|
272 #define OCTAVE_SM_POW_OPS(T1, T2) \ |
4953
|
273 octave_value \ |
|
274 elem_xpow (const octave_ ## T1& a, const T2 ## NDArray& b) \ |
|
275 { \ |
|
276 T2 ## NDArray result (b.dims ()); \ |
|
277 for (int i = 0; i < b.length (); i++) \ |
|
278 { \ |
|
279 OCTAVE_QUIT; \ |
|
280 result (i) = pow (a, b(i)); \ |
|
281 } \ |
|
282 return octave_value (result); \ |
|
283 } |
4952
|
284 |
4963
|
285 #define OCTAVE_SM_CONV(TS, TM) \ |
|
286 DEFCONV (TS ## s_ ## TM ## m_conv, TM ## scalar, TM ## matrix) \ |
|
287 { \ |
|
288 CAST_CONV_ARG (const octave_ ## TS ## scalar&); \ |
|
289 \ |
|
290 return new octave_ ## TM ## matrix (v.TM ## array_value ()); \ |
|
291 } |
|
292 |
4905
|
293 #define OCTAVE_SM_INT_OPS(TYPE) \ |
4952
|
294 OCTAVE_SM_POW_OPS (TYPE, TYPE) \ |
4953
|
295 OCTAVE_SM_INT_ARITH_OPS (sm, TYPE ## _, TYPE ## _) \ |
|
296 OCTAVE_SM_INT_ARITH_OPS (xm, , TYPE ## _) \ |
|
297 OCTAVE_SM_INT_CMP_OPS (sm, TYPE ## _, TYPE ## _) \ |
|
298 OCTAVE_SM_INT_CMP_OPS (xm, , TYPE ## _) \ |
4964
|
299 OCTAVE_SM_INT_CMP_OPS (smx, TYPE ## _, ) \ |
4953
|
300 OCTAVE_SM_INT_BOOL_OPS (sm, TYPE ## _, TYPE ## _) \ |
|
301 OCTAVE_SM_INT_BOOL_OPS (xm, , TYPE ## _) \ |
4964
|
302 OCTAVE_SM_INT_BOOL_OPS (smx, TYPE ## _, ) \ |
4963
|
303 OCTAVE_SM_CONV (TYPE ## _, TYPE ## _) \ |
|
304 OCTAVE_SM_CONV (TYPE ## _, complex_) |
4905
|
305 |
4953
|
306 #define OCTAVE_MS_INT_ARITH_OPS(PFX, TM, TS) \ |
4905
|
307 /* matrix by scalar ops. */ \ |
|
308 \ |
4953
|
309 DEFNDBINOP_OP (PFX ## _add, TM ## matrix, TS ## scalar, TM ## array, TS ## scalar, +) \ |
|
310 DEFNDBINOP_OP (PFX ## _sub, TM ## matrix, TS ## scalar, TM ## array, TS ## scalar, -) \ |
|
311 DEFNDBINOP_OP (PFX ## _mul, TM ## matrix, TS ## scalar, TM ## array, TS ## scalar, *) \ |
|
312 \ |
|
313 DEFBINOP (PFX ## _div, TM ## matrix, TS ## scalar) \ |
|
314 { \ |
|
315 CAST_BINOP_ARGS (const octave_ ## TM ## matrix&, const octave_ ## TS ## scalar&); \ |
4905
|
316 \ |
4953
|
317 if (! v2.TS ## scalar_value ()) \ |
|
318 gripe_divide_by_zero (); \ |
|
319 \ |
|
320 return octave_value (v1.TM ## array_value () / v2.TS ## scalar_value ()); \ |
|
321 } \ |
|
322 \ |
|
323 /* DEFBINOP_FN (PFX ## _pow, TM ## matrix, TS ## scalar, xpow) */ \ |
|
324 \ |
|
325 /* DEFBINOP (PFX ## _ldiv, TM ## matrix, TS ## scalar) */ \ |
4905
|
326 /* { */ \ |
4953
|
327 /* CAST_BINOP_ARGS (const octave_ ## TM ## matrix&, const octave_ ## TS ## scalar&); */ \ |
4905
|
328 /* */ \ |
4953
|
329 /* Matrix m1 = v1.TM ## matrix_value (); */ \ |
|
330 /* Matrix m2 = v2.TM ## matrix_value (); */ \ |
4905
|
331 /* */ \ |
|
332 /* return octave_value (xleftdiv (m1, m2)); */ \ |
|
333 /* } */ \ |
|
334 \ |
4953
|
335 DEFNDBINOP_OP (PFX ## _el_mul, TM ## matrix, TS ## scalar, TM ## array, TS ## scalar, *) \ |
|
336 \ |
|
337 DEFBINOP (PFX ## _el_div, TM ## matrix, TS ## scalar) \ |
|
338 { \ |
|
339 CAST_BINOP_ARGS (const octave_ ## TM ## matrix&, const octave_ ## TS ## scalar&); \ |
4905
|
340 \ |
4953
|
341 if (! v2.TS ## scalar_value ()) \ |
|
342 gripe_divide_by_zero (); \ |
|
343 \ |
|
344 return octave_value (v1.TM ## array_value () / v2.TS ## scalar_value ()); \ |
|
345 } \ |
|
346 \ |
|
347 DEFNDBINOP_FN (PFX ## _el_pow, TM ## matrix, TS ## scalar, TM ## array, TS ## scalar, elem_xpow) \ |
|
348 \ |
|
349 /* DEFBINOP (el_ldiv, TM ## matrix, TS ## scalar) */ \ |
4905
|
350 /* { */ \ |
4953
|
351 /* CAST_BINOP_ARGS (const octave_ ## TM ## matrix&, const octave_ ## TS ## scalar&); */ \ |
4905
|
352 /* */ \ |
4953
|
353 /* return x_el_div (v2.TM ## _ ## TS ## scalar_value (), v1.TM ## array_value ()); */ \ |
4905
|
354 /* } */ |
|
355 |
4953
|
356 #define OCTAVE_MS_INT_CMP_OPS(PFX, TM, TS) \ |
|
357 DEFNDBINOP_FN (PFX ## _lt, TM ## matrix, TS ## scalar, TM ## array, TS ## scalar, mx_el_lt) \ |
|
358 DEFNDBINOP_FN (PFX ## _le, TM ## matrix, TS ## scalar, TM ## array, TS ## scalar, mx_el_le) \ |
|
359 DEFNDBINOP_FN (PFX ## _eq, TM ## matrix, TS ## scalar, TM ## array, TS ## scalar, mx_el_eq) \ |
|
360 DEFNDBINOP_FN (PFX ## _ge, TM ## matrix, TS ## scalar, TM ## array, TS ## scalar, mx_el_ge) \ |
|
361 DEFNDBINOP_FN (PFX ## _gt, TM ## matrix, TS ## scalar, TM ## array, TS ## scalar, mx_el_gt) \ |
4964
|
362 DEFNDBINOP_FN (PFX ## _ne, TM ## matrix, TS ## scalar, TM ## array, TS ## scalar, mx_el_ne) |
4905
|
363 |
4953
|
364 #define OCTAVE_MS_INT_BOOL_OPS(PFX, TM, TS) \ |
4964
|
365 DEFNDBINOP_FN (PFX ## _el_and, TM ## matrix, TS ## scalar, TM ## array, TS ## scalar, mx_el_and) \ |
|
366 DEFNDBINOP_FN (PFX ## _el_or, TM ## matrix, TS ## scalar, TM ## array, TS ## scalar, mx_el_or) |
4905
|
367 |
4953
|
368 #define OCTAVE_MS_INT_ASSIGN_OPS(PFX, TM, TS, TE) \ |
|
369 DEFNDASSIGNOP_FN (PFX ## _assign, TM ## matrix, TS ## scalar, TE ## array, assign) |
4905
|
370 |
4952
|
371 #define OCTAVE_MS_POW_OPS(T1, T2) \ |
|
372 octave_value elem_xpow (T1 ## NDArray a, octave_ ## T2 b) \ |
|
373 { \ |
|
374 T1 ## NDArray result (a.dims ()); \ |
|
375 for (int i = 0; i < a.length (); i++) \ |
|
376 { \ |
|
377 OCTAVE_QUIT; \ |
|
378 result (i) = pow (a(i), b); \ |
|
379 } \ |
|
380 return octave_value (result); \ |
|
381 } |
|
382 |
4905
|
383 #define OCTAVE_MS_INT_OPS(TYPE) \ |
4952
|
384 OCTAVE_MS_POW_OPS (TYPE, TYPE) \ |
4953
|
385 OCTAVE_MS_INT_ARITH_OPS (ms, TYPE ## _, TYPE ## _) \ |
|
386 OCTAVE_MS_INT_ARITH_OPS (mx, TYPE ## _, ) \ |
|
387 OCTAVE_MS_INT_CMP_OPS (ms, TYPE ## _, TYPE ## _) \ |
|
388 OCTAVE_MS_INT_CMP_OPS (mx, TYPE ## _, ) \ |
4964
|
389 OCTAVE_MS_INT_CMP_OPS (mxs, , TYPE ## _) \ |
4953
|
390 OCTAVE_MS_INT_BOOL_OPS (ms, TYPE ## _, TYPE ## _) \ |
|
391 OCTAVE_MS_INT_BOOL_OPS (mx, TYPE ## _, ) \ |
4964
|
392 OCTAVE_MS_INT_BOOL_OPS (mxs, , TYPE ## _) \ |
4953
|
393 OCTAVE_MS_INT_ASSIGN_OPS (ms, TYPE ## _, TYPE ## _, TYPE ## _) \ |
4963
|
394 OCTAVE_MS_INT_ASSIGN_OPS (mx, TYPE ## _, , ) |
4905
|
395 |
|
396 #define OCTAVE_M_INT_UNOPS(TYPE) \ |
|
397 /* matrix unary ops. */ \ |
|
398 \ |
|
399 DEFNDUNOP_OP (m_not, TYPE ## _matrix, TYPE ## _array, !) \ |
4965
|
400 DEFNDUNOP_OP (m_uplus, TYPE ## _matrix, TYPE ## _array, /* no-op */) \ |
4905
|
401 DEFNDUNOP_OP (m_uminus, TYPE ## _matrix, TYPE ## _array, -) \ |
|
402 \ |
|
403 DEFUNOP (m_transpose, TYPE ## _matrix) \ |
|
404 { \ |
|
405 CAST_UNOP_ARG (const octave_ ## TYPE ## _matrix&); \ |
|
406 \ |
|
407 if (v.ndims () > 2) \ |
|
408 { \ |
|
409 error ("transpose not defined for N-d objects"); \ |
|
410 return octave_value (); \ |
|
411 } \ |
|
412 else \ |
|
413 return octave_value (v.TYPE ## _array_value().transpose ()); \ |
|
414 } \ |
|
415 \ |
|
416 /* DEFNCUNOP_METHOD (m_incr, TYPE ## _matrix, increment) */ \ |
|
417 /* DEFNCUNOP_METHOD (m_decr, TYPE ## _matrix, decrement) */ |
|
418 |
|
419 #define OCTAVE_MM_INT_ARITH_OPS(T1, T2) \ |
|
420 /* matrix by matrix ops. */ \ |
|
421 \ |
|
422 DEFNDBINOP_OP (mm_add, T1 ## _matrix, T2 ## _matrix, T1 ## _array, T2 ## _array, +) \ |
|
423 DEFNDBINOP_OP (mm_sub, T1 ## _matrix, T2 ## _matrix, T1 ## _array, T2 ## _array, -) \ |
|
424 \ |
|
425 /* DEFBINOP_OP (mm_mul, T1 ## _matrix, T2 ## _matrix, *) */ \ |
|
426 /* DEFBINOP_FN (mm_div, T1 ## _matrix, T2 ## _matrix, xdiv) */ \ |
|
427 \ |
|
428 DEFBINOPX (mm_pow, T1 ## _matrix, T2 ## _matrix) \ |
|
429 { \ |
|
430 error ("can't do A ^ B for A and B both matrices"); \ |
|
431 return octave_value (); \ |
|
432 } \ |
|
433 \ |
|
434 /* DEFBINOP_FN (ldiv, T1 ## _matrix, T2 ## _matrix, xleftdiv) */ \ |
|
435 \ |
|
436 DEFNDBINOP_FN (mm_el_mul, T1 ## _matrix, T2 ## _matrix, T1 ## _array, T2 ## _array, product) \ |
|
437 \ |
|
438 DEFNDBINOP_FN (mm_el_div, T1 ## _matrix, T2 ## _matrix, T1 ## _array, T2 ## _array, quotient) \ |
|
439 \ |
4952
|
440 DEFNDBINOP_FN (mm_el_pow, T1 ## _matrix, T2 ## _matrix, T1 ## _array, T2 ## _array, elem_xpow) \ |
4905
|
441 \ |
|
442 /* DEFBINOP (mm_el_ldiv, T1 ## _matrix, T2 ## _matrix) */ \ |
|
443 /* { */ \ |
4953
|
444 /* CAST_BINOP_ARGS (const octavematrix&, const octavematrix&); */ \ |
4905
|
445 /* */ \ |
|
446 /* return octave_value (quotient (v2.array_value (), v1.array_value ())); */ \ |
|
447 /* } */ |
|
448 |
4964
|
449 #define OCTAVE_MM_INT_CMP_OPS(PFX, T1, T2) \ |
|
450 DEFNDBINOP_FN (PFX ## _lt, T1 ## matrix, T2 ## matrix, T1 ## array, T2 ## array, mx_el_lt) \ |
|
451 DEFNDBINOP_FN (PFX ## _le, T1 ## matrix, T2 ## matrix, T1 ## array, T2 ## array, mx_el_le) \ |
|
452 DEFNDBINOP_FN (PFX ## _eq, T1 ## matrix, T2 ## matrix, T1 ## array, T2 ## array, mx_el_eq) \ |
|
453 DEFNDBINOP_FN (PFX ## _ge, T1 ## matrix, T2 ## matrix, T1 ## array, T2 ## array, mx_el_ge) \ |
|
454 DEFNDBINOP_FN (PFX ## _gt, T1 ## matrix, T2 ## matrix, T1 ## array, T2 ## array, mx_el_gt) \ |
|
455 DEFNDBINOP_FN (PFX ## _ne, T1 ## matrix, T2 ## matrix, T1 ## array, T2 ## array, mx_el_ne) |
4905
|
456 |
4964
|
457 #define OCTAVE_MM_INT_BOOL_OPS(PFX, T1, T2) \ |
|
458 DEFNDBINOP_FN (PFX ## _el_and, T1 ## matrix, T2 ## matrix, T1 ## array, T2 ## array, mx_el_and) \ |
|
459 DEFNDBINOP_FN (PFX ## _el_or, T1 ## matrix, T2 ## matrix, T1 ## array, T2 ## array, mx_el_or) |
4905
|
460 |
4953
|
461 #define OCTAVE_MM_INT_ASSIGN_OPS(PFX, TLHS, TRHS, TE) \ |
|
462 DEFNDASSIGNOP_FN (PFX ## _assign, TLHS ## matrix, TRHS ## matrix, TE ## array, assign) |
4905
|
463 |
4952
|
464 #define OCTAVE_MM_POW_OPS(T1, T2) \ |
4953
|
465 octave_value \ |
|
466 elem_xpow (const T1 ## NDArray& a, const T2 ## NDArray& b) \ |
|
467 { \ |
|
468 dim_vector a_dims = a.dims (); \ |
|
469 dim_vector b_dims = b.dims (); \ |
|
470 if (a_dims != b_dims) \ |
|
471 { \ |
|
472 gripe_nonconformant ("operator .^", a_dims, b_dims); \ |
|
473 return octave_value (); \ |
|
474 } \ |
|
475 T1 ## NDArray result (a_dims); \ |
|
476 for (int i = 0; i < a.length (); i++) \ |
|
477 { \ |
|
478 OCTAVE_QUIT; \ |
|
479 result (i) = pow (a(i), b(i)); \ |
|
480 } \ |
|
481 return octave_value (result); \ |
|
482 } |
4952
|
483 |
4964
|
484 #define OCTAVE_MM_CONV(T1, T2) \ |
|
485 DEFCONV (T1 ## m_ ## T2 ## m_conv, T1 ## matrix, T2 ## matrix) \ |
|
486 { \ |
|
487 CAST_CONV_ARG (const octave_ ## T1 ## matrix&); \ |
|
488 \ |
|
489 return new octave_ ## T2 ## matrix (v.T2 ## array_value ()); \ |
|
490 } |
|
491 |
4905
|
492 #define OCTAVE_MM_INT_OPS(TYPE) \ |
|
493 OCTAVE_M_INT_UNOPS (TYPE) \ |
4952
|
494 OCTAVE_MM_POW_OPS (TYPE, TYPE) \ |
4905
|
495 OCTAVE_MM_INT_ARITH_OPS (TYPE, TYPE) \ |
4964
|
496 OCTAVE_MM_INT_CMP_OPS (mm, TYPE ## _, TYPE ## _) \ |
|
497 OCTAVE_MM_INT_CMP_OPS (mmx, TYPE ## _, ) \ |
5038
|
498 OCTAVE_MM_INT_CMP_OPS (mxm, , TYPE ## _) \ |
4964
|
499 OCTAVE_MM_INT_BOOL_OPS (mm, TYPE ## _, TYPE ## _) \ |
|
500 OCTAVE_MM_INT_BOOL_OPS (mmx, TYPE ## _, ) \ |
5038
|
501 OCTAVE_MM_INT_BOOL_OPS (mxm, , TYPE ## _) \ |
4953
|
502 OCTAVE_MM_INT_ASSIGN_OPS (mm, TYPE ## _, TYPE ## _, TYPE ## _) \ |
4964
|
503 OCTAVE_MM_INT_ASSIGN_OPS (mmx, TYPE ## _, , ) \ |
|
504 OCTAVE_MM_CONV(TYPE ## _, complex_) |
4905
|
505 |
4963
|
506 #define OCTAVE_RE_INT_ASSIGN_OPS(TYPE) \ |
|
507 DEFNDASSIGNOP_FN (TYPE ## ms_assign, matrix, TYPE ## _scalar, array, assign) \ |
|
508 DEFNDASSIGNOP_FN (TYPE ## mm_assign, matrix, TYPE ## _matrix, array, assign) |
|
509 |
|
510 #define OCTAVE_CX_INT_ASSIGN_OPS(TYPE) \ |
|
511 DEFNDASSIGNOP_FN (TYPE ## cms_assign, complex_matrix, TYPE ## _scalar, complex_array, assign) \ |
|
512 DEFNDASSIGNOP_FN (TYPE ## cmm_assign, complex_matrix, TYPE ## _matrix, complex_array, assign) |
|
513 |
4905
|
514 #define OCTAVE_INT_OPS(TYPE) \ |
|
515 OCTAVE_SS_INT_OPS (TYPE) \ |
|
516 OCTAVE_SM_INT_OPS (TYPE) \ |
|
517 OCTAVE_MS_INT_OPS (TYPE) \ |
4915
|
518 OCTAVE_MM_INT_OPS (TYPE) \ |
4963
|
519 OCTAVE_CONCAT_FN (TYPE) \ |
|
520 OCTAVE_RE_INT_ASSIGN_OPS (TYPE) \ |
|
521 OCTAVE_CX_INT_ASSIGN_OPS (TYPE) |
4905
|
522 |
|
523 #define OCTAVE_INSTALL_S_INT_UNOPS(TYPE) \ |
|
524 INSTALL_UNOP (op_not, octave_ ## TYPE ## _scalar, s_not); \ |
4965
|
525 INSTALL_UNOP (op_uplus, octave_ ## TYPE ## _scalar, s_uplus); \ |
4905
|
526 INSTALL_UNOP (op_uminus, octave_ ## TYPE ## _scalar, s_uminus); \ |
|
527 INSTALL_UNOP (op_transpose, octave_ ## TYPE ## _scalar, s_transpose); \ |
|
528 INSTALL_UNOP (op_hermitian, octave_ ## TYPE ## _scalar, s_hermitian); \ |
|
529 \ |
|
530 /* INSTALL_NCUNOP (op_incr, octave_ ## TYPE ## _scalar, s_incr); */ \ |
|
531 /* INSTALL_NCUNOP (op_decr, octave_ ## TYPE ## _scalar, s_decr); */ |
|
532 |
4953
|
533 #define OCTAVE_INSTALL_SS_INT_ARITH_OPS(PFX, T1, T2) \ |
|
534 INSTALL_BINOP (op_add, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _add); \ |
|
535 INSTALL_BINOP (op_sub, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _sub); \ |
|
536 INSTALL_BINOP (op_mul, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _mul); \ |
|
537 INSTALL_BINOP (op_div, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _div); \ |
|
538 INSTALL_BINOP (op_pow, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _pow); \ |
|
539 INSTALL_BINOP (op_ldiv, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _ldiv); \ |
|
540 INSTALL_BINOP (op_el_mul, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _el_mul); \ |
|
541 INSTALL_BINOP (op_el_div, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _el_div); \ |
|
542 INSTALL_BINOP (op_el_pow, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _el_pow); \ |
|
543 INSTALL_BINOP (op_el_ldiv, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _el_ldiv); |
4905
|
544 |
4953
|
545 #define OCTAVE_INSTALL_SS_INT_CMP_OPS(PFX, T1, T2) \ |
|
546 INSTALL_BINOP (op_lt, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _lt); \ |
|
547 INSTALL_BINOP (op_le, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _le); \ |
|
548 INSTALL_BINOP (op_eq, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _eq); \ |
|
549 INSTALL_BINOP (op_ge, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _ge); \ |
|
550 INSTALL_BINOP (op_gt, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _gt); \ |
|
551 INSTALL_BINOP (op_ne, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _ne); |
4905
|
552 |
4953
|
553 #define OCTAVE_INSTALL_SS_INT_BOOL_OPS(PFX, T1, T2) \ |
4964
|
554 INSTALL_BINOP (op_el_and, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _el_and); \ |
|
555 INSTALL_BINOP (op_el_or, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _el_or); |
4905
|
556 |
|
557 #define OCTAVE_INSTALL_SS_INT_OPS(TYPE) \ |
|
558 OCTAVE_INSTALL_S_INT_UNOPS (TYPE) \ |
4953
|
559 OCTAVE_INSTALL_SS_INT_ARITH_OPS (ss, TYPE ## _, TYPE ## _) \ |
|
560 OCTAVE_INSTALL_SS_INT_ARITH_OPS (sx, TYPE ## _, ) \ |
|
561 OCTAVE_INSTALL_SS_INT_ARITH_OPS (xs, , TYPE ## _) \ |
|
562 OCTAVE_INSTALL_SS_INT_CMP_OPS (ss, TYPE ## _, TYPE ## _) \ |
|
563 OCTAVE_INSTALL_SS_INT_CMP_OPS (sx, TYPE ## _, ) \ |
|
564 OCTAVE_INSTALL_SS_INT_CMP_OPS (xs, , TYPE ## _) \ |
|
565 OCTAVE_INSTALL_SS_INT_BOOL_OPS (ss, TYPE ## _, TYPE ## _) \ |
|
566 OCTAVE_INSTALL_SS_INT_BOOL_OPS (sx, TYPE ## _, ) \ |
|
567 OCTAVE_INSTALL_SS_INT_BOOL_OPS (xs, , TYPE ## _) \ |
4963
|
568 INSTALL_ASSIGNCONV (octave_ ## TYPE ## _scalar, octave_ ## TYPE ## _scalar, octave_ ## TYPE ## _matrix) \ |
|
569 INSTALL_ASSIGNCONV (octave_ ## TYPE ## _scalar, octave_scalar, octave_ ## TYPE ## _matrix) \ |
|
570 INSTALL_ASSIGNCONV (octave_ ## TYPE ## _scalar, octave_complex_scalar, octave_complex_matrix) |
4905
|
571 |
4953
|
572 #define OCTAVE_INSTALL_SM_INT_ARITH_OPS(PFX, T1, T2) \ |
|
573 INSTALL_BINOP (op_add, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _add); \ |
|
574 INSTALL_BINOP (op_sub, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _sub); \ |
|
575 INSTALL_BINOP (op_mul, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _mul); \ |
|
576 /* INSTALL_BINOP (op_div, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _div); */ \ |
|
577 /* INSTALL_BINOP (op_pow, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _pow); */ \ |
|
578 INSTALL_BINOP (op_ldiv, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _ldiv); \ |
|
579 INSTALL_BINOP (op_el_mul, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _el_mul); \ |
|
580 /* INSTALL_BINOP (op_el_div, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _el_div); */ \ |
|
581 INSTALL_BINOP (op_el_pow, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _el_pow); \ |
|
582 INSTALL_BINOP (op_el_ldiv, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _el_ldiv); |
4905
|
583 |
4953
|
584 #define OCTAVE_INSTALL_SM_INT_CMP_OPS(PFX, T1, T2) \ |
|
585 INSTALL_BINOP (op_lt, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _lt); \ |
|
586 INSTALL_BINOP (op_le, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _le); \ |
|
587 INSTALL_BINOP (op_eq, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _eq); \ |
|
588 INSTALL_BINOP (op_ge, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _ge); \ |
|
589 INSTALL_BINOP (op_gt, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _gt); \ |
|
590 INSTALL_BINOP (op_ne, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _ne); |
4905
|
591 |
4953
|
592 #define OCTAVE_INSTALL_SM_INT_BOOL_OPS(PFX, T1, T2) \ |
4964
|
593 INSTALL_BINOP (op_el_and, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _el_and); \ |
|
594 INSTALL_BINOP (op_el_or, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _el_or); |
4905
|
595 |
|
596 #define OCTAVE_INSTALL_SM_INT_OPS(TYPE) \ |
4953
|
597 OCTAVE_INSTALL_SM_INT_ARITH_OPS (sm, TYPE ## _, TYPE ## _) \ |
|
598 OCTAVE_INSTALL_SM_INT_ARITH_OPS (xm, , TYPE ## _) \ |
|
599 OCTAVE_INSTALL_SM_INT_CMP_OPS (sm, TYPE ## _, TYPE ## _) \ |
|
600 OCTAVE_INSTALL_SM_INT_CMP_OPS (xm, , TYPE ## _) \ |
4964
|
601 OCTAVE_INSTALL_SM_INT_CMP_OPS (smx, TYPE ## _, ) \ |
4953
|
602 OCTAVE_INSTALL_SM_INT_BOOL_OPS (sm, TYPE ## _, TYPE ## _) \ |
|
603 OCTAVE_INSTALL_SM_INT_BOOL_OPS (xm, , TYPE ## _) \ |
4964
|
604 OCTAVE_INSTALL_SM_INT_BOOL_OPS (smx, TYPE ## _, ) \ |
|
605 INSTALL_WIDENOP (octave_ ## TYPE ## _scalar, octave_ ## TYPE ## _matrix, TYPE ## _s_ ## TYPE ## _m_conv) \ |
|
606 INSTALL_WIDENOP (octave_ ## TYPE ## _scalar, octave_complex_matrix, TYPE ## _s_complex_m_conv) \ |
4963
|
607 INSTALL_ASSIGNCONV (octave_ ## TYPE ## _scalar, octave_ ## TYPE ## _matrix, octave_ ## TYPE ## _matrix) \ |
|
608 INSTALL_ASSIGNCONV (octave_ ## TYPE ## _scalar, octave_matrix, octave_ ## TYPE ## _matrix) \ |
|
609 INSTALL_ASSIGNCONV (octave_ ## TYPE ## _scalar, octave_complex_matrix, octave_complex_matrix) |
4905
|
610 |
4953
|
611 #define OCTAVE_INSTALL_MS_INT_ARITH_OPS(PFX, T1, T2) \ |
|
612 INSTALL_BINOP (op_add, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _add); \ |
|
613 INSTALL_BINOP (op_sub, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _sub); \ |
|
614 INSTALL_BINOP (op_mul, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _mul); \ |
|
615 INSTALL_BINOP (op_div, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _div); \ |
|
616 /* INSTALL_BINOP (op_pow, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _pow); */ \ |
|
617 /* INSTALL_BINOP (op_ldiv, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _ldiv); */ \ |
4905
|
618 \ |
4953
|
619 INSTALL_BINOP (op_el_mul, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _el_mul); \ |
|
620 INSTALL_BINOP (op_el_div, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _el_div); \ |
|
621 INSTALL_BINOP (op_el_pow, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _el_pow); \ |
|
622 /* INSTALL_BINOP (op_el_ldiv, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _el_ldiv); */ |
4905
|
623 |
4953
|
624 #define OCTAVE_INSTALL_MS_INT_CMP_OPS(PFX, T1, T2) \ |
|
625 INSTALL_BINOP (op_lt, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _lt); \ |
|
626 INSTALL_BINOP (op_le, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _le); \ |
|
627 INSTALL_BINOP (op_eq, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _eq); \ |
|
628 INSTALL_BINOP (op_ge, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _ge); \ |
|
629 INSTALL_BINOP (op_gt, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _gt); \ |
|
630 INSTALL_BINOP (op_ne, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _ne); |
|
631 |
|
632 #define OCTAVE_INSTALL_MS_INT_BOOL_OPS(PFX, T1, T2) \ |
4964
|
633 INSTALL_BINOP (op_el_and, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _el_and); \ |
|
634 INSTALL_BINOP (op_el_or, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _el_or); |
4953
|
635 |
|
636 #define OCTAVE_INSTALL_MS_INT_ASSIGN_OPS(PFX, TLHS, TRHS) \ |
|
637 INSTALL_ASSIGNOP (op_asn_eq, octave_ ## TLHS ## matrix, octave_ ## TRHS ## scalar, PFX ## _assign) |
4905
|
638 |
|
639 #define OCTAVE_INSTALL_MS_INT_OPS(TYPE) \ |
4953
|
640 OCTAVE_INSTALL_MS_INT_ARITH_OPS (ms, TYPE ## _, TYPE ## _) \ |
|
641 OCTAVE_INSTALL_MS_INT_ARITH_OPS (mx, TYPE ## _, ) \ |
|
642 OCTAVE_INSTALL_MS_INT_CMP_OPS (ms, TYPE ## _, TYPE ## _) \ |
|
643 OCTAVE_INSTALL_MS_INT_CMP_OPS (mx, TYPE ## _, ) \ |
4964
|
644 OCTAVE_INSTALL_MS_INT_CMP_OPS (mxs, , TYPE ## _) \ |
4953
|
645 OCTAVE_INSTALL_MS_INT_BOOL_OPS (ms, TYPE ## _, TYPE ## _) \ |
|
646 OCTAVE_INSTALL_MS_INT_BOOL_OPS (mx, TYPE ## _, ) \ |
4964
|
647 OCTAVE_INSTALL_MS_INT_BOOL_OPS (mxs, , TYPE ## _) \ |
4953
|
648 OCTAVE_INSTALL_MS_INT_ASSIGN_OPS (ms, TYPE ## _, TYPE ## _) \ |
|
649 OCTAVE_INSTALL_MS_INT_ASSIGN_OPS (mx, TYPE ## _, ) \ |
4963
|
650 INSTALL_ASSIGNCONV (octave_ ## TYPE ## _matrix, octave_complex_scalar, octave_complex_matrix) |
4905
|
651 |
|
652 #define OCTAVE_INSTALL_M_INT_UNOPS(TYPE) \ |
|
653 INSTALL_UNOP (op_not, octave_ ## TYPE ## _matrix, m_not); \ |
4965
|
654 INSTALL_UNOP (op_uplus, octave_ ## TYPE ## _matrix, m_uplus); \ |
4905
|
655 INSTALL_UNOP (op_uminus, octave_ ## TYPE ## _matrix, m_uminus); \ |
|
656 INSTALL_UNOP (op_transpose, octave_ ## TYPE ## _matrix, m_transpose); \ |
|
657 INSTALL_UNOP (op_hermitian, octave_ ## TYPE ## _matrix, m_transpose); \ |
|
658 \ |
|
659 /* INSTALL_NCUNOP (op_incr, octave_ ## TYPE ## _matrix, m_incr); */ \ |
|
660 /* INSTALL_NCUNOP (op_decr, octave_ ## TYPE ## _matrix, m_decr); */ |
|
661 |
|
662 #define OCTAVE_INSTALL_MM_INT_ARITH_OPS(T1, T2) \ |
|
663 INSTALL_BINOP (op_add, octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, mm_add); \ |
|
664 INSTALL_BINOP (op_sub, octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, mm_sub); \ |
|
665 /* INSTALL_BINOP (op_mul, octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, mm_mul); */ \ |
|
666 /* INSTALL_BINOP (op_div, octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, mm_div); */ \ |
|
667 INSTALL_BINOP (op_pow, octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, mm_pow); \ |
|
668 /* INSTALL_BINOP (op_ldiv, octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, mm_ldiv); */ \ |
|
669 INSTALL_BINOP (op_el_mul, octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, mm_el_mul); \ |
|
670 INSTALL_BINOP (op_el_div, octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, mm_el_div); \ |
4952
|
671 INSTALL_BINOP (op_el_pow, octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, mm_el_pow); \ |
4905
|
672 /* INSTALL_BINOP (op_el_ldiv, octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, mm_el_ldiv); */ |
|
673 |
4964
|
674 #define OCTAVE_INSTALL_MM_INT_CMP_OPS(PFX, T1, T2) \ |
|
675 INSTALL_BINOP (op_lt, octave_ ## T1 ## matrix, octave_ ## T2 ## matrix, PFX ## _lt); \ |
|
676 INSTALL_BINOP (op_le, octave_ ## T1 ## matrix, octave_ ## T2 ## matrix, PFX ## _le); \ |
|
677 INSTALL_BINOP (op_eq, octave_ ## T1 ## matrix, octave_ ## T2 ## matrix, PFX ## _eq); \ |
|
678 INSTALL_BINOP (op_ge, octave_ ## T1 ## matrix, octave_ ## T2 ## matrix, PFX ## _ge); \ |
|
679 INSTALL_BINOP (op_gt, octave_ ## T1 ## matrix, octave_ ## T2 ## matrix, PFX ## _gt); \ |
|
680 INSTALL_BINOP (op_ne, octave_ ## T1 ## matrix, octave_ ## T2 ## matrix, PFX ## _ne); |
4905
|
681 |
4964
|
682 #define OCTAVE_INSTALL_MM_INT_BOOL_OPS(PFX, T1, T2) \ |
|
683 INSTALL_BINOP (op_el_and, octave_ ## T1 ## matrix, octave_ ## T2 ## matrix, PFX ## _el_and); \ |
|
684 INSTALL_BINOP (op_el_or, octave_ ## T1 ## matrix, octave_ ## T2 ## matrix, PFX ## _el_or); |
4905
|
685 |
4953
|
686 #define OCTAVE_INSTALL_MM_INT_ASSIGN_OPS(PFX, TLHS, TRHS) \ |
|
687 INSTALL_ASSIGNOP (op_asn_eq, octave_ ## TLHS ## matrix, octave_ ## TRHS ## matrix, PFX ## _assign) |
4905
|
688 |
|
689 #define OCTAVE_INSTALL_MM_INT_OPS(TYPE) \ |
|
690 OCTAVE_INSTALL_M_INT_UNOPS (TYPE) \ |
|
691 OCTAVE_INSTALL_MM_INT_ARITH_OPS (TYPE, TYPE) \ |
4964
|
692 OCTAVE_INSTALL_MM_INT_CMP_OPS (mm, TYPE ## _, TYPE ## _) \ |
|
693 OCTAVE_INSTALL_MM_INT_CMP_OPS (mmx, TYPE ## _, ) \ |
5038
|
694 OCTAVE_INSTALL_MM_INT_CMP_OPS (mxm, , TYPE ## _) \ |
4964
|
695 OCTAVE_INSTALL_MM_INT_BOOL_OPS (mm, TYPE ## _, TYPE ## _) \ |
|
696 OCTAVE_INSTALL_MM_INT_BOOL_OPS (mmx, TYPE ## _, ) \ |
5038
|
697 OCTAVE_INSTALL_MM_INT_BOOL_OPS (mxm, , TYPE ## _) \ |
4953
|
698 OCTAVE_INSTALL_MM_INT_ASSIGN_OPS (mm, TYPE ## _, TYPE ## _) \ |
|
699 OCTAVE_INSTALL_MM_INT_ASSIGN_OPS (mmx, TYPE ## _, ) \ |
4964
|
700 INSTALL_WIDENOP (octave_ ## TYPE ## _matrix, octave_complex_matrix, TYPE ## _m_complex_m_conv) \ |
4963
|
701 INSTALL_ASSIGNCONV (octave_ ## TYPE ## _matrix, octave_complex_matrix, octave_complex_matrix) |
4905
|
702 |
4963
|
703 #define OCTAVE_INSTALL_RE_INT_ASSIGN_OPS(TYPE) \ |
|
704 INSTALL_ASSIGNOP (op_asn_eq, octave_matrix, octave_ ## TYPE ## _scalar, TYPE ## ms_assign) \ |
|
705 INSTALL_ASSIGNOP (op_asn_eq, octave_matrix, octave_ ## TYPE ## _matrix, TYPE ## mm_assign) \ |
|
706 INSTALL_ASSIGNCONV (octave_scalar, octave_ ## TYPE ## _scalar, octave_matrix) \ |
|
707 INSTALL_ASSIGNCONV (octave_scalar, octave_ ## TYPE ## _matrix, octave_matrix) |
|
708 |
|
709 #define OCTAVE_INSTALL_CX_INT_ASSIGN_OPS(TYPE) \ |
|
710 INSTALL_ASSIGNOP (op_asn_eq, octave_complex_matrix, octave_ ## TYPE ## _scalar, TYPE ## cms_assign) \ |
|
711 INSTALL_ASSIGNOP (op_asn_eq, octave_complex_matrix, octave_ ## TYPE ## _matrix, TYPE ## cmm_assign) \ |
|
712 INSTALL_ASSIGNCONV (octave_complex_scalar, octave_ ## TYPE ## _scalar, octave_complex_matrix) \ |
|
713 INSTALL_ASSIGNCONV (octave_complex_scalar, octave_ ## TYPE ## _matrix, octave_complex_matrix) |
|
714 |
4905
|
715 #define OCTAVE_INSTALL_INT_OPS(TYPE) \ |
|
716 OCTAVE_INSTALL_SS_INT_OPS (TYPE) \ |
|
717 OCTAVE_INSTALL_SM_INT_OPS (TYPE) \ |
|
718 OCTAVE_INSTALL_MS_INT_OPS (TYPE) \ |
4915
|
719 OCTAVE_INSTALL_MM_INT_OPS (TYPE) \ |
4963
|
720 OCTAVE_INSTALL_CONCAT_FN (TYPE) \ |
|
721 OCTAVE_INSTALL_RE_INT_ASSIGN_OPS (TYPE) \ |
|
722 OCTAVE_INSTALL_CX_INT_ASSIGN_OPS (TYPE) |
|
723 |
|
724 #define OCTAVE_INSTALL_SM_INT_ASSIGNCONV(TLHS, TRHS) \ |
|
725 INSTALL_ASSIGNCONV (octave_ ## TLHS ## _scalar, octave_ ## TRHS ## _scalar, octave_ ## TLHS ## _matrix) \ |
|
726 INSTALL_ASSIGNCONV (octave_ ## TLHS ## _scalar, octave_ ## TRHS ## _matrix, octave_ ## TLHS ## _matrix) |
4905
|
727 |
4964
|
728 #define OCTAVE_MIXED_INT_CMP_OPS(T1, T2) \ |
|
729 OCTAVE_SS_INT_CMP_OPS (T1 ## _ ## T2 ## _ss, T1 ## _, T2 ## _) \ |
|
730 OCTAVE_SM_INT_CMP_OPS (T1 ## _ ## T2 ## _sm, T1 ## _, T2 ## _) \ |
|
731 OCTAVE_MS_INT_CMP_OPS (T1 ## _ ## T2 ## _ms, T1 ## _, T2 ## _) \ |
|
732 OCTAVE_MM_INT_CMP_OPS (T1 ## _ ## T2 ## _mm, T1 ## _, T2 ## _) |
|
733 |
|
734 #define OCTAVE_INSTALL_MIXED_INT_CMP_OPS(T1, T2) \ |
|
735 OCTAVE_INSTALL_SS_INT_CMP_OPS (T1 ## _ ## T2 ## _ss, T1 ## _, T2 ## _) \ |
|
736 OCTAVE_INSTALL_SM_INT_CMP_OPS (T1 ## _ ## T2 ## _sm, T1 ## _, T2 ## _) \ |
|
737 OCTAVE_INSTALL_MS_INT_CMP_OPS (T1 ## _ ## T2 ## _ms, T1 ## _, T2 ## _) \ |
|
738 OCTAVE_INSTALL_MM_INT_CMP_OPS (T1 ## _ ## T2 ## _mm, T1 ## _, T2 ## _) |
|
739 |
4905
|
740 /* |
|
741 ;;; Local Variables: *** |
|
742 ;;; mode: C++ *** |
|
743 ;;; End: *** |
|
744 */ |