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