Mercurial > octave-nkf
comparison src/OPERATORS/op-int.h @ 4905:f7a337f3fd9e
[project @ 2004-06-17 04:11:50 by jwe]
author | jwe |
---|---|
date | Thu, 17 Jun 2004 04:14:36 +0000 |
parents | |
children | c638c144d4da |
comparison
equal
deleted
inserted
replaced
4904:71229573b6bf | 4905:f7a337f3fd9e |
---|---|
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 | |
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
20 | |
21 */ | |
22 | |
23 #define OCTAVE_S_INT_UNOPS(TYPE) \ | |
24 /* scalar unary ops. */ \ | |
25 \ | |
26 DEFUNOP_OP (s_not, TYPE ## _scalar, !) \ | |
27 DEFUNOP_OP (s_uminus, TYPE ## _scalar, -) \ | |
28 DEFUNOP_OP (s_transpose, TYPE ## _scalar, /* no-op */) \ | |
29 DEFUNOP_OP (s_hermitian, TYPE ## _scalar, /* no-op */) \ | |
30 \ | |
31 /* DEFNCUNOP_METHOD (s_incr, TYPE ## _scalar, increment) */ \ | |
32 /* DEFNCUNOP_METHOD (s_decr, TYPE ## _scalar, decrement) */ | |
33 | |
34 #define OCTAVE_SS_INT_ARITH_OPS(T1, T2) \ | |
35 /* scalar by scalar ops. */ \ | |
36 \ | |
37 DEFBINOP_OP (ss_add, T1 ## _scalar, T2 ## _scalar, +) \ | |
38 DEFBINOP_OP (ss_sub, T1 ## _scalar, T2 ## _scalar, -) \ | |
39 DEFBINOP_OP (ss_mul, T1 ## _scalar, T2 ## _scalar, *) \ | |
40 \ | |
41 DEFBINOP (ss_div, T1 ## _scalar, T2 ## _scalar) \ | |
42 { \ | |
43 CAST_BINOP_ARGS (const octave_ ## T1 ## _scalar&, const octave_ ## T2 ## _scalar&); \ | |
44 \ | |
45 double d = v2.T2 ## _scalar_value (); \ | |
46 \ | |
47 if (d == 0.0) \ | |
48 gripe_divide_by_zero (); \ | |
49 \ | |
50 return octave_value (v1.T1 ## _scalar_value () / d); \ | |
51 } \ | |
52 \ | |
53 /* DEFBINOP_FN (ss_pow, T1 ## _scalar, T2 ## _scalar, xpow) */ \ | |
54 \ | |
55 DEFBINOP (ss_ldiv, T1 ## _scalar, T2 ## _scalar) \ | |
56 { \ | |
57 CAST_BINOP_ARGS (const octave_ ## T1 ## _scalar&, const octave_ ## T2 ## _scalar&); \ | |
58 \ | |
59 double d = v1.T1 ## _scalar_value (); \ | |
60 \ | |
61 if (d == 0.0) \ | |
62 gripe_divide_by_zero (); \ | |
63 \ | |
64 return octave_value (v2.T2 ## _scalar_value () / d); \ | |
65 } \ | |
66 \ | |
67 DEFBINOP_OP (ss_el_mul, T1 ## _scalar, T2 ## _scalar, *) \ | |
68 \ | |
69 DEFBINOP (ss_el_div, T1 ## _scalar, T2 ## _scalar) \ | |
70 { \ | |
71 CAST_BINOP_ARGS (const octave_ ## T1 ## _scalar&, const octave_ ## T2 ## _scalar&); \ | |
72 \ | |
73 double d = v2.T2 ## _scalar_value (); \ | |
74 \ | |
75 if (d == 0.0) \ | |
76 gripe_divide_by_zero (); \ | |
77 \ | |
78 return octave_value (v1.T1 ## _scalar_value () / d); \ | |
79 } \ | |
80 \ | |
81 DEFBINOP_FN (ss_el_pow, T1 ## _scalar, T2 ## _scalar, xpow) \ | |
82 \ | |
83 DEFBINOP (ss_el_ldiv, T1 ## _scalar, T2 ## _scalar) \ | |
84 { \ | |
85 CAST_BINOP_ARGS (const octave_ ## T1 ## _scalar&, const octave_ ## T2 ## _scalar&); \ | |
86 \ | |
87 double d = v1.T1 ## _scalar_value (); \ | |
88 \ | |
89 if (d == 0.0) \ | |
90 gripe_divide_by_zero (); \ | |
91 \ | |
92 return octave_value (v2.T2 ## _scalar_value () / d); \ | |
93 } \ | |
94 | |
95 #define OCTAVE_SS_INT_BOOL_OPS(T1, T2) \ | |
96 /* DEFBINOP_OP (ss_el_and, T1 ## _scalar, T2 ## _scalar, &&) */ \ | |
97 /* DEFBINOP_OP (ss_el_or, T1 ## _scalar, T2 ## _scalar, ||) */ | |
98 | |
99 #define OCTAVE_SS_INT_CMP_OPS(T1, T2) \ | |
100 DEFBINOP_OP (ss_lt, T1 ## _scalar, T2 ## _scalar, <) \ | |
101 DEFBINOP_OP (ss_le, T1 ## _scalar, T2 ## _scalar, <=) \ | |
102 DEFBINOP_OP (ss_eq, T1 ## _scalar, T2 ## _scalar, ==) \ | |
103 DEFBINOP_OP (ss_ge, T1 ## _scalar, T2 ## _scalar, >=) \ | |
104 DEFBINOP_OP (ss_gt, T1 ## _scalar, T2 ## _scalar, >) \ | |
105 DEFBINOP_OP (ss_ne, T1 ## _scalar, T2 ## _scalar, !=) | |
106 | |
107 #define OCTAVE_SS_INT_OPS(TYPE) \ | |
108 OCTAVE_S_INT_UNOPS (TYPE) \ | |
109 OCTAVE_SS_INT_ARITH_OPS (TYPE, TYPE) \ | |
110 OCTAVE_SS_INT_CMP_OPS (TYPE, TYPE) \ | |
111 OCTAVE_SS_INT_BOOL_OPS (TYPE, TYPE) | |
112 | |
113 #define OCTAVE_SS_INT_OPS2(T1, T2) \ | |
114 OCTAVE_SS_INT_ARITH_OPS (T1, T2) \ | |
115 OCTAVE_SS_INT_CMP_OPS (T1, T2) \ | |
116 OCTAVE_SS_INT_BOOL_OPS (T1, T2) | |
117 | |
118 #define OCTAVE_SM_INT_ARITH_OPS(TS, TM) \ | |
119 /* scalar by matrix ops. */ \ | |
120 \ | |
121 DEFNDBINOP_OP (sm_add, TS ## _scalar, TM ## _matrix, TS ## _scalar, TM ## _array, +) \ | |
122 DEFNDBINOP_OP (sm_sub, TS ## _scalar, TM ## _matrix, TS ## _scalar, TM ## _array, -) \ | |
123 DEFNDBINOP_OP (sm_mul, TS ## _scalar, TM ## _matrix, TS ## _scalar, TM ## _array, *) \ | |
124 \ | |
125 /* DEFBINOP (sm_div, TS ## _scalar, TM ## _matrix) */ \ | |
126 /* { */ \ | |
127 /* CAST_BINOP_ARGS (const octave_ ## TS ## _scalar&, const octave_ ## TM ## _matrix&); */ \ | |
128 /* */ \ | |
129 /* Matrix m1 = v1.TM ## _matrix_value (); */ \ | |
130 /* Matrix m2 = v2.TM ## _matrix_value (); */ \ | |
131 /* */ \ | |
132 /* return octave_value (xdiv (m1, m2)); */ \ | |
133 /* } */ \ | |
134 \ | |
135 /* DEFBINOP_FN (sm_pow, TS ## _scalar, TM ## _matrix, xpow) */ \ | |
136 \ | |
137 /* DEFBINOP (sm_ldiv, TS ## _scalar, TM ## _matrix) */ \ | |
138 /* { */ \ | |
139 /* CAST_BINOP_ARGS (const octave_ ## TS ## _scalar&, const octave_ ## TM ## _matrix&); */ \ | |
140 /* */ \ | |
141 /* double d = v1.TS ## _scalar_value (); */ \ | |
142 /* */ \ | |
143 /* if (d == 0) */ \ | |
144 /* gripe_divide_by_zero (); */ \ | |
145 /* */ \ | |
146 /* return octave_value (v2.TS ## _scalar_value () / d); */ \ | |
147 /* } */ \ | |
148 \ | |
149 DEFNDBINOP_OP (sm_el_mul, TS ## _scalar, TM ## _matrix, TS ## _scalar, TM ## _array, *) \ | |
150 /* DEFNDBINOP_FN (sm_el_div, TS ## _scalar, TM ## _matrix, TS ## _scalar, TM ## _array, x_el_div) */ \ | |
151 /* DEFNDBINOP_FN (sm_el_pow, TS ## _scalar, TM ## _matrix, TS ## _scalar, TM ## _array, elem_xpow) */ \ | |
152 \ | |
153 /* DEFBINOP (sm_el_ldiv, TS ## _scalar, TM ## _matrix) */ \ | |
154 /* { */ \ | |
155 /* CAST_BINOP_ARGS (const octave_ ## TS ## _scalar&, const octave_ ## TM ## _matrix&); */ \ | |
156 /* */ \ | |
157 /* double d = v1.TS ## _scalar_value (); */ \ | |
158 /* */ \ | |
159 /* if (d == 0) */ \ | |
160 /* gripe_divide_by_zero (); */ \ | |
161 /* */ \ | |
162 /* return octave_value (v2.TM ## _array_value () / d); */ \ | |
163 /* } */ \ | |
164 | |
165 #define OCTAVE_SM_INT_CMP_OPS(TS, TM) \ | |
166 DEFNDBINOP_FN (sm_lt, TS ## _scalar, TM ## _matrix, TS ## _scalar, TM ## _array, mx_el_lt) \ | |
167 DEFNDBINOP_FN (sm_le, TS ## _scalar, TM ## _matrix, TS ## _scalar, TM ## _array, mx_el_le) \ | |
168 DEFNDBINOP_FN (sm_eq, TS ## _scalar, TM ## _matrix, TS ## _scalar, TM ## _array, mx_el_eq) \ | |
169 DEFNDBINOP_FN (sm_ge, TS ## _scalar, TM ## _matrix, TS ## _scalar, TM ## _array, mx_el_ge) \ | |
170 DEFNDBINOP_FN (sm_gt, TS ## _scalar, TM ## _matrix, TS ## _scalar, TM ## _array, mx_el_gt) \ | |
171 DEFNDBINOP_FN (sm_ne, TS ## _scalar, TM ## _matrix, TS ## _scalar, TM ## _array, mx_el_ne) | |
172 | |
173 #define OCTAVE_SM_INT_BOOL_OPS(TS, TM) \ | |
174 /* DEFNDBINOP_FN (sm_el_and, TS ## _scalar, TYPE ## _matrix, TS ## _scalar, TYPE ## _array, mx_el_and) */ \ | |
175 /* DEFNDBINOP_FN (sm_el_or, TS ## _scalar, TYPE ## _matrix, TS ## _scalar, TYPE ## _array, mx_el_or) */ | |
176 | |
177 #define OCTAVE_SM_INT_OPS(TYPE) \ | |
178 OCTAVE_SM_INT_ARITH_OPS (TYPE, TYPE) \ | |
179 OCTAVE_SM_INT_CMP_OPS (TYPE, TYPE) \ | |
180 OCTAVE_SM_INT_BOOL_OPS (TYPE, TYPE) \ | |
181 \ | |
182 /* DEFCONV (TYPE ## _matrix_conv, TYPE ## _scalar, TYPE ## _matrix) */ \ | |
183 /* { */ \ | |
184 /* CAST_CONV_ARG (const octave_ ## TYPE ## _scalar&); */ \ | |
185 /* */ \ | |
186 /* return new octave_ ## TYPE ## _matrix (v.TYPE ## _matrix_value ()); */ \ | |
187 /* } */ | |
188 | |
189 #define OCTAVE_SM_INT_OPS2(TS, TM) \ | |
190 OCTAVE_SM_INT_ARITH_OPS (TS, TM) \ | |
191 OCTAVE_SM_INT_CMP_OPS (TS, TM) \ | |
192 OCTAVE_SM_INT_BOOL_OPS (TS, TM) | |
193 | |
194 #define OCTAVE_MS_INT_ARITH_OPS(TM, TS) \ | |
195 /* matrix by scalar ops. */ \ | |
196 \ | |
197 DEFNDBINOP_OP (ms_add, TM ## _matrix, TS ## _scalar, TM ## _array, TS ## _scalar, +) \ | |
198 DEFNDBINOP_OP (ms_sub, TM ## _matrix, TS ## _scalar, TM ## _array, TS ## _scalar, -) \ | |
199 DEFNDBINOP_OP (ms_mul, TM ## _matrix, TS ## _scalar, TM ## _array, TS ## _scalar, *) \ | |
200 \ | |
201 /* DEFBINOP (ms_div, TM ## _matrix, TS ## _scalar) */ \ | |
202 /* { */ \ | |
203 /* CAST_BINOP_ARGS (const octave_ ## TM ## _matrix&, const octave_ ## TS ## _scalar&); */ \ | |
204 /* */ \ | |
205 /* double d = v2.TM ## _ ## TS ## _scalar_value (); */ \ | |
206 /* */ \ | |
207 /* if (d == 0.0) */ \ | |
208 /* gripe_divide_by_zero (); */ \ | |
209 /* */ \ | |
210 /* return octave_value (v1.TM ## _array_value () / d); */ \ | |
211 /* } */ \ | |
212 \ | |
213 /* DEFBINOP_FN (ms_pow, TM ## _matrix, TS ## _scalar, xpow) */ \ | |
214 \ | |
215 /* DEFBINOP (ms_ldiv, TM ## _matrix, TS ## _scalar) */ \ | |
216 /* { */ \ | |
217 /* CAST_BINOP_ARGS (const octave_ ## TM ## _matrix&, const octave_ ## TS ## _scalar&); */ \ | |
218 /* */ \ | |
219 /* Matrix m1 = v1.TM ## _matrix_value (); */ \ | |
220 /* Matrix m2 = v2.TM ## _matrix_value (); */ \ | |
221 /* */ \ | |
222 /* return octave_value (xleftdiv (m1, m2)); */ \ | |
223 /* } */ \ | |
224 \ | |
225 DEFNDBINOP_OP (ms_el_mul, TM ## _matrix, TS ## _scalar, TM ## _array, TS ## _scalar, *) \ | |
226 \ | |
227 /* DEFBINOP (ms_el_div, TM ## _matrix, TS ## _scalar) */ \ | |
228 /* { */ \ | |
229 /* CAST_BINOP_ARGS (const octave_ ## TM ## _matrix&, const octave_ ## TS ## _scalar&); */ \ | |
230 /* */ \ | |
231 /* double d = v2.TM ## _ ## TS ## _scalar_value (); */ \ | |
232 /* */ \ | |
233 /* if (d == 0.0) */ \ | |
234 /* gripe_divide_by_zero (); */ \ | |
235 /* */ \ | |
236 /* return octave_value (v1.TM ## _array_value () / d); */ \ | |
237 /* } */ \ | |
238 \ | |
239 /* DEFNDBINOP_FN (ms_el_pow, TM ## _matrix, TS ## _scalar, TM ## _array, TS ## _scalar, elem_xpow) */ \ | |
240 \ | |
241 /* DEFBINOP (el_ldiv, TM ## _matrix, TS ## _scalar) */ \ | |
242 /* { */ \ | |
243 /* CAST_BINOP_ARGS (const octave_ ## TM ## _matrix&, const octave_ ## TS ## _scalar&); */ \ | |
244 /* */ \ | |
245 /* return x_el_div (v2.TM ## _ ## TS ## _scalar_value (), v1.TM ## _array_value ()); */ \ | |
246 /* } */ | |
247 | |
248 #define OCTAVE_MS_INT_CMP_OPS(TM, TS) \ | |
249 DEFNDBINOP_FN (ms_lt, TM ## _matrix, TS ## _scalar, TM ## _array, TS ## _scalar, mx_el_lt) \ | |
250 DEFNDBINOP_FN (ms_le, TM ## _matrix, TS ## _scalar, TM ## _array, TS ## _scalar, mx_el_le) \ | |
251 DEFNDBINOP_FN (ms_eq, TM ## _matrix, TS ## _scalar, TM ## _array, TS ## _scalar, mx_el_eq) \ | |
252 DEFNDBINOP_FN (ms_ge, TM ## _matrix, TS ## _scalar, TM ## _array, TS ## _scalar, mx_el_ge) \ | |
253 DEFNDBINOP_FN (ms_gt, TM ## _matrix, TS ## _scalar, TM ## _array, TS ## _scalar, mx_el_gt) \ | |
254 DEFNDBINOP_FN (ms_ne, TM ## _matrix, TS ## _scalar, TM ## _array, TS ## _scalar, mx_el_ne) \ | |
255 | |
256 #define OCTAVE_MS_INT_BOOL_OPS(TM, TS) \ | |
257 /* DEFNDBINOP_FN (ms_el_and, TM ## _matrix, TS ## _scalar, TM ## _array, TS ## _scalar, mx_el_and) */ \ | |
258 /* DEFNDBINOP_FN (ms_el_or, TM ## _matrix, TS ## _scalar, TM | |
259 ## _array, TS ## _scalar, mx_el_or) */ | |
260 | |
261 #define OCTAVE_MS_INT_ASSIGN_OPS(TM, TS) \ | |
262 DEFNDASSIGNOP_FN (ms_assign, TM ## _matrix, TS ## _scalar, TS ## _array, assign) | |
263 | |
264 #define OCTAVE_MS_INT_OPS(TYPE) \ | |
265 OCTAVE_MS_INT_ARITH_OPS (TYPE, TYPE) \ | |
266 OCTAVE_MS_INT_CMP_OPS (TYPE, TYPE) \ | |
267 OCTAVE_MS_INT_BOOL_OPS (TYPE, TYPE) \ | |
268 OCTAVE_MS_INT_ASSIGN_OPS (TYPE, TYPE) | |
269 | |
270 #define OCTAVE_M_INT_UNOPS(TYPE) \ | |
271 /* matrix unary ops. */ \ | |
272 \ | |
273 DEFNDUNOP_OP (m_not, TYPE ## _matrix, TYPE ## _array, !) \ | |
274 DEFNDUNOP_OP (m_uminus, TYPE ## _matrix, TYPE ## _array, -) \ | |
275 \ | |
276 DEFUNOP (m_transpose, TYPE ## _matrix) \ | |
277 { \ | |
278 CAST_UNOP_ARG (const octave_ ## TYPE ## _matrix&); \ | |
279 \ | |
280 if (v.ndims () > 2) \ | |
281 { \ | |
282 error ("transpose not defined for N-d objects"); \ | |
283 return octave_value (); \ | |
284 } \ | |
285 else \ | |
286 return octave_value (v.TYPE ## _array_value().transpose ()); \ | |
287 } \ | |
288 \ | |
289 /* DEFNCUNOP_METHOD (m_incr, TYPE ## _matrix, increment) */ \ | |
290 /* DEFNCUNOP_METHOD (m_decr, TYPE ## _matrix, decrement) */ | |
291 | |
292 #define OCTAVE_MM_INT_ARITH_OPS(T1, T2) \ | |
293 /* matrix by matrix ops. */ \ | |
294 \ | |
295 DEFNDBINOP_OP (mm_add, T1 ## _matrix, T2 ## _matrix, T1 ## _array, T2 ## _array, +) \ | |
296 DEFNDBINOP_OP (mm_sub, T1 ## _matrix, T2 ## _matrix, T1 ## _array, T2 ## _array, -) \ | |
297 \ | |
298 /* DEFBINOP_OP (mm_mul, T1 ## _matrix, T2 ## _matrix, *) */ \ | |
299 /* DEFBINOP_FN (mm_div, T1 ## _matrix, T2 ## _matrix, xdiv) */ \ | |
300 \ | |
301 DEFBINOPX (mm_pow, T1 ## _matrix, T2 ## _matrix) \ | |
302 { \ | |
303 error ("can't do A ^ B for A and B both matrices"); \ | |
304 return octave_value (); \ | |
305 } \ | |
306 \ | |
307 /* DEFBINOP_FN (ldiv, T1 ## _matrix, T2 ## _matrix, xleftdiv) */ \ | |
308 \ | |
309 DEFNDBINOP_FN (mm_el_mul, T1 ## _matrix, T2 ## _matrix, T1 ## _array, T2 ## _array, product) \ | |
310 \ | |
311 DEFNDBINOP_FN (mm_el_div, T1 ## _matrix, T2 ## _matrix, T1 ## _array, T2 ## _array, quotient) \ | |
312 \ | |
313 /* DEFNDBINOP_FN (mm_el_pow, T1 ## _matrix, T2 ## _matrix, T1 ## _array, T2 ## _array, elem_xpow) */ \ | |
314 \ | |
315 /* DEFBINOP (mm_el_ldiv, T1 ## _matrix, T2 ## _matrix) */ \ | |
316 /* { */ \ | |
317 /* CAST_BINOP_ARGS (const octave_matrix&, const octave_matrix&); */ \ | |
318 /* */ \ | |
319 /* return octave_value (quotient (v2.array_value (), v1.array_value ())); */ \ | |
320 /* } */ | |
321 | |
322 #define OCTAVE_MM_INT_CMP_OPS(T1, T2) \ | |
323 DEFNDBINOP_FN (mm_lt, T1 ## _matrix, T2 ## _matrix, T1 ## _array, T2 ## _array, mx_el_lt) \ | |
324 DEFNDBINOP_FN (mm_le, T1 ## _matrix, T2 ## _matrix, T1 ## _array, T2 ## _array, mx_el_le) \ | |
325 DEFNDBINOP_FN (mm_eq, T1 ## _matrix, T2 ## _matrix, T1 ## _array, T2 ## _array, mx_el_eq) \ | |
326 DEFNDBINOP_FN (mm_ge, T1 ## _matrix, T2 ## _matrix, T1 ## _array, T2 ## _array, mx_el_ge) \ | |
327 DEFNDBINOP_FN (mm_gt, T1 ## _matrix, T2 ## _matrix, T1 ## _array, T2 ## _array, mx_el_gt) \ | |
328 DEFNDBINOP_FN (mm_ne, T1 ## _matrix, T2 ## _matrix, T1 ## _array, T2 ## _array, mx_el_ne) | |
329 | |
330 #define OCTAVE_MM_INT_BOOL_OPS(T1, T2) \ | |
331 DEFNDBINOP_FN (mm_el_and, T1 ## _matrix, T2 ## _matrix, T1 ## _array, T2 ## _array, mx_el_and) \ | |
332 DEFNDBINOP_FN (mm_el_or, T1 ## _matrix, T2 ## _matrix, T1 ## _array, T2 ## _array, mx_el_or) | |
333 | |
334 #define OCTAVE_MM_INT_ASSIGN_OPS(TYPE) \ | |
335 DEFNDASSIGNOP_FN (mm_assign, TYPE ## _matrix, TYPE ## _matrix, TYPE ## _array, assign) | |
336 | |
337 #define OCTAVE_MM_INT_OPS(TYPE) \ | |
338 OCTAVE_M_INT_UNOPS (TYPE) \ | |
339 OCTAVE_MM_INT_ARITH_OPS (TYPE, TYPE) \ | |
340 OCTAVE_MM_INT_CMP_OPS (TYPE, TYPE) \ | |
341 OCTAVE_MM_INT_BOOL_OPS (TYPE, TYPE) \ | |
342 OCTAVE_MM_INT_ASSIGN_OPS (TYPE) | |
343 | |
344 #define OCTAVE_MM_INT_OPS2(T1, T2) \ | |
345 OCTAVE_MM_INT_ARITH_OPS (T1, T2) \ | |
346 OCTAVE_MM_INT_CMP_OPS (T1, T2) \ | |
347 OCTAVE_MM_INT_BOOL_OPS (T1, T2) | |
348 | |
349 #define OCTAVE_INT_OPS(TYPE) \ | |
350 OCTAVE_SS_INT_OPS (TYPE) \ | |
351 OCTAVE_SM_INT_OPS (TYPE) \ | |
352 OCTAVE_MS_INT_OPS (TYPE) \ | |
353 OCTAVE_MM_INT_OPS (TYPE) | |
354 | |
355 #define OCTAVE_INSTALL_S_INT_UNOPS(TYPE) \ | |
356 INSTALL_UNOP (op_not, octave_ ## TYPE ## _scalar, s_not); \ | |
357 INSTALL_UNOP (op_uminus, octave_ ## TYPE ## _scalar, s_uminus); \ | |
358 INSTALL_UNOP (op_transpose, octave_ ## TYPE ## _scalar, s_transpose); \ | |
359 INSTALL_UNOP (op_hermitian, octave_ ## TYPE ## _scalar, s_hermitian); \ | |
360 \ | |
361 /* INSTALL_NCUNOP (op_incr, octave_ ## TYPE ## _scalar, s_incr); */ \ | |
362 /* INSTALL_NCUNOP (op_decr, octave_ ## TYPE ## _scalar, s_decr); */ | |
363 | |
364 #define OCTAVE_INSTALL_SS_INT_ARITH_OPS(T1, T2) \ | |
365 INSTALL_BINOP (op_add, octave_ ## T1 ## _scalar, octave_ ## T2 ## _scalar, ss_add); \ | |
366 INSTALL_BINOP (op_sub, octave_ ## T1 ## _scalar, octave_ ## T2 ## _scalar, ss_sub); \ | |
367 INSTALL_BINOP (op_mul, octave_ ## T1 ## _scalar, octave_ ## T2 ## _scalar, ss_mul); \ | |
368 INSTALL_BINOP (op_div, octave_ ## T1 ## _scalar, octave_ ## T2 ## _scalar, ss_div); \ | |
369 /* INSTALL_BINOP (op_pow, octave_ ## T1 ## _scalar, octave_ ## T2 ## _scalar, ss_pow); */ \ | |
370 INSTALL_BINOP (op_ldiv, octave_ ## T1 ## _scalar, octave_ ## T2 ## _scalar, ss_ldiv); \ | |
371 INSTALL_BINOP (op_el_mul, octave_ ## T1 ## _scalar, octave_ ## T2 ## _scalar, ss_el_mul); \ | |
372 INSTALL_BINOP (op_el_div, octave_ ## T1 ## _scalar, octave_ ## T2 ## _scalar, ss_el_div); \ | |
373 INSTALL_BINOP (op_el_pow, octave_ ## T1 ## _scalar, octave_ ## T2 ## _scalar, ss_el_pow); \ | |
374 INSTALL_BINOP (op_el_ldiv, octave_ ## T1 ## _scalar, octave_ ## T2 ## _scalar, ss_el_ldiv); | |
375 | |
376 #define OCTAVE_INSTALL_SS_INT_CMP_OPS(T1, T2) \ | |
377 INSTALL_BINOP (op_lt, octave_ ## T1 ## _scalar, octave_ ## T2 ## _scalar, ss_lt); \ | |
378 INSTALL_BINOP (op_le, octave_ ## T1 ## _scalar, octave_ ## T2 ## _scalar, ss_le); \ | |
379 INSTALL_BINOP (op_eq, octave_ ## T1 ## _scalar, octave_ ## T2 ## _scalar, ss_eq); \ | |
380 INSTALL_BINOP (op_ge, octave_ ## T1 ## _scalar, octave_ ## T2 ## _scalar, ss_ge); \ | |
381 INSTALL_BINOP (op_gt, octave_ ## T1 ## _scalar, octave_ ## T2 ## _scalar, ss_gt); \ | |
382 INSTALL_BINOP (op_ne, octave_ ## T1 ## _scalar, octave_ ## T2 ## _scalar, ss_ne); | |
383 | |
384 #define OCTAVE_INSTALL_SS_INT_BOOL_OPS(T1, T2) \ | |
385 /* INSTALL_BINOP (op_el_and, octave_ ## T1 ## _scalar, octave_ ## T2 ## _scalar, ss_el_and); */ \ | |
386 /* INSTALL_BINOP (op_el_or, octave_ ## T1 ## _scalar, octave_ ## T2 ## _scalar, ss_el_or); */ | |
387 | |
388 #define OCTAVE_INSTALL_SS_INT_OPS(TYPE) \ | |
389 OCTAVE_INSTALL_S_INT_UNOPS (TYPE) \ | |
390 OCTAVE_INSTALL_SS_INT_ARITH_OPS (TYPE, TYPE) \ | |
391 OCTAVE_INSTALL_SS_INT_CMP_OPS (TYPE, TYPE) \ | |
392 OCTAVE_INSTALL_SS_INT_BOOL_OPS (TYPE, TYPE) \ | |
393 INSTALL_ASSIGNCONV (octave_ ## TYPE ## _scalar, octave_ ## TYPE ## _scalar, octave_ ## TYPE ## _matrix) | |
394 | |
395 #define OCTAVE_INSTALL_SS_INT_OPS2(T1, T2) \ | |
396 OCTAVE_INSTALL_SS_INT_ARITH_OPS (T1, T2) \ | |
397 OCTAVE_INSTALL_SS_INT_CMP_OPS (T1, T2) \ | |
398 OCTAVE_INSTALL_SS_INT_BOOL_OPS (T1, T2) | |
399 | |
400 #define OCTAVE_INSTALL_SM_INT_ARITH_OPS(T1, T2) \ | |
401 INSTALL_BINOP (op_add, octave_ ## T1 ## _scalar, octave_ ## T2 ## _matrix, sm_add); \ | |
402 INSTALL_BINOP (op_sub, octave_ ## T1 ## _scalar, octave_ ## T2 ## _matrix, sm_sub); \ | |
403 INSTALL_BINOP (op_mul, octave_ ## T1 ## _scalar, octave_ ## T2 ## _matrix, sm_mul); \ | |
404 /* INSTALL_BINOP (op_div, octave_ ## T1 ## _scalar, octave_ ## T2 ## _matrix, sm_div); */ \ | |
405 /* INSTALL_BINOP (op_pow, octave_ ## T1 ## _scalar, octave_ ## T2 ## _matrix, sm_pow); */ \ | |
406 /* INSTALL_BINOP (op_ldiv, octave_ ## T1 ## _scalar, octave_ ## T2 ## _matrix, sm_ldiv); */ \ | |
407 INSTALL_BINOP (op_el_mul, octave_ ## T1 ## _scalar, octave_ ## T2 ## _matrix, sm_el_mul); \ | |
408 /* INSTALL_BINOP (op_el_div, octave_ ## T1 ## _scalar, octave_ ## T2 ## _matrix, sm_el_div); */ \ | |
409 /* INSTALL_BINOP (op_el_pow, octave_ ## T1 ## _scalar, octave_ ## T2 ## _matrix, sm_el_pow); */ \ | |
410 /* INSTALL_BINOP (op_el_ldiv, octave_ ## T1 ## _scalar, octave_ ## T2 ## _matrix, sm_el_ldiv); */ | |
411 | |
412 #define OCTAVE_INSTALL_SM_INT_CMP_OPS(T1, T2) \ | |
413 INSTALL_BINOP (op_lt, octave_ ## T1 ## _scalar, octave_ ## T2 ## _matrix, sm_lt); \ | |
414 INSTALL_BINOP (op_le, octave_ ## T1 ## _scalar, octave_ ## T2 ## _matrix, sm_le); \ | |
415 INSTALL_BINOP (op_eq, octave_ ## T1 ## _scalar, octave_ ## T2 ## _matrix, sm_eq); \ | |
416 INSTALL_BINOP (op_ge, octave_ ## T1 ## _scalar, octave_ ## T2 ## _matrix, sm_ge); \ | |
417 INSTALL_BINOP (op_gt, octave_ ## T1 ## _scalar, octave_ ## T2 ## _matrix, sm_gt); \ | |
418 INSTALL_BINOP (op_ne, octave_ ## T1 ## _scalar, octave_ ## T2 ## _matrix, sm_ne); | |
419 | |
420 #define OCTAVE_INSTALL_SM_INT_BOOL_OPS(T1, T2) \ | |
421 /* INSTALL_BINOP (op_el_and, octave_ ## T1 ## _scalar, octave_ ## T2 ## _matrix, sm_el_and); */ \ | |
422 /* INSTALL_BINOP (op_el_or, octave_ ## T1 ## _scalar, octave_ ## T2 ## _matrix, sm_el_or); */ | |
423 | |
424 #define OCTAVE_INSTALL_SM_INT_OPS(TYPE) \ | |
425 OCTAVE_INSTALL_SM_INT_ARITH_OPS (TYPE, TYPE) \ | |
426 OCTAVE_INSTALL_SM_INT_CMP_OPS (TYPE, TYPE) \ | |
427 OCTAVE_INSTALL_SM_INT_BOOL_OPS (TYPE, TYPE) \ | |
428 /* INSTALL_WIDENOP (octave_ ## TYPE ## _scalar, octave_ ## TYPE ## _matrix, TYPE ## _matrix_conv); */ \ | |
429 INSTALL_ASSIGNCONV (octave_ ## TYPE ## _scalar, octave_ ## TYPE ## _matrix, octave_ ## TYPE ## _matrix) | |
430 | |
431 #define OCTAVE_INSTALL_SM_INT_OPS2(T1, T2) \ | |
432 OCTAVE_INSTALL_SM_INT_ARITH_OPS (T1, T2) \ | |
433 OCTAVE_INSTALL_SM_INT_CMP_OPS (T1, T2) \ | |
434 OCTAVE_INSTALL_SM_INT_BOOL_OPS (T1, T2) | |
435 | |
436 #define OCTAVE_INSTALL_MS_INT_ARITH_OPS(T1, T2) \ | |
437 INSTALL_BINOP (op_add, octave_ ## T1 ## _matrix, octave_ ## T2 ## _scalar, ms_add); \ | |
438 INSTALL_BINOP (op_sub, octave_ ## T1 ## _matrix, octave_ ## T2 ## _scalar, ms_sub); \ | |
439 INSTALL_BINOP (op_mul, octave_ ## T1 ## _matrix, octave_ ## T2 ## _scalar, ms_mul); \ | |
440 /* INSTALL_BINOP (op_div, octave_ ## T1 ## _matrix, octave_ ## T2 ## _scalar, ms_div); */ \ | |
441 /* INSTALL_BINOP (op_pow, octave_ ## T1 ## _matrix, octave_ ## T2 ## _scalar, ms_pow); */ \ | |
442 /* INSTALL_BINOP (op_ldiv, octave_ ## T1 ## _matrix, octave_ ## T2 ## _scalar, ms_ldiv); */ \ | |
443 \ | |
444 INSTALL_BINOP (op_el_mul, octave_ ## T1 ## _matrix, octave_ ## T2 ## _scalar, ms_el_mul); \ | |
445 /* INSTALL_BINOP (op_el_div, octave_ ## T1 ## _matrix, octave_ ## T2 ## _scalar, ms_el_div); */ \ | |
446 /* INSTALL_BINOP (op_el_pow, octave_ ## T1 ## _matrix, octave_ ## T2 ## _scalar, ms_el_pow); */ \ | |
447 /* INSTALL_BINOP (op_el_ldiv, octave_ ## T1 ## _matrix, octave_ ## T2 ## _scalar, ms_el_ldiv); */ | |
448 | |
449 #define OCTAVE_INSTALL_MS_INT_CMP_OPS(T1, T2) \ | |
450 /* INSTALL_BINOP (op_lt, octave_ ## T1 ## _matrix, octave_ ## T2 ## _scalar, ms_lt); */ \ | |
451 \ | |
452 octave_value_typeinfo::register_binary_op \ | |
453 (octave_value::op_lt, octave_ ## T1 ## _matrix::static_type_id (), \ | |
454 octave_ ## T2 ## _scalar::static_type_id (), oct_binop_ms_lt); \ | |
455 \ | |
456 INSTALL_BINOP (op_le, octave_ ## T1 ## _matrix, octave_ ## T2 ## _scalar, ms_le); \ | |
457 INSTALL_BINOP (op_eq, octave_ ## T1 ## _matrix, octave_ ## T2 ## _scalar, ms_eq); \ | |
458 INSTALL_BINOP (op_ge, octave_ ## T1 ## _matrix, octave_ ## T2 ## _scalar, ms_ge); \ | |
459 INSTALL_BINOP (op_gt, octave_ ## T1 ## _matrix, octave_ ## T2 ## _scalar, ms_gt); \ | |
460 INSTALL_BINOP (op_ne, octave_ ## T1 ## _matrix, octave_ ## T2 ## _scalar, ms_ne); | |
461 | |
462 #define OCTAVE_INSTALL_MS_INT_BOOL_OPS(T1, T2) \ | |
463 /* INSTALL_BINOP (op_el_and, octave_ ## T1 ## _matrix, octave_ ## T2 ## _scalar, ms_el_and); */ \ | |
464 /* INSTALL_BINOP (op_el_or, octave_ ## T1 ## _matrix, octave_ ## T2 ## _scalar, ms_el_or); */ | |
465 | |
466 #define OCTAVE_INSTALL_MS_INT_OPS(TYPE) \ | |
467 OCTAVE_INSTALL_MS_INT_ARITH_OPS (TYPE, TYPE) \ | |
468 OCTAVE_INSTALL_MS_INT_CMP_OPS (TYPE, TYPE) \ | |
469 OCTAVE_INSTALL_MS_INT_BOOL_OPS (TYPE, TYPE) \ | |
470 INSTALL_ASSIGNOP (op_asn_eq, octave_ ## TYPE ## _matrix, octave_ ## TYPE ## _scalar, ms_assign) | |
471 | |
472 #define OCTAVE_INSTALL_MS_INT_OPS2(T1, T2) \ | |
473 OCTAVE_INSTALL_MS_INT_ARITH_OPS (T1, T2) \ | |
474 OCTAVE_INSTALL_MS_INT_CMP_OPS (T1, T2) \ | |
475 OCTAVE_INSTALL_MS_INT_BOOL_OPS (T1, T2) | |
476 | |
477 #define OCTAVE_INSTALL_M_INT_UNOPS(TYPE) \ | |
478 INSTALL_UNOP (op_not, octave_ ## TYPE ## _matrix, m_not); \ | |
479 INSTALL_UNOP (op_uminus, octave_ ## TYPE ## _matrix, m_uminus); \ | |
480 INSTALL_UNOP (op_transpose, octave_ ## TYPE ## _matrix, m_transpose); \ | |
481 INSTALL_UNOP (op_hermitian, octave_ ## TYPE ## _matrix, m_transpose); \ | |
482 \ | |
483 /* INSTALL_NCUNOP (op_incr, octave_ ## TYPE ## _matrix, m_incr); */ \ | |
484 /* INSTALL_NCUNOP (op_decr, octave_ ## TYPE ## _matrix, m_decr); */ | |
485 | |
486 #define OCTAVE_INSTALL_MM_INT_ARITH_OPS(T1, T2) \ | |
487 INSTALL_BINOP (op_add, octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, mm_add); \ | |
488 INSTALL_BINOP (op_sub, octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, mm_sub); \ | |
489 /* INSTALL_BINOP (op_mul, octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, mm_mul); */ \ | |
490 /* INSTALL_BINOP (op_div, octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, mm_div); */ \ | |
491 INSTALL_BINOP (op_pow, octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, mm_pow); \ | |
492 /* INSTALL_BINOP (op_ldiv, octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, mm_ldiv); */ \ | |
493 INSTALL_BINOP (op_el_mul, octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, mm_el_mul); \ | |
494 INSTALL_BINOP (op_el_div, octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, mm_el_div); \ | |
495 /* INSTALL_BINOP (op_el_pow, octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, mm_el_pow); */ \ | |
496 /* INSTALL_BINOP (op_el_ldiv, octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, mm_el_ldiv); */ | |
497 | |
498 #define OCTAVE_INSTALL_MM_INT_CMP_OPS(T1, T2) \ | |
499 INSTALL_BINOP (op_lt, octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, mm_lt); \ | |
500 INSTALL_BINOP (op_le, octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, mm_le); \ | |
501 INSTALL_BINOP (op_eq, octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, mm_eq); \ | |
502 INSTALL_BINOP (op_ge, octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, mm_ge); \ | |
503 INSTALL_BINOP (op_gt, octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, mm_gt); \ | |
504 INSTALL_BINOP (op_ne, octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, mm_ne); | |
505 | |
506 #define OCTAVE_INSTALL_MM_INT_BOOL_OPS(T1, T2) \ | |
507 INSTALL_BINOP (op_el_and, octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, mm_el_and); \ | |
508 INSTALL_BINOP (op_el_or, octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, mm_el_or); | |
509 | |
510 #define OCTAVE_INSTALL_MM_INT_ASSIGN_OPS(TYPE) \ | |
511 INSTALL_ASSIGNOP (op_asn_eq, octave_ ## TYPE ## _matrix, octave_ ## TYPE ## _matrix, mm_assign) | |
512 | |
513 #define OCTAVE_INSTALL_MM_INT_OPS(TYPE) \ | |
514 OCTAVE_INSTALL_M_INT_UNOPS (TYPE) \ | |
515 OCTAVE_INSTALL_MM_INT_ARITH_OPS (TYPE, TYPE) \ | |
516 OCTAVE_INSTALL_MM_INT_CMP_OPS (TYPE, TYPE) \ | |
517 OCTAVE_INSTALL_MM_INT_BOOL_OPS (TYPE, TYPE) \ | |
518 OCTAVE_INSTALL_MM_INT_ASSIGN_OPS (TYPE) | |
519 | |
520 #define OCTAVE_INSTALL_MM_INT_OPS2(T1, T2) \ | |
521 OCTAVE_INSTALL_MM_INT_ARITH_OPS (T1, T2) \ | |
522 OCTAVE_INSTALL_MM_INT_CMP_OPS (T1, T2) \ | |
523 OCTAVE_INSTALL_MM_INT_BOOL_OPS (T1, T2) | |
524 | |
525 #define OCTAVE_INSTALL_INT_OPS(TYPE) \ | |
526 OCTAVE_INSTALL_SS_INT_OPS (TYPE) \ | |
527 OCTAVE_INSTALL_SM_INT_OPS (TYPE) \ | |
528 OCTAVE_INSTALL_MS_INT_OPS (TYPE) \ | |
529 OCTAVE_INSTALL_MM_INT_OPS (TYPE) | |
530 | |
531 /* | |
532 ;;; Local Variables: *** | |
533 ;;; mode: C++ *** | |
534 ;;; End: *** | |
535 */ | |
536 |