00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "quit.h"
00024
00025 #define DEFINTBINOP_OP(name, t1, t2, op, t3) \
00026 BINOPDECL (name, a1, a2) \
00027 { \
00028 CAST_BINOP_ARGS (const octave_ ## t1&, const octave_ ## t2&); \
00029 octave_value retval = octave_value \
00030 (v1.t1 ## _value () op v2.t2 ## _value ()); \
00031 return retval; \
00032 }
00033
00034 #define DEFINTNDBINOP_OP(name, t1, t2, e1, e2, op, t3) \
00035 BINOPDECL (name, a1, a2) \
00036 { \
00037 CAST_BINOP_ARGS (const octave_ ## t1&, const octave_ ## t2&); \
00038 octave_value retval = octave_value \
00039 (v1.e1 ## _value () op v2.e2 ## _value ()); \
00040 return retval; \
00041 }
00042
00043 #define DEFINTBINOP_FN(name, t1, t2, f, t3, op) \
00044 BINOPDECL (name, a1, a2) \
00045 { \
00046 CAST_BINOP_ARGS (const octave_ ## t1&, const octave_ ## t2&); \
00047 octave_value retval = octave_value (f (v1.t1 ## _value (), v2.t2 ## _value ())); \
00048 return retval; \
00049 }
00050
00051 #define DEFINTNDBINOP_FN(name, t1, t2, e1, e2, f, t3, op) \
00052 BINOPDECL (name, a1, a2) \
00053 { \
00054 CAST_BINOP_ARGS (const octave_ ## t1&, const octave_ ## t2&); \
00055 octave_value retval = octave_value (f (v1.e1 ## _value (), v2.e2 ## _value ())); \
00056 return retval; \
00057 }
00058
00059 #define OCTAVE_CONCAT_FN2(T1, T2) \
00060 DEFNDCATOP_FN2 (T1 ## _ ## T2 ## _s_s, T1 ## _scalar, T2 ## _scalar, , T1 ## NDArray, T1 ## _array, T2 ## _array, concat) \
00061 DEFNDCATOP_FN2 (T1 ## _ ## T2 ## _s_m, T1 ## _scalar, T2 ## _matrix, , T1 ## NDArray, T1 ## _array, T2 ## _array, concat) \
00062 DEFNDCATOP_FN2 (T1 ## _ ## T2 ## _m_s, T1 ## _matrix, T2 ## _scalar, , T1 ## NDArray, T1 ## _array, T2 ## _array, concat) \
00063 DEFNDCATOP_FN2 (T1 ## _ ## T2 ## _m_m, T1 ## _matrix, T2 ## _matrix, , T1 ## NDArray, T1 ## _array, T2 ## _array, concat)
00064
00065 #define OCTAVE_INSTALL_CONCAT_FN2(T1, T2) \
00066 INSTALL_CATOP (octave_ ## T1 ## _scalar, octave_ ## T2 ## _scalar, T1 ## _ ## T2 ## _s_s) \
00067 INSTALL_CATOP (octave_ ## T1 ## _scalar, octave_ ## T2 ## _matrix, T1 ## _ ## T2 ## _s_m) \
00068 INSTALL_CATOP (octave_ ## T1 ## _matrix, octave_ ## T2 ## _scalar, T1 ## _ ## T2 ## _m_s) \
00069 INSTALL_CATOP (octave_ ## T1 ## _matrix, octave_ ## T2 ## _matrix, T1 ## _ ## T2 ## _m_m)
00070
00071 #define OCTAVE_DOUBLE_INT_CONCAT_FN(TYPE) \
00072 DEFNDCATOP_FN2 (double ## _ ## TYPE ## _s_s, scalar, TYPE ## _scalar, TYPE ## NDArray, , array, TYPE ## _array, concat) \
00073 DEFNDCATOP_FN2 (double ## _ ## TYPE ## _s_m, scalar, TYPE ## _matrix, TYPE ## NDArray, , array, TYPE ## _array, concat) \
00074 DEFNDCATOP_FN2 (double ## _ ## TYPE ## _m_s, matrix, TYPE ## _scalar, TYPE ## NDArray, , array, TYPE ## _array, concat) \
00075 DEFNDCATOP_FN2 (double ## _ ## TYPE ## _m_m, matrix, TYPE ## _matrix, TYPE ## NDArray, , array, TYPE ## _array, concat)
00076
00077 #define OCTAVE_INSTALL_DOUBLE_INT_CONCAT_FN(TYPE) \
00078 INSTALL_CATOP (octave_scalar, octave_ ## TYPE ## _scalar, double ## _ ## TYPE ## _s_s) \
00079 INSTALL_CATOP (octave_scalar, octave_ ## TYPE ## _matrix, double ## _ ## TYPE ## _s_m) \
00080 INSTALL_CATOP (octave_matrix, octave_ ## TYPE ## _scalar, double ## _ ## TYPE ## _m_s) \
00081 INSTALL_CATOP (octave_matrix, octave_ ## TYPE ## _matrix, double ## _ ## TYPE ## _m_m)
00082
00083 #define OCTAVE_INT_DOUBLE_CONCAT_FN(TYPE) \
00084 DEFNDCATOP_FN2 (TYPE ## _ ## double ## _s_s, TYPE ## _scalar, scalar, , TYPE ## NDArray, TYPE ## _array, array, concat) \
00085 DEFNDCATOP_FN2 (TYPE ## _ ## double ## _s_m, TYPE ## _scalar, matrix, , TYPE ## NDArray, TYPE ## _array, array, concat) \
00086 DEFNDCATOP_FN2 (TYPE ## _ ## double ## _m_s, TYPE ## _matrix, scalar, , TYPE ## NDArray, TYPE ## _array, array, concat) \
00087 DEFNDCATOP_FN2 (TYPE ## _ ## double ## _m_m, TYPE ## _matrix, matrix, , TYPE ## NDArray, TYPE ## _array, array, concat)
00088
00089 #define OCTAVE_INSTALL_INT_DOUBLE_CONCAT_FN(TYPE) \
00090 INSTALL_CATOP (octave_ ## TYPE ## _scalar, octave_scalar, TYPE ## _ ## double ## _s_s) \
00091 INSTALL_CATOP (octave_ ## TYPE ## _scalar, octave_matrix, TYPE ## _ ## double ## _s_m) \
00092 INSTALL_CATOP (octave_ ## TYPE ## _matrix, octave_scalar, TYPE ## _ ## double ## _m_s) \
00093 INSTALL_CATOP (octave_ ## TYPE ## _matrix, octave_matrix, TYPE ## _ ## double ## _m_m)
00094
00095 #define OCTAVE_FLOAT_INT_CONCAT_FN(TYPE) \
00096 DEFNDCATOP_FN2 (float ## _ ## TYPE ## _s_s, float_scalar, TYPE ## _scalar, TYPE ## NDArray, , float_array, TYPE ## _array, concat) \
00097 DEFNDCATOP_FN2 (float ## _ ## TYPE ## _s_m, float_scalar, TYPE ## _matrix, TYPE ## NDArray, , float_array, TYPE ## _array, concat) \
00098 DEFNDCATOP_FN2 (float ## _ ## TYPE ## _m_s, float_matrix, TYPE ## _scalar, TYPE ## NDArray, , float_array, TYPE ## _array, concat) \
00099 DEFNDCATOP_FN2 (float ## _ ## TYPE ## _m_m, float_matrix, TYPE ## _matrix, TYPE ## NDArray, , float_array, TYPE ## _array, concat)
00100
00101 #define OCTAVE_INSTALL_FLOAT_INT_CONCAT_FN(TYPE) \
00102 INSTALL_CATOP (octave_float_scalar, octave_ ## TYPE ## _scalar, float ## _ ## TYPE ## _s_s) \
00103 INSTALL_CATOP (octave_float_scalar, octave_ ## TYPE ## _matrix, float ## _ ## TYPE ## _s_m) \
00104 INSTALL_CATOP (octave_float_matrix, octave_ ## TYPE ## _scalar, float ## _ ## TYPE ## _m_s) \
00105 INSTALL_CATOP (octave_float_matrix, octave_ ## TYPE ## _matrix, float ## _ ## TYPE ## _m_m)
00106
00107 #define OCTAVE_INT_FLOAT_CONCAT_FN(TYPE) \
00108 DEFNDCATOP_FN2 (TYPE ## _ ## float ## _s_s, TYPE ## _scalar, float_scalar, , TYPE ## NDArray, TYPE ## _array, float_array, concat) \
00109 DEFNDCATOP_FN2 (TYPE ## _ ## float ## _s_m, TYPE ## _scalar, float_matrix, , TYPE ## NDArray, TYPE ## _array, float_array, concat) \
00110 DEFNDCATOP_FN2 (TYPE ## _ ## float ## _m_s, TYPE ## _matrix, float_scalar, , TYPE ## NDArray, TYPE ## _array, float_array, concat) \
00111 DEFNDCATOP_FN2 (TYPE ## _ ## float ## _m_m, TYPE ## _matrix, float_matrix, , TYPE ## NDArray, TYPE ## _array, float_array, concat)
00112
00113 #define OCTAVE_INSTALL_INT_FLOAT_CONCAT_FN(TYPE) \
00114 INSTALL_CATOP (octave_ ## TYPE ## _scalar, octave_float_scalar, TYPE ## _ ## float ## _s_s) \
00115 INSTALL_CATOP (octave_ ## TYPE ## _scalar, octave_float_matrix, TYPE ## _ ## float ## _s_m) \
00116 INSTALL_CATOP (octave_ ## TYPE ## _matrix, octave_float_scalar, TYPE ## _ ## float ## _m_s) \
00117 INSTALL_CATOP (octave_ ## TYPE ## _matrix, octave_float_matrix, TYPE ## _ ## float ## _m_m)
00118
00119
00120
00121
00122 #define OCTAVE_CHAR_INT_CONCAT_FN(TYPE) \
00123 DEFNDCHARCATOP_FN (char ## _ ## TYPE ## _m_s, char_matrix, TYPE ## _scalar, concat) \
00124 DEFNDCHARCATOP_FN (char ## _ ## TYPE ## _m_m, char_matrix, TYPE ## _matrix, concat)
00125
00126 #define OCTAVE_INSTALL_CHAR_INT_CONCAT_FN(TYPE) \
00127 INSTALL_CATOP (octave_char_matrix_str, octave_ ## TYPE ## _scalar, char ## _ ## TYPE ## _m_s) \
00128 INSTALL_CATOP (octave_char_matrix_str, octave_ ## TYPE ## _matrix, char ## _ ## TYPE ## _m_m) \
00129 INSTALL_CATOP (octave_char_matrix_sq_str, octave_ ## TYPE ## _scalar, char ## _ ## TYPE ## _m_s) \
00130 INSTALL_CATOP (octave_char_matrix_sq_str, octave_ ## TYPE ## _matrix, char ## _ ## TYPE ## _m_m)
00131
00132 #define OCTAVE_INT_CHAR_CONCAT_FN(TYPE) \
00133 DEFNDCHARCATOP_FN (TYPE ## _ ## char ## _s_m, TYPE ## _scalar, char_matrix, concat) \
00134 DEFNDCHARCATOP_FN (TYPE ## _ ## char ## _m_m, TYPE ## _matrix, char_matrix, concat)
00135
00136 #define OCTAVE_INSTALL_INT_CHAR_CONCAT_FN(TYPE) \
00137 INSTALL_CATOP (octave_ ## TYPE ## _scalar, octave_char_matrix_str, TYPE ## _ ## char ## _s_m) \
00138 INSTALL_CATOP (octave_ ## TYPE ## _matrix, octave_char_matrix_str, TYPE ## _ ## char ## _m_m) \
00139 INSTALL_CATOP (octave_ ## TYPE ## _scalar, octave_char_matrix_sq_str, TYPE ## _ ## char ## _s_m) \
00140 INSTALL_CATOP (octave_ ## TYPE ## _matrix, octave_char_matrix_sq_str, TYPE ## _ ## char ## _m_m)
00141
00142 #define OCTAVE_CONCAT_FN(TYPE) \
00143 DEFNDCATOP_FN (TYPE ## _s_s, TYPE ## _scalar, TYPE ## _scalar, TYPE ## _array, TYPE ## _array, concat) \
00144 DEFNDCATOP_FN (TYPE ## _s_m, TYPE ## _scalar, TYPE ## _matrix, TYPE ## _array, TYPE ## _array, concat) \
00145 DEFNDCATOP_FN (TYPE ## _m_s, TYPE ## _matrix, TYPE ## _scalar, TYPE ## _array, TYPE ## _array, concat) \
00146 DEFNDCATOP_FN (TYPE ## _m_m, TYPE ## _matrix, TYPE ## _matrix, TYPE ## _array, TYPE ## _array, concat)
00147
00148 #define OCTAVE_INSTALL_CONCAT_FN(TYPE) \
00149 INSTALL_CATOP (octave_ ## TYPE ## _scalar, octave_ ## TYPE ## _scalar, TYPE ## _s_s) \
00150 INSTALL_CATOP (octave_ ## TYPE ## _scalar, octave_ ## TYPE ## _matrix, TYPE ## _s_m) \
00151 INSTALL_CATOP (octave_ ## TYPE ## _matrix, octave_ ## TYPE ## _scalar, TYPE ## _m_s) \
00152 INSTALL_CATOP (octave_ ## TYPE ## _matrix, octave_ ## TYPE ## _matrix, TYPE ## _m_m)
00153
00154 #define OCTAVE_S_INT_UNOPS(TYPE) \
00155 \
00156 \
00157 DEFUNOP_OP (s_not, TYPE ## _scalar, !) \
00158 DEFUNOP_OP (s_uplus, TYPE ## _scalar, ) \
00159 DEFUNOP (s_uminus, TYPE ## _scalar) \
00160 { \
00161 CAST_UNOP_ARG (const octave_ ## TYPE ## _scalar &); \
00162 octave_value retval = octave_value (- v. TYPE ## _scalar_value ()); \
00163 return retval; \
00164 } \
00165 DEFUNOP_OP (s_transpose, TYPE ## _scalar, ) \
00166 DEFUNOP_OP (s_hermitian, TYPE ## _scalar, ) \
00167 \
00168 DEFNCUNOP_METHOD (s_incr, TYPE ## _scalar, increment) \
00169 DEFNCUNOP_METHOD (s_decr, TYPE ## _scalar, decrement)
00170
00171 #define OCTAVE_SS_INT_ARITH_OPS(PFX, T1, T2, T3) \
00172 \
00173 \
00174 DEFINTBINOP_OP (PFX ## _add, T1 ## scalar, T2 ## scalar, +, T3) \
00175 DEFINTBINOP_OP (PFX ## _sub, T1 ## scalar, T2 ## scalar, -, T3) \
00176 DEFINTBINOP_OP (PFX ## _mul, T1 ## scalar, T2 ## scalar, *, T3) \
00177 \
00178 DEFBINOP (PFX ## _div, T1 ## scalar, T2 ## scalar) \
00179 { \
00180 CAST_BINOP_ARGS (const octave_ ## T1 ## scalar&, const octave_ ## T2 ## scalar&); \
00181 \
00182 if (! v2.T2 ## scalar_value ()) \
00183 gripe_divide_by_zero (); \
00184 \
00185 octave_value retval = octave_value (v1.T1 ## scalar_value () / v2.T2 ## scalar_value ()); \
00186 return retval; \
00187 } \
00188 \
00189 DEFINTBINOP_FN (PFX ## _pow, T1 ## scalar, T2 ## scalar, xpow, T3, ^) \
00190 \
00191 DEFBINOP (PFX ## _ldiv, T1 ## scalar, T2 ## scalar) \
00192 { \
00193 CAST_BINOP_ARGS (const octave_ ## T1 ## scalar&, const octave_ ## T2 ## scalar&); \
00194 \
00195 if (! v1.T1 ## scalar_value ()) \
00196 gripe_divide_by_zero (); \
00197 \
00198 octave_value retval = octave_value (v2.T2 ## scalar_value () / v1.T1 ## scalar_value ()); \
00199 return retval; \
00200 } \
00201 \
00202 DEFINTBINOP_OP (PFX ## _el_mul, T1 ## scalar, T2 ## scalar, *, T3) \
00203 \
00204 DEFBINOP (PFX ## _el_div, T1 ## scalar, T2 ## scalar) \
00205 { \
00206 CAST_BINOP_ARGS (const octave_ ## T1 ## scalar&, const octave_ ## T2 ## scalar&); \
00207 \
00208 if (! v2.T2 ## scalar_value ()) \
00209 gripe_divide_by_zero (); \
00210 \
00211 octave_value retval = octave_value (v1.T1 ## scalar_value () / v2.T2 ## scalar_value ()); \
00212 return retval; \
00213 } \
00214 \
00215 DEFINTBINOP_FN (PFX ## _el_pow, T1 ## scalar, T2 ## scalar, xpow, T3, .^) \
00216 \
00217 DEFBINOP (PFX ## _el_ldiv, T1 ## scalar, T2 ## scalar) \
00218 { \
00219 CAST_BINOP_ARGS (const octave_ ## T1 ## scalar&, const octave_ ## T2 ## scalar&); \
00220 \
00221 if (! v1.T1 ## scalar_value ()) \
00222 gripe_divide_by_zero (); \
00223 \
00224 octave_value retval = octave_value (v2.T2 ## scalar_value () / v1.T1 ## scalar_value ()); \
00225 return retval; \
00226 } \
00227
00228 #define OCTAVE_SS_INT_BOOL_OPS(PFX, T1, T2, Z1, Z2) \
00229 DEFBINOP (PFX ## _el_and, T2, T2) \
00230 { \
00231 CAST_BINOP_ARGS (const octave_ ## T1 ## scalar&, const octave_ ## T2 ## scalar&); \
00232 \
00233 return v1.T1 ## scalar_value () != Z1 && v2.T2 ## scalar_value () != Z2; \
00234 } \
00235 \
00236 DEFBINOP (PFX ## _el_or, T1, T2) \
00237 { \
00238 CAST_BINOP_ARGS (const octave_ ## T1 ## scalar&, const octave_ ## T2 ## scalar&); \
00239 \
00240 return v1.T1 ## scalar_value () != Z1 || v2.T2 ## scalar_value () != Z2; \
00241 }
00242
00243 #define OCTAVE_SS_INT_CMP_OPS(PFX, T1, T2) \
00244 DEFBINOP_OP (PFX ## _lt, T1 ## scalar, T2 ## scalar, <) \
00245 DEFBINOP_OP (PFX ## _le, T1 ## scalar, T2 ## scalar, <=) \
00246 DEFBINOP_OP (PFX ## _eq, T1 ## scalar, T2 ## scalar, ==) \
00247 DEFBINOP_OP (PFX ## _ge, T1 ## scalar, T2 ## scalar, >=) \
00248 DEFBINOP_OP (PFX ## _gt, T1 ## scalar, T2 ## scalar, >) \
00249 DEFBINOP_OP (PFX ## _ne, T1 ## scalar, T2 ## scalar, !=)
00250
00251 #define OCTAVE_SS_POW_OPS(T1, T2) \
00252 octave_value \
00253 xpow (const octave_ ## T1& a, const octave_ ## T2& b) \
00254 { \
00255 return pow (a, b); \
00256 } \
00257 \
00258 octave_value \
00259 xpow (const octave_ ## T1& a, double b) \
00260 { \
00261 return pow (a, b); \
00262 } \
00263 \
00264 octave_value \
00265 xpow (double a, const octave_ ## T1& b) \
00266 { \
00267 return pow (a, b); \
00268 } \
00269 \
00270 octave_value \
00271 xpow (const octave_ ## T1& a, float b) \
00272 { \
00273 return powf (a, b); \
00274 } \
00275 \
00276 octave_value \
00277 xpow (float a, const octave_ ## T1& b) \
00278 { \
00279 return powf (a, b); \
00280 }
00281
00282 #define OCTAVE_SS_INT_OPS(TYPE) \
00283 OCTAVE_S_INT_UNOPS (TYPE) \
00284 OCTAVE_SS_POW_OPS (TYPE, TYPE) \
00285 OCTAVE_SS_INT_ARITH_OPS (ss, TYPE ## _, TYPE ## _, TYPE) \
00286 OCTAVE_SS_INT_ARITH_OPS (ssx, TYPE ## _, , TYPE) \
00287 OCTAVE_SS_INT_ARITH_OPS (sxs, , TYPE ## _, TYPE) \
00288 OCTAVE_SS_INT_ARITH_OPS (ssfx, TYPE ## _, float_, TYPE) \
00289 OCTAVE_SS_INT_ARITH_OPS (sfxs, float_, TYPE ## _, TYPE) \
00290 OCTAVE_SS_INT_CMP_OPS (ss, TYPE ## _, TYPE ## _) \
00291 OCTAVE_SS_INT_CMP_OPS (sx, TYPE ## _, ) \
00292 OCTAVE_SS_INT_CMP_OPS (xs, , TYPE ## _) \
00293 OCTAVE_SS_INT_CMP_OPS (sfx, TYPE ## _, float_) \
00294 OCTAVE_SS_INT_CMP_OPS (fxs, float_, TYPE ## _) \
00295 OCTAVE_SS_INT_BOOL_OPS (ss, TYPE ## _, TYPE ## _, octave_ ## TYPE (0), octave_ ## TYPE (0)) \
00296 OCTAVE_SS_INT_BOOL_OPS (sx, TYPE ## _, , octave_ ## TYPE (0), 0) \
00297 OCTAVE_SS_INT_BOOL_OPS (xs, , TYPE ## _, 0, octave_ ## TYPE (0)) \
00298 OCTAVE_SS_INT_BOOL_OPS (sfx, TYPE ## _, float_, octave_ ## TYPE (0), 0) \
00299 OCTAVE_SS_INT_BOOL_OPS (fxs, float_, TYPE ## _, 0, octave_ ## TYPE (0))
00300
00301 #define OCTAVE_SM_INT_ARITH_OPS(PFX, TS, TM, TI) \
00302 \
00303 \
00304 DEFINTNDBINOP_OP (PFX ## _add, TS ## scalar, TM ## matrix, TS ## scalar, TM ## array, +, TI) \
00305 DEFINTNDBINOP_OP (PFX ## _sub, TS ## scalar, TM ## matrix, TS ## scalar, TM ## array, -, TI) \
00306 DEFINTNDBINOP_OP (PFX ## _mul, TS ## scalar, TM ## matrix, TS ## scalar, TM ## array, *, TI) \
00307 \
00308 \
00309 \
00310 \
00311 \
00312 \
00313 \
00314 \
00315 \
00316 \
00317 \
00318 \
00319 \
00320 DEFBINOP (PFX ## _ldiv, TS ## scalar, TM ## matrix) \
00321 { \
00322 CAST_BINOP_ARGS (const octave_ ## TS ## scalar&, const octave_ ## TM ## matrix&); \
00323 \
00324 if (! v1.TS ## scalar_value ()) \
00325 gripe_divide_by_zero (); \
00326 \
00327 octave_value retval = octave_value (v2.TS ## scalar_value () / v1.TS ## scalar_value ()); \
00328 return retval; \
00329 } \
00330 \
00331 DEFINTNDBINOP_OP (PFX ## _el_mul, TS ## scalar, TM ## matrix, TS ## scalar, TM ## array, *, TI) \
00332 DEFBINOP (PFX ## _el_div, TS ## scalar, TM ## matrix) \
00333 { \
00334 CAST_BINOP_ARGS (const octave_ ## TS ## scalar&, const octave_ ## TM ## matrix&); \
00335 \
00336 octave_value retval = octave_value (v1.TS ## scalar_value () / v2.TM ## array_value ()); \
00337 return retval; \
00338 } \
00339 \
00340 DEFINTNDBINOP_FN (PFX ## _el_pow, TS ## scalar, TM ## matrix, TS ## scalar, TM ## array, elem_xpow, TI, .^) \
00341 \
00342 DEFBINOP (PFX ## _el_ldiv, TS ## scalar, TM ## matrix) \
00343 { \
00344 CAST_BINOP_ARGS (const octave_ ## TS ## scalar&, const octave_ ## TM ## matrix&); \
00345 \
00346 if (! v1.TS ## scalar_value ()) \
00347 gripe_divide_by_zero (); \
00348 \
00349 octave_value retval = octave_value (v2.TM ## array_value () / v1.TS ## scalar_value ()); \
00350 return retval; \
00351 }
00352
00353 #define OCTAVE_SM_INT_CMP_OPS(PFX, TS, TM) \
00354 DEFNDBINOP_FN (PFX ## _lt, TS ## scalar, TM ## matrix, TS ## scalar, TM ## array, mx_el_lt) \
00355 DEFNDBINOP_FN (PFX ## _le, TS ## scalar, TM ## matrix, TS ## scalar, TM ## array, mx_el_le) \
00356 DEFNDBINOP_FN (PFX ## _eq, TS ## scalar, TM ## matrix, TS ## scalar, TM ## array, mx_el_eq) \
00357 DEFNDBINOP_FN (PFX ## _ge, TS ## scalar, TM ## matrix, TS ## scalar, TM ## array, mx_el_ge) \
00358 DEFNDBINOP_FN (PFX ## _gt, TS ## scalar, TM ## matrix, TS ## scalar, TM ## array, mx_el_gt) \
00359 DEFNDBINOP_FN (PFX ## _ne, TS ## scalar, TM ## matrix, TS ## scalar, TM ## array, mx_el_ne)
00360
00361 #define OCTAVE_SM_INT_BOOL_OPS(PFX, TS, TM) \
00362 DEFNDBINOP_FN (PFX ## _el_and, TS ## scalar, TM ## matrix, TS ## scalar, TM ## array, mx_el_and) \
00363 DEFNDBINOP_FN (PFX ## _el_or, TS ## scalar, TM ## matrix, TS ## scalar, TM ## array, mx_el_or) \
00364 DEFNDBINOP_FN (PFX ## _el_and_not, TS ## scalar, TM ## matrix, TS ## scalar, TM ## array, mx_el_and_not) \
00365 DEFNDBINOP_FN (PFX ## _el_or_not, TS ## scalar, TM ## matrix, TS ## scalar, TM ## array, mx_el_or_not)
00366
00367 #define OCTAVE_SM_POW_OPS(T1, T2) \
00368 octave_value \
00369 elem_xpow (const octave_ ## T1& a, const T2 ## NDArray& b) \
00370 { \
00371 T2 ## NDArray result (b.dims ()); \
00372 for (int i = 0; i < b.length (); i++) \
00373 { \
00374 OCTAVE_QUIT; \
00375 result (i) = pow (a, b(i)); \
00376 } \
00377 return octave_value (result); \
00378 } \
00379 \
00380 octave_value \
00381 elem_xpow (const octave_ ## T1& a, const NDArray& b) \
00382 { \
00383 T1 ## NDArray result (b.dims ()); \
00384 for (int i = 0; i < b.length (); i++) \
00385 { \
00386 OCTAVE_QUIT; \
00387 result (i) = pow (a, b(i)); \
00388 } \
00389 return octave_value (result); \
00390 } \
00391 \
00392 octave_value \
00393 elem_xpow (double a, const T2 ## NDArray& b) \
00394 { \
00395 T2 ## NDArray result (b.dims ()); \
00396 for (int i = 0; i < b.length (); i++) \
00397 { \
00398 OCTAVE_QUIT; \
00399 result (i) = pow (a, b(i)); \
00400 } \
00401 return octave_value (result); \
00402 } \
00403 \
00404 octave_value \
00405 elem_xpow (const octave_ ## T1& a, const FloatNDArray& b) \
00406 { \
00407 T1 ## NDArray result (b.dims ()); \
00408 for (int i = 0; i < b.length (); i++) \
00409 { \
00410 OCTAVE_QUIT; \
00411 result (i) = powf (a, b(i)); \
00412 } \
00413 return octave_value (result); \
00414 } \
00415 \
00416 octave_value \
00417 elem_xpow (float a, const T2 ## NDArray& b) \
00418 { \
00419 T2 ## NDArray result (b.dims ()); \
00420 for (int i = 0; i < b.length (); i++) \
00421 { \
00422 OCTAVE_QUIT; \
00423 result (i) = powf (a, b(i)); \
00424 } \
00425 return octave_value (result); \
00426 }
00427
00428
00429 #define OCTAVE_SM_CONV(TS, TM) \
00430 DEFCONV (TS ## s_ ## TM ## m_conv, TM ## scalar, TM ## matrix) \
00431 { \
00432 CAST_CONV_ARG (const octave_ ## TS ## scalar&); \
00433 \
00434 return new octave_ ## TM ## matrix (v.TM ## array_value ()); \
00435 }
00436
00437 #define OCTAVE_SM_INT_OPS(TYPE) \
00438 OCTAVE_SM_POW_OPS (TYPE, TYPE) \
00439 OCTAVE_SM_INT_ARITH_OPS (sm, TYPE ## _, TYPE ## _, TYPE) \
00440 OCTAVE_SM_INT_ARITH_OPS (smx, TYPE ## _, , TYPE) \
00441 OCTAVE_SM_INT_ARITH_OPS (sxm, , TYPE ## _, TYPE) \
00442 OCTAVE_SM_INT_ARITH_OPS (smfx, TYPE ## _, float_, TYPE) \
00443 OCTAVE_SM_INT_ARITH_OPS (sfxm, float_, TYPE ## _, TYPE) \
00444 OCTAVE_SM_INT_CMP_OPS (sm, TYPE ## _, TYPE ## _) \
00445 OCTAVE_SM_INT_CMP_OPS (xm, , TYPE ## _) \
00446 OCTAVE_SM_INT_CMP_OPS (smx, TYPE ## _, ) \
00447 OCTAVE_SM_INT_CMP_OPS (fxm, float_, TYPE ## _) \
00448 OCTAVE_SM_INT_CMP_OPS (smfx, TYPE ## _, float_) \
00449 OCTAVE_SM_INT_BOOL_OPS (sm, TYPE ## _, TYPE ## _) \
00450 OCTAVE_SM_INT_BOOL_OPS (xm, , TYPE ## _) \
00451 OCTAVE_SM_INT_BOOL_OPS (smx, TYPE ## _, ) \
00452 OCTAVE_SM_INT_BOOL_OPS (fxm, float_, TYPE ## _) \
00453 OCTAVE_SM_INT_BOOL_OPS (smfx, TYPE ## _, float_) \
00454 OCTAVE_SM_CONV (TYPE ## _, TYPE ## _) \
00455 OCTAVE_SM_CONV (TYPE ## _, complex_) \
00456 OCTAVE_SM_CONV (TYPE ## _, float_complex_)
00457
00458 #define OCTAVE_MS_INT_ARITH_OPS(PFX, TM, TS, TI) \
00459 \
00460 \
00461 DEFINTNDBINOP_OP (PFX ## _add, TM ## matrix, TS ## scalar, TM ## array, TS ## scalar, +, TI) \
00462 DEFINTNDBINOP_OP (PFX ## _sub, TM ## matrix, TS ## scalar, TM ## array, TS ## scalar, -, TI) \
00463 DEFINTNDBINOP_OP (PFX ## _mul, TM ## matrix, TS ## scalar, TM ## array, TS ## scalar, *, TI) \
00464 \
00465 DEFBINOP (PFX ## _div, TM ## matrix, TS ## scalar) \
00466 { \
00467 CAST_BINOP_ARGS (const octave_ ## TM ## matrix&, const octave_ ## TS ## scalar&); \
00468 \
00469 if (! v2.TS ## scalar_value ()) \
00470 gripe_divide_by_zero (); \
00471 \
00472 octave_value retval = octave_value (v1.TM ## array_value () / v2.TS ## scalar_value ()); \
00473 return retval; \
00474 } \
00475 \
00476 \
00477 \
00478 \
00479 \
00480 \
00481 \
00482 \
00483 \
00484 \
00485 \
00486 \
00487 \
00488 DEFINTNDBINOP_OP (PFX ## _el_mul, TM ## matrix, TS ## scalar, TM ## array, TS ## scalar, *, TI) \
00489 \
00490 DEFBINOP (PFX ## _el_div, TM ## matrix, TS ## scalar) \
00491 { \
00492 CAST_BINOP_ARGS (const octave_ ## TM ## matrix&, const octave_ ## TS ## scalar&); \
00493 \
00494 if (! v2.TS ## scalar_value ()) \
00495 gripe_divide_by_zero (); \
00496 \
00497 octave_value retval = octave_value (v1.TM ## array_value () / v2.TS ## scalar_value ()); \
00498 return retval; \
00499 } \
00500 \
00501 DEFINTNDBINOP_FN (PFX ## _el_pow, TM ## matrix, TS ## scalar, TM ## array, TS ## scalar, elem_xpow, TI, .^) \
00502 \
00503 DEFBINOP (PFX ## _el_ldiv, TM ## matrix, TS ## scalar) \
00504 { \
00505 CAST_BINOP_ARGS (const octave_ ## TM ## matrix&, const octave_ ## TS ## scalar&); \
00506 \
00507 octave_value retval = v2.TS ## scalar_value () / v1.TM ## array_value (); \
00508 return retval; \
00509 }
00510
00511 #define OCTAVE_MS_INT_CMP_OPS(PFX, TM, TS) \
00512 DEFNDBINOP_FN (PFX ## _lt, TM ## matrix, TS ## scalar, TM ## array, TS ## scalar, mx_el_lt) \
00513 DEFNDBINOP_FN (PFX ## _le, TM ## matrix, TS ## scalar, TM ## array, TS ## scalar, mx_el_le) \
00514 DEFNDBINOP_FN (PFX ## _eq, TM ## matrix, TS ## scalar, TM ## array, TS ## scalar, mx_el_eq) \
00515 DEFNDBINOP_FN (PFX ## _ge, TM ## matrix, TS ## scalar, TM ## array, TS ## scalar, mx_el_ge) \
00516 DEFNDBINOP_FN (PFX ## _gt, TM ## matrix, TS ## scalar, TM ## array, TS ## scalar, mx_el_gt) \
00517 DEFNDBINOP_FN (PFX ## _ne, TM ## matrix, TS ## scalar, TM ## array, TS ## scalar, mx_el_ne)
00518
00519 #define OCTAVE_MS_INT_BOOL_OPS(PFX, TM, TS) \
00520 DEFNDBINOP_FN (PFX ## _el_and, TM ## matrix, TS ## scalar, TM ## array, TS ## scalar, mx_el_and) \
00521 DEFNDBINOP_FN (PFX ## _el_or, TM ## matrix, TS ## scalar, TM ## array, TS ## scalar, mx_el_or) \
00522 DEFNDBINOP_FN (PFX ## _el_not_and, TM ## matrix, TS ## scalar, TM ## array, TS ## scalar, mx_el_not_and) \
00523 DEFNDBINOP_FN (PFX ## _el_not_or, TM ## matrix, TS ## scalar, TM ## array, TS ## scalar, mx_el_not_or)
00524
00525 #define OCTAVE_MS_INT_ASSIGN_OPS(PFX, TM, TS, TE) \
00526 DEFNDASSIGNOP_FN (PFX ## _assign, TM ## matrix, TS ## scalar, TM ## scalar, assign)
00527
00528 #define OCTAVE_MS_INT_ASSIGNEQ_OPS(PFX, TM) \
00529 DEFNDASSIGNOP_OP (PFX ## _assign_add, TM ## matrix, TM ## scalar, TM ## scalar, +=) \
00530 DEFNDASSIGNOP_OP (PFX ## _assign_sub, TM ## matrix, TM ## scalar, TM ## scalar, -=) \
00531 DEFNDASSIGNOP_OP (PFX ## _assign_mul, TM ## matrix, TM ## scalar, TM ## scalar, *=) \
00532 DEFNDASSIGNOP_OP (PFX ## _assign_div, TM ## matrix, TM ## scalar, TM ## scalar, /=)
00533
00534 #define OCTAVE_MS_POW_OPS(T1, T2) \
00535 octave_value elem_xpow (T1 ## NDArray a, octave_ ## T2 b) \
00536 { \
00537 T1 ## NDArray result (a.dims ()); \
00538 for (int i = 0; i < a.length (); i++) \
00539 { \
00540 OCTAVE_QUIT; \
00541 result (i) = pow (a(i), b); \
00542 } \
00543 return octave_value (result); \
00544 } \
00545 \
00546 octave_value elem_xpow (T1 ## NDArray a, double b) \
00547 { \
00548 T1 ## NDArray result (a.dims ()); \
00549 for (int i = 0; i < a.length (); i++) \
00550 { \
00551 OCTAVE_QUIT; \
00552 result (i) = pow (a(i), b); \
00553 } \
00554 return octave_value (result); \
00555 } \
00556 \
00557 octave_value elem_xpow (NDArray a, octave_ ## T2 b) \
00558 { \
00559 T2 ## NDArray result (a.dims ()); \
00560 for (int i = 0; i < a.length (); i++) \
00561 { \
00562 OCTAVE_QUIT; \
00563 result (i) = pow (a(i), b); \
00564 } \
00565 return octave_value (result); \
00566 } \
00567 \
00568 octave_value elem_xpow (T1 ## NDArray a, float b) \
00569 { \
00570 T1 ## NDArray result (a.dims ()); \
00571 for (int i = 0; i < a.length (); i++) \
00572 { \
00573 OCTAVE_QUIT; \
00574 result (i) = powf (a(i), b); \
00575 } \
00576 return octave_value (result); \
00577 } \
00578 \
00579 octave_value elem_xpow (FloatNDArray a, octave_ ## T2 b) \
00580 { \
00581 T2 ## NDArray result (a.dims ()); \
00582 for (int i = 0; i < a.length (); i++) \
00583 { \
00584 OCTAVE_QUIT; \
00585 result (i) = powf (a(i), b); \
00586 } \
00587 return octave_value (result); \
00588 }
00589
00590
00591 #define OCTAVE_MS_INT_OPS(TYPE) \
00592 OCTAVE_MS_POW_OPS (TYPE, TYPE) \
00593 OCTAVE_MS_INT_ARITH_OPS (ms, TYPE ## _, TYPE ## _, TYPE) \
00594 OCTAVE_MS_INT_ARITH_OPS (msx, TYPE ## _, , TYPE) \
00595 OCTAVE_MS_INT_ARITH_OPS (mxs, , TYPE ## _, TYPE) \
00596 OCTAVE_MS_INT_ARITH_OPS (msfx, TYPE ## _, float_, TYPE) \
00597 OCTAVE_MS_INT_ARITH_OPS (mfxs, float_, TYPE ## _, TYPE) \
00598 OCTAVE_MS_INT_CMP_OPS (ms, TYPE ## _, TYPE ## _) \
00599 OCTAVE_MS_INT_CMP_OPS (mx, TYPE ## _, ) \
00600 OCTAVE_MS_INT_CMP_OPS (mxs, , TYPE ## _) \
00601 OCTAVE_MS_INT_CMP_OPS (mfx, TYPE ## _, float_) \
00602 OCTAVE_MS_INT_CMP_OPS (mfxs, float_, TYPE ## _) \
00603 OCTAVE_MS_INT_BOOL_OPS (ms, TYPE ## _, TYPE ## _) \
00604 OCTAVE_MS_INT_BOOL_OPS (mx, TYPE ## _, ) \
00605 OCTAVE_MS_INT_BOOL_OPS (mxs, , TYPE ## _) \
00606 OCTAVE_MS_INT_BOOL_OPS (mfx, TYPE ## _, float_) \
00607 OCTAVE_MS_INT_BOOL_OPS (mfxs, float_, TYPE ## _) \
00608 OCTAVE_MS_INT_ASSIGN_OPS (ms, TYPE ## _, TYPE ## _, TYPE ## _) \
00609 OCTAVE_MS_INT_ASSIGNEQ_OPS (mse, TYPE ## _) \
00610 OCTAVE_MS_INT_ASSIGN_OPS (mx, TYPE ## _, , ) \
00611 OCTAVE_MS_INT_ASSIGN_OPS (mfx, TYPE ## _, float_, float_)
00612
00613 #define OCTAVE_M_INT_UNOPS(TYPE) \
00614 \
00615 \
00616 DEFNDUNOP_OP (m_not, TYPE ## _matrix, TYPE ## _array, !) \
00617 DEFNDUNOP_OP (m_uplus, TYPE ## _matrix, TYPE ## _array, ) \
00618 DEFUNOP (m_uminus, TYPE ## _matrix) \
00619 { \
00620 CAST_UNOP_ARG (const octave_ ## TYPE ## _matrix &); \
00621 octave_value retval = octave_value (- v. TYPE ## _array_value ()); \
00622 return retval; \
00623 } \
00624 \
00625 DEFUNOP (m_transpose, TYPE ## _matrix) \
00626 { \
00627 CAST_UNOP_ARG (const octave_ ## TYPE ## _matrix&); \
00628 \
00629 if (v.ndims () > 2) \
00630 { \
00631 error ("transpose not defined for N-d objects"); \
00632 return octave_value (); \
00633 } \
00634 else \
00635 return octave_value (v.TYPE ## _array_value().transpose ()); \
00636 } \
00637 \
00638 DEFNCUNOP_METHOD (m_incr, TYPE ## _matrix, increment) \
00639 DEFNCUNOP_METHOD (m_decr, TYPE ## _matrix, decrement) \
00640 DEFNCUNOP_METHOD (m_changesign, TYPE ## _matrix, changesign)
00641
00642 #define OCTAVE_MM_INT_ARITH_OPS(PFX, T1, T2, T3) \
00643 \
00644 \
00645 DEFINTNDBINOP_OP (PFX ## _add, T1 ## matrix, T2 ## matrix, T1 ## array, T2 ## array, +, T3) \
00646 DEFINTNDBINOP_OP (PFX ## _sub, T1 ## matrix, T2 ## matrix, T1 ## array, T2 ## array, -, T3) \
00647 \
00648 \
00649 \
00650 \
00651 DEFBINOPX (PFX ## _pow, T1 ## matrix, T2 ## matrix) \
00652 { \
00653 error ("can't do A ^ B for A and B both matrices"); \
00654 return octave_value (); \
00655 } \
00656 \
00657 \
00658 \
00659 DEFINTNDBINOP_FN (PFX ## _el_mul, T1 ## matrix, T2 ## matrix, T1 ## array, T2 ## array, product, T3, .*) \
00660 \
00661 DEFINTNDBINOP_FN (PFX ## _el_div, T1 ## matrix, T2 ## matrix, T1 ## array, T2 ## array, quotient, T3, ./) \
00662 \
00663 DEFINTNDBINOP_FN (PFX ## _el_pow, T1 ## matrix, T2 ## matrix, T1 ## array, T2 ## array, elem_xpow, T3, .^) \
00664 \
00665 DEFBINOP (PFX ## _el_ldiv, T1 ## matrix, T2 ## matrix) \
00666 { \
00667 CAST_BINOP_ARGS (const octave_ ## T1 ## matrix&, const octave_ ## T2 ## matrix&); \
00668 \
00669 octave_value retval = octave_value (quotient (v2.T2 ## array_value (), v1.T1 ## array_value ())); \
00670 return retval; \
00671 }
00672
00673 #define OCTAVE_MM_INT_CMP_OPS(PFX, T1, T2) \
00674 DEFNDBINOP_FN (PFX ## _lt, T1 ## matrix, T2 ## matrix, T1 ## array, T2 ## array, mx_el_lt) \
00675 DEFNDBINOP_FN (PFX ## _le, T1 ## matrix, T2 ## matrix, T1 ## array, T2 ## array, mx_el_le) \
00676 DEFNDBINOP_FN (PFX ## _eq, T1 ## matrix, T2 ## matrix, T1 ## array, T2 ## array, mx_el_eq) \
00677 DEFNDBINOP_FN (PFX ## _ge, T1 ## matrix, T2 ## matrix, T1 ## array, T2 ## array, mx_el_ge) \
00678 DEFNDBINOP_FN (PFX ## _gt, T1 ## matrix, T2 ## matrix, T1 ## array, T2 ## array, mx_el_gt) \
00679 DEFNDBINOP_FN (PFX ## _ne, T1 ## matrix, T2 ## matrix, T1 ## array, T2 ## array, mx_el_ne)
00680
00681 #define OCTAVE_MM_INT_BOOL_OPS(PFX, T1, T2) \
00682 DEFNDBINOP_FN (PFX ## _el_and, T1 ## matrix, T2 ## matrix, T1 ## array, T2 ## array, mx_el_and) \
00683 DEFNDBINOP_FN (PFX ## _el_or, T1 ## matrix, T2 ## matrix, T1 ## array, T2 ## array, mx_el_or) \
00684 DEFNDBINOP_FN (PFX ## _el_not_and, T1 ## matrix, T2 ## matrix, T1 ## array, T2 ## array, mx_el_not_and) \
00685 DEFNDBINOP_FN (PFX ## _el_not_or, T1 ## matrix, T2 ## matrix, T1 ## array, T2 ## array, mx_el_not_or) \
00686 DEFNDBINOP_FN (PFX ## _el_and_not, T1 ## matrix, T2 ## matrix, T1 ## array, T2 ## array, mx_el_and_not) \
00687 DEFNDBINOP_FN (PFX ## _el_or_not, T1 ## matrix, T2 ## matrix, T1 ## array, T2 ## array, mx_el_or_not)
00688
00689 #define OCTAVE_MM_INT_ASSIGN_OPS(PFX, TLHS, TRHS, TE) \
00690 DEFNDASSIGNOP_FN (PFX ## _assign, TLHS ## matrix, TRHS ## matrix, TLHS ## array, assign)
00691
00692 #define OCTAVE_MM_INT_ASSIGNEQ_OPS(PFX, TM) \
00693 DEFNDASSIGNOP_OP (PFX ## _assign_add, TM ## matrix, TM ## matrix, TM ## array, +=) \
00694 DEFNDASSIGNOP_OP (PFX ## _assign_sub, TM ## matrix, TM ## matrix, TM ## array, -=) \
00695 DEFNDASSIGNOP_FNOP (PFX ## _assign_el_mul, TM ## matrix, TM ## matrix, TM ## array, product_eq) \
00696 DEFNDASSIGNOP_FNOP (PFX ## _assign_el_div, TM ## matrix, TM ## matrix, TM ## array, quotient_eq)
00697
00698 #define OCTAVE_MM_POW_OPS(T1, T2) \
00699 octave_value \
00700 elem_xpow (const T1 ## NDArray& a, const T2 ## NDArray& b) \
00701 { \
00702 dim_vector a_dims = a.dims (); \
00703 dim_vector b_dims = b.dims (); \
00704 if (a_dims != b_dims) \
00705 { \
00706 gripe_nonconformant ("operator .^", a_dims, b_dims); \
00707 return octave_value (); \
00708 } \
00709 T1 ## NDArray result (a_dims); \
00710 for (int i = 0; i < a.length (); i++) \
00711 { \
00712 OCTAVE_QUIT; \
00713 result (i) = pow (a(i), b(i)); \
00714 } \
00715 return octave_value (result); \
00716 } \
00717 \
00718 octave_value \
00719 elem_xpow (const T1 ## NDArray& a, const NDArray& b) \
00720 { \
00721 dim_vector a_dims = a.dims (); \
00722 dim_vector b_dims = b.dims (); \
00723 if (a_dims != b_dims) \
00724 { \
00725 gripe_nonconformant ("operator .^", a_dims, b_dims); \
00726 return octave_value (); \
00727 } \
00728 T1 ## NDArray result (a_dims); \
00729 for (int i = 0; i < a.length (); i++) \
00730 { \
00731 OCTAVE_QUIT; \
00732 result (i) = pow (a(i), b(i)); \
00733 } \
00734 return octave_value (result); \
00735 } \
00736 \
00737 octave_value \
00738 elem_xpow (const NDArray& a, const T2 ## NDArray& b) \
00739 { \
00740 dim_vector a_dims = a.dims (); \
00741 dim_vector b_dims = b.dims (); \
00742 if (a_dims != b_dims) \
00743 { \
00744 gripe_nonconformant ("operator .^", a_dims, b_dims); \
00745 return octave_value (); \
00746 } \
00747 T2 ## NDArray result (a_dims); \
00748 for (int i = 0; i < a.length (); i++) \
00749 { \
00750 OCTAVE_QUIT; \
00751 result (i) = pow (a(i), b(i)); \
00752 } \
00753 return octave_value (result); \
00754 } \
00755 \
00756 octave_value \
00757 elem_xpow (const T1 ## NDArray& a, const FloatNDArray& b) \
00758 { \
00759 dim_vector a_dims = a.dims (); \
00760 dim_vector b_dims = b.dims (); \
00761 if (a_dims != b_dims) \
00762 { \
00763 gripe_nonconformant ("operator .^", a_dims, b_dims); \
00764 return octave_value (); \
00765 } \
00766 T1 ## NDArray result (a_dims); \
00767 for (int i = 0; i < a.length (); i++) \
00768 { \
00769 OCTAVE_QUIT; \
00770 result (i) = powf (a(i), b(i)); \
00771 } \
00772 return octave_value (result); \
00773 } \
00774 \
00775 octave_value \
00776 elem_xpow (const FloatNDArray& a, const T2 ## NDArray& b) \
00777 { \
00778 dim_vector a_dims = a.dims (); \
00779 dim_vector b_dims = b.dims (); \
00780 if (a_dims != b_dims) \
00781 { \
00782 gripe_nonconformant ("operator .^", a_dims, b_dims); \
00783 return octave_value (); \
00784 } \
00785 T2 ## NDArray result (a_dims); \
00786 for (int i = 0; i < a.length (); i++) \
00787 { \
00788 OCTAVE_QUIT; \
00789 result (i) = powf (a(i), b(i)); \
00790 } \
00791 return octave_value (result); \
00792 }
00793
00794
00795 #define OCTAVE_MM_CONV(T1, T2) \
00796 DEFCONV (T1 ## m_ ## T2 ## m_conv, T1 ## matrix, T2 ## matrix) \
00797 { \
00798 CAST_CONV_ARG (const octave_ ## T1 ## matrix&); \
00799 \
00800 return new octave_ ## T2 ## matrix (v.T2 ## array_value ()); \
00801 }
00802
00803 #define OCTAVE_MM_INT_OPS(TYPE) \
00804 OCTAVE_M_INT_UNOPS (TYPE) \
00805 OCTAVE_MM_POW_OPS (TYPE, TYPE) \
00806 OCTAVE_MM_INT_ARITH_OPS (mm, TYPE ## _, TYPE ## _, TYPE) \
00807 OCTAVE_MM_INT_ARITH_OPS (mmx, TYPE ## _, , TYPE) \
00808 OCTAVE_MM_INT_ARITH_OPS (mxm, , TYPE ## _, TYPE) \
00809 OCTAVE_MM_INT_ARITH_OPS (mmfx, TYPE ## _, float_, TYPE) \
00810 OCTAVE_MM_INT_ARITH_OPS (mfxm, float_, TYPE ## _, TYPE) \
00811 OCTAVE_MM_INT_CMP_OPS (mm, TYPE ## _, TYPE ## _) \
00812 OCTAVE_MM_INT_CMP_OPS (mmx, TYPE ## _, ) \
00813 OCTAVE_MM_INT_CMP_OPS (mfxm, float_, TYPE ## _) \
00814 OCTAVE_MM_INT_CMP_OPS (mmfx, TYPE ## _, float_) \
00815 OCTAVE_MM_INT_CMP_OPS (mxm, , TYPE ## _) \
00816 OCTAVE_MM_INT_BOOL_OPS (mm, TYPE ## _, TYPE ## _) \
00817 OCTAVE_MM_INT_BOOL_OPS (mmx, TYPE ## _, ) \
00818 OCTAVE_MM_INT_BOOL_OPS (mxm, , TYPE ## _) \
00819 OCTAVE_MM_INT_BOOL_OPS (mmfx, TYPE ## _, float_) \
00820 OCTAVE_MM_INT_BOOL_OPS (mfxm, float_, TYPE ## _) \
00821 OCTAVE_MM_INT_ASSIGN_OPS (mm, TYPE ## _, TYPE ## _, TYPE ## _) \
00822 OCTAVE_MM_INT_ASSIGNEQ_OPS (mme, TYPE ## _) \
00823 OCTAVE_MM_INT_ASSIGN_OPS (mmx, TYPE ## _, , ) \
00824 OCTAVE_MM_INT_ASSIGN_OPS (mmfx, TYPE ## _, float_, float_) \
00825 OCTAVE_MM_CONV(TYPE ## _, complex_) \
00826 OCTAVE_MM_CONV(TYPE ## _, float_complex_)
00827
00828 #define OCTAVE_RE_INT_ASSIGN_OPS(TYPE) \
00829 DEFNDASSIGNOP_FN (TYPE ## ms_assign, matrix, TYPE ## _scalar, array, assign) \
00830 DEFNDASSIGNOP_FN (TYPE ## mm_assign, matrix, TYPE ## _matrix, array, assign)
00831
00832 #define OCTAVE_FLT_RE_INT_ASSIGN_OPS(TYPE) \
00833 DEFNDASSIGNOP_FN (TYPE ## fms_assign, float_matrix, TYPE ## _scalar, float_array, assign) \
00834 DEFNDASSIGNOP_FN (TYPE ## fmm_assign, float_matrix, TYPE ## _matrix, float_array, assign)
00835
00836 #define OCTAVE_CX_INT_ASSIGN_OPS(TYPE) \
00837 DEFNDASSIGNOP_FN (TYPE ## cms_assign, complex_matrix, TYPE ## _scalar, complex_array, assign) \
00838 DEFNDASSIGNOP_FN (TYPE ## cmm_assign, complex_matrix, TYPE ## _matrix, complex_array, assign)
00839
00840 #define OCTAVE_FLT_CX_INT_ASSIGN_OPS(TYPE) \
00841 DEFNDASSIGNOP_FN (TYPE ## fcms_assign, float_complex_matrix, TYPE ## _scalar, float_complex_array, assign) \
00842 DEFNDASSIGNOP_FN (TYPE ## fcmm_assign, float_complex_matrix, TYPE ## _matrix, float_complex_array, assign)
00843
00844 #define OCTAVE_INT_NULL_ASSIGN_OPS(TYPE) \
00845 DEFNULLASSIGNOP_FN (TYPE ## null_assign, TYPE ## _matrix, delete_elements)
00846
00847 #define OCTAVE_INT_OPS(TYPE) \
00848 OCTAVE_SS_INT_OPS (TYPE) \
00849 OCTAVE_SM_INT_OPS (TYPE) \
00850 OCTAVE_MS_INT_OPS (TYPE) \
00851 OCTAVE_MM_INT_OPS (TYPE) \
00852 OCTAVE_CONCAT_FN (TYPE) \
00853 OCTAVE_RE_INT_ASSIGN_OPS (TYPE) \
00854 OCTAVE_FLT_RE_INT_ASSIGN_OPS (TYPE) \
00855 OCTAVE_CX_INT_ASSIGN_OPS (TYPE) \
00856 OCTAVE_FLT_CX_INT_ASSIGN_OPS (TYPE) \
00857 OCTAVE_INT_NULL_ASSIGN_OPS(TYPE)
00858
00859 #define OCTAVE_INSTALL_S_INT_UNOPS(TYPE) \
00860 INSTALL_UNOP (op_not, octave_ ## TYPE ## _scalar, s_not); \
00861 INSTALL_UNOP (op_uplus, octave_ ## TYPE ## _scalar, s_uplus); \
00862 INSTALL_UNOP (op_uminus, octave_ ## TYPE ## _scalar, s_uminus); \
00863 INSTALL_UNOP (op_transpose, octave_ ## TYPE ## _scalar, s_transpose); \
00864 INSTALL_UNOP (op_hermitian, octave_ ## TYPE ## _scalar, s_hermitian); \
00865 \
00866 INSTALL_NCUNOP (op_incr, octave_ ## TYPE ## _scalar, s_incr); \
00867 INSTALL_NCUNOP (op_decr, octave_ ## TYPE ## _scalar, s_decr);
00868
00869 #define OCTAVE_INSTALL_SS_INT_ARITH_OPS(PFX, T1, T2) \
00870 INSTALL_BINOP (op_add, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _add); \
00871 INSTALL_BINOP (op_sub, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _sub); \
00872 INSTALL_BINOP (op_mul, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _mul); \
00873 INSTALL_BINOP (op_div, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _div); \
00874 INSTALL_BINOP (op_pow, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _pow); \
00875 INSTALL_BINOP (op_ldiv, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _ldiv); \
00876 INSTALL_BINOP (op_el_mul, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _el_mul); \
00877 INSTALL_BINOP (op_el_div, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _el_div); \
00878 INSTALL_BINOP (op_el_pow, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _el_pow); \
00879 INSTALL_BINOP (op_el_ldiv, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _el_ldiv);
00880
00881 #define OCTAVE_INSTALL_SS_INT_CMP_OPS(PFX, T1, T2) \
00882 INSTALL_BINOP (op_lt, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _lt); \
00883 INSTALL_BINOP (op_le, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _le); \
00884 INSTALL_BINOP (op_eq, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _eq); \
00885 INSTALL_BINOP (op_ge, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _ge); \
00886 INSTALL_BINOP (op_gt, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _gt); \
00887 INSTALL_BINOP (op_ne, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _ne);
00888
00889 #define OCTAVE_INSTALL_SS_INT_BOOL_OPS(PFX, T1, T2) \
00890 INSTALL_BINOP (op_el_and, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _el_and); \
00891 INSTALL_BINOP (op_el_or, octave_ ## T1 ## scalar, octave_ ## T2 ## scalar, PFX ## _el_or);
00892
00893 #define OCTAVE_INSTALL_SS_INT_OPS(TYPE) \
00894 OCTAVE_INSTALL_S_INT_UNOPS (TYPE) \
00895 OCTAVE_INSTALL_SS_INT_ARITH_OPS (ss, TYPE ## _, TYPE ## _) \
00896 OCTAVE_INSTALL_SS_INT_ARITH_OPS (ssx, TYPE ## _, ) \
00897 OCTAVE_INSTALL_SS_INT_ARITH_OPS (sxs, , TYPE ## _) \
00898 OCTAVE_INSTALL_SS_INT_ARITH_OPS (ssfx, TYPE ## _, float_) \
00899 OCTAVE_INSTALL_SS_INT_ARITH_OPS (sfxs, float_, TYPE ## _) \
00900 OCTAVE_INSTALL_SS_INT_CMP_OPS (ss, TYPE ## _, TYPE ## _) \
00901 OCTAVE_INSTALL_SS_INT_CMP_OPS (sx, TYPE ## _, ) \
00902 OCTAVE_INSTALL_SS_INT_CMP_OPS (xs, , TYPE ## _) \
00903 OCTAVE_INSTALL_SS_INT_CMP_OPS (sfx, TYPE ## _, float_) \
00904 OCTAVE_INSTALL_SS_INT_CMP_OPS (fxs, float_, TYPE ## _) \
00905 OCTAVE_INSTALL_SS_INT_BOOL_OPS (ss, TYPE ## _, TYPE ## _) \
00906 OCTAVE_INSTALL_SS_INT_BOOL_OPS (sx, TYPE ## _, ) \
00907 OCTAVE_INSTALL_SS_INT_BOOL_OPS (xs, , TYPE ## _) \
00908 OCTAVE_INSTALL_SS_INT_BOOL_OPS (sfx, TYPE ## _, float_) \
00909 OCTAVE_INSTALL_SS_INT_BOOL_OPS (fxs, float_, TYPE ## _) \
00910 INSTALL_ASSIGNCONV (octave_ ## TYPE ## _scalar, octave_ ## TYPE ## _scalar, octave_ ## TYPE ## _matrix) \
00911 INSTALL_ASSIGNCONV (octave_ ## TYPE ## _scalar, octave_scalar, octave_ ## TYPE ## _matrix) \
00912 INSTALL_ASSIGNCONV (octave_ ## TYPE ## _scalar, octave_float_scalar, octave_ ## TYPE ## _matrix) \
00913 INSTALL_ASSIGNCONV (octave_ ## TYPE ## _scalar, octave_complex_scalar, octave_complex_matrix) \
00914 INSTALL_ASSIGNCONV (octave_ ## TYPE ## _scalar, octave_float_complex_scalar, octave_float_complex_matrix)
00915
00916 #define OCTAVE_INSTALL_SM_INT_ARITH_OPS(PFX, T1, T2) \
00917 INSTALL_BINOP (op_add, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _add); \
00918 INSTALL_BINOP (op_sub, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _sub); \
00919 INSTALL_BINOP (op_mul, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _mul); \
00920 \
00921 \
00922 INSTALL_BINOP (op_ldiv, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _ldiv); \
00923 INSTALL_BINOP (op_el_mul, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _el_mul); \
00924 INSTALL_BINOP (op_el_div, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _el_div); \
00925 INSTALL_BINOP (op_el_pow, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _el_pow); \
00926 INSTALL_BINOP (op_el_ldiv, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _el_ldiv);
00927
00928 #define OCTAVE_INSTALL_SM_INT_CMP_OPS(PFX, T1, T2) \
00929 INSTALL_BINOP (op_lt, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _lt); \
00930 INSTALL_BINOP (op_le, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _le); \
00931 INSTALL_BINOP (op_eq, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _eq); \
00932 INSTALL_BINOP (op_ge, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _ge); \
00933 INSTALL_BINOP (op_gt, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _gt); \
00934 INSTALL_BINOP (op_ne, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _ne);
00935
00936 #define OCTAVE_INSTALL_SM_INT_BOOL_OPS(PFX, T1, T2) \
00937 INSTALL_BINOP (op_el_and, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _el_and); \
00938 INSTALL_BINOP (op_el_or, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _el_or); \
00939 INSTALL_BINOP (op_el_and_not, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _el_and_not); \
00940 INSTALL_BINOP (op_el_or_not, octave_ ## T1 ## scalar, octave_ ## T2 ## matrix, PFX ## _el_or_not);
00941
00942 #define OCTAVE_INSTALL_SM_INT_OPS(TYPE) \
00943 OCTAVE_INSTALL_SM_INT_ARITH_OPS (sm, TYPE ## _, TYPE ## _) \
00944 OCTAVE_INSTALL_SM_INT_ARITH_OPS (smx, TYPE ## _, ) \
00945 OCTAVE_INSTALL_SM_INT_ARITH_OPS (sxm, , TYPE ## _) \
00946 OCTAVE_INSTALL_SM_INT_ARITH_OPS (smfx, TYPE ## _, float_) \
00947 OCTAVE_INSTALL_SM_INT_ARITH_OPS (sfxm, float_, TYPE ## _) \
00948 OCTAVE_INSTALL_SM_INT_CMP_OPS (sm, TYPE ## _, TYPE ## _) \
00949 OCTAVE_INSTALL_SM_INT_CMP_OPS (xm, , TYPE ## _) \
00950 OCTAVE_INSTALL_SM_INT_CMP_OPS (smx, TYPE ## _, ) \
00951 OCTAVE_INSTALL_SM_INT_CMP_OPS (fxm, float_, TYPE ## _) \
00952 OCTAVE_INSTALL_SM_INT_CMP_OPS (smfx, TYPE ## _, float_) \
00953 OCTAVE_INSTALL_SM_INT_BOOL_OPS (sm, TYPE ## _, TYPE ## _) \
00954 OCTAVE_INSTALL_SM_INT_BOOL_OPS (xm, , TYPE ## _) \
00955 OCTAVE_INSTALL_SM_INT_BOOL_OPS (smx, TYPE ## _, ) \
00956 OCTAVE_INSTALL_SM_INT_BOOL_OPS (fxm, float_, TYPE ## _) \
00957 OCTAVE_INSTALL_SM_INT_BOOL_OPS (smfx, TYPE ## _, float_) \
00958 INSTALL_WIDENOP (octave_ ## TYPE ## _scalar, octave_ ## TYPE ## _matrix, TYPE ## _s_ ## TYPE ## _m_conv) \
00959 INSTALL_WIDENOP (octave_ ## TYPE ## _scalar, octave_complex_matrix, TYPE ## _s_complex_m_conv) \
00960 INSTALL_WIDENOP (octave_ ## TYPE ## _scalar, octave_float_complex_matrix, TYPE ## _s_float_complex_m_conv) \
00961 INSTALL_ASSIGNCONV (octave_ ## TYPE ## _scalar, octave_ ## TYPE ## _matrix, octave_ ## TYPE ## _matrix) \
00962 INSTALL_ASSIGNCONV (octave_ ## TYPE ## _scalar, octave_matrix, octave_ ## TYPE ## _matrix) \
00963 INSTALL_ASSIGNCONV (octave_ ## TYPE ## _scalar, octave_float_matrix, octave_ ## TYPE ## _matrix) \
00964 INSTALL_ASSIGNCONV (octave_ ## TYPE ## _scalar, octave_complex_matrix, octave_complex_matrix) \
00965 INSTALL_ASSIGNCONV (octave_ ## TYPE ## _scalar, octave_float_complex_matrix, octave_float_complex_matrix)
00966
00967 #define OCTAVE_INSTALL_MS_INT_ARITH_OPS(PFX, T1, T2) \
00968 INSTALL_BINOP (op_add, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _add); \
00969 INSTALL_BINOP (op_sub, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _sub); \
00970 INSTALL_BINOP (op_mul, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _mul); \
00971 INSTALL_BINOP (op_div, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _div); \
00972 \
00973 \
00974 \
00975 INSTALL_BINOP (op_el_mul, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _el_mul); \
00976 INSTALL_BINOP (op_el_div, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _el_div); \
00977 INSTALL_BINOP (op_el_pow, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _el_pow); \
00978 INSTALL_BINOP (op_el_ldiv, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _el_ldiv);
00979
00980 #define OCTAVE_INSTALL_MS_INT_CMP_OPS(PFX, T1, T2) \
00981 INSTALL_BINOP (op_lt, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _lt); \
00982 INSTALL_BINOP (op_le, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _le); \
00983 INSTALL_BINOP (op_eq, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _eq); \
00984 INSTALL_BINOP (op_ge, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _ge); \
00985 INSTALL_BINOP (op_gt, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _gt); \
00986 INSTALL_BINOP (op_ne, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _ne);
00987
00988 #define OCTAVE_INSTALL_MS_INT_BOOL_OPS(PFX, T1, T2) \
00989 INSTALL_BINOP (op_el_and, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _el_and); \
00990 INSTALL_BINOP (op_el_or, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _el_or); \
00991 INSTALL_BINOP (op_el_not_and, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _el_not_and); \
00992 INSTALL_BINOP (op_el_not_or, octave_ ## T1 ## matrix, octave_ ## T2 ## scalar, PFX ## _el_not_or);
00993
00994 #define OCTAVE_INSTALL_MS_INT_ASSIGN_OPS(PFX, TLHS, TRHS) \
00995 INSTALL_ASSIGNOP (op_asn_eq, octave_ ## TLHS ## matrix, octave_ ## TRHS ## scalar, PFX ## _assign)
00996
00997 #define OCTAVE_INSTALL_MS_INT_ASSIGNEQ_OPS(PFX, TLHS, TRHS) \
00998 INSTALL_ASSIGNOP (op_add_eq, octave_ ## TLHS ## matrix, octave_ ## TRHS ## scalar, PFX ## _assign_add) \
00999 INSTALL_ASSIGNOP (op_sub_eq, octave_ ## TLHS ## matrix, octave_ ## TRHS ## scalar, PFX ## _assign_sub) \
01000 INSTALL_ASSIGNOP (op_mul_eq, octave_ ## TLHS ## matrix, octave_ ## TRHS ## scalar, PFX ## _assign_mul) \
01001 INSTALL_ASSIGNOP (op_div_eq, octave_ ## TLHS ## matrix, octave_ ## TRHS ## scalar, PFX ## _assign_div)
01002
01003 #define OCTAVE_INSTALL_MS_INT_OPS(TYPE) \
01004 OCTAVE_INSTALL_MS_INT_ARITH_OPS (ms, TYPE ## _, TYPE ## _) \
01005 OCTAVE_INSTALL_MS_INT_ARITH_OPS (msx, TYPE ## _, ) \
01006 OCTAVE_INSTALL_MS_INT_ARITH_OPS (mxs, , TYPE ## _) \
01007 OCTAVE_INSTALL_MS_INT_ARITH_OPS (msfx, TYPE ## _, float_) \
01008 OCTAVE_INSTALL_MS_INT_ARITH_OPS (mfxs, float_, TYPE ## _) \
01009 OCTAVE_INSTALL_MS_INT_CMP_OPS (ms, TYPE ## _, TYPE ## _) \
01010 OCTAVE_INSTALL_MS_INT_CMP_OPS (mx, TYPE ## _, ) \
01011 OCTAVE_INSTALL_MS_INT_CMP_OPS (mxs, , TYPE ## _) \
01012 OCTAVE_INSTALL_MS_INT_CMP_OPS (mfx, TYPE ## _, float_) \
01013 OCTAVE_INSTALL_MS_INT_CMP_OPS (mfxs, float_, TYPE ## _) \
01014 OCTAVE_INSTALL_MS_INT_BOOL_OPS (ms, TYPE ## _, TYPE ## _) \
01015 OCTAVE_INSTALL_MS_INT_BOOL_OPS (mx, TYPE ## _, ) \
01016 OCTAVE_INSTALL_MS_INT_BOOL_OPS (mxs, , TYPE ## _) \
01017 OCTAVE_INSTALL_MS_INT_BOOL_OPS (mfx, TYPE ## _, float_) \
01018 OCTAVE_INSTALL_MS_INT_BOOL_OPS (mfxs, float_, TYPE ## _) \
01019 OCTAVE_INSTALL_MS_INT_ASSIGN_OPS (ms, TYPE ## _, TYPE ## _) \
01020 OCTAVE_INSTALL_MS_INT_ASSIGNEQ_OPS (mse, TYPE ## _, TYPE ## _) \
01021 OCTAVE_INSTALL_MS_INT_ASSIGN_OPS (mx, TYPE ## _, ) \
01022 OCTAVE_INSTALL_MS_INT_ASSIGN_OPS (mfx, TYPE ## _, float_) \
01023 INSTALL_ASSIGNCONV (octave_ ## TYPE ## _matrix, octave_complex_scalar, octave_complex_matrix) \
01024 INSTALL_ASSIGNCONV (octave_ ## TYPE ## _matrix, octave_float_complex_scalar, octave_float_complex_matrix)
01025
01026 #define OCTAVE_INSTALL_M_INT_UNOPS(TYPE) \
01027 INSTALL_UNOP (op_not, octave_ ## TYPE ## _matrix, m_not); \
01028 INSTALL_UNOP (op_uplus, octave_ ## TYPE ## _matrix, m_uplus); \
01029 INSTALL_UNOP (op_uminus, octave_ ## TYPE ## _matrix, m_uminus); \
01030 INSTALL_UNOP (op_transpose, octave_ ## TYPE ## _matrix, m_transpose); \
01031 INSTALL_UNOP (op_hermitian, octave_ ## TYPE ## _matrix, m_transpose); \
01032 \
01033 INSTALL_NCUNOP (op_incr, octave_ ## TYPE ## _matrix, m_incr); \
01034 INSTALL_NCUNOP (op_decr, octave_ ## TYPE ## _matrix, m_decr); \
01035 INSTALL_NCUNOP (op_uminus, octave_ ## TYPE ## _matrix, m_changesign);
01036
01037 #define OCTAVE_INSTALL_MM_INT_ARITH_OPS(PFX, T1, T2) \
01038 INSTALL_BINOP (op_add, octave_ ## T1 ## matrix, octave_ ## T2 ## matrix, PFX ## _add); \
01039 INSTALL_BINOP (op_sub, octave_ ## T1 ## matrix, octave_ ## T2 ## matrix, PFX ## _sub); \
01040 \
01041 \
01042 INSTALL_BINOP (op_pow, octave_ ## T1 ## matrix, octave_ ## T2 ## matrix, PFX ## _pow); \
01043 \
01044 INSTALL_BINOP (op_el_mul, octave_ ## T1 ## matrix, octave_ ## T2 ## matrix, PFX ## _el_mul); \
01045 INSTALL_BINOP (op_el_div, octave_ ## T1 ## matrix, octave_ ## T2 ## matrix, PFX ## _el_div); \
01046 INSTALL_BINOP (op_el_pow, octave_ ## T1 ## matrix, octave_ ## T2 ## matrix, PFX ## _el_pow); \
01047 INSTALL_BINOP (op_el_ldiv, octave_ ## T1 ## matrix, octave_ ## T2 ## matrix, PFX ## _el_ldiv);
01048
01049 #define OCTAVE_INSTALL_MM_INT_CMP_OPS(PFX, T1, T2) \
01050 INSTALL_BINOP (op_lt, octave_ ## T1 ## matrix, octave_ ## T2 ## matrix, PFX ## _lt); \
01051 INSTALL_BINOP (op_le, octave_ ## T1 ## matrix, octave_ ## T2 ## matrix, PFX ## _le); \
01052 INSTALL_BINOP (op_eq, octave_ ## T1 ## matrix, octave_ ## T2 ## matrix, PFX ## _eq); \
01053 INSTALL_BINOP (op_ge, octave_ ## T1 ## matrix, octave_ ## T2 ## matrix, PFX ## _ge); \
01054 INSTALL_BINOP (op_gt, octave_ ## T1 ## matrix, octave_ ## T2 ## matrix, PFX ## _gt); \
01055 INSTALL_BINOP (op_ne, octave_ ## T1 ## matrix, octave_ ## T2 ## matrix, PFX ## _ne);
01056
01057 #define OCTAVE_INSTALL_MM_INT_BOOL_OPS(PFX, T1, T2) \
01058 INSTALL_BINOP (op_el_and, octave_ ## T1 ## matrix, octave_ ## T2 ## matrix, PFX ## _el_and); \
01059 INSTALL_BINOP (op_el_or, octave_ ## T1 ## matrix, octave_ ## T2 ## matrix, PFX ## _el_or); \
01060 INSTALL_BINOP (op_el_not_and, octave_ ## T1 ## matrix, octave_ ## T2 ## matrix, PFX ## _el_not_and); \
01061 INSTALL_BINOP (op_el_not_or, octave_ ## T1 ## matrix, octave_ ## T2 ## matrix, PFX ## _el_not_or); \
01062 INSTALL_BINOP (op_el_and_not, octave_ ## T1 ## matrix, octave_ ## T2 ## matrix, PFX ## _el_and_not); \
01063 INSTALL_BINOP (op_el_or_not, octave_ ## T1 ## matrix, octave_ ## T2 ## matrix, PFX ## _el_or_not);
01064
01065 #define OCTAVE_INSTALL_MM_INT_ASSIGN_OPS(PFX, TLHS, TRHS) \
01066 INSTALL_ASSIGNOP (op_asn_eq, octave_ ## TLHS ## matrix, octave_ ## TRHS ## matrix, PFX ## _assign)
01067
01068 #define OCTAVE_INSTALL_MM_INT_ASSIGNEQ_OPS(PFX, TLHS, TRHS) \
01069 INSTALL_ASSIGNOP (op_add_eq, octave_ ## TLHS ## matrix, octave_ ## TRHS ## matrix, PFX ## _assign_add) \
01070 INSTALL_ASSIGNOP (op_sub_eq, octave_ ## TLHS ## matrix, octave_ ## TRHS ## matrix, PFX ## _assign_sub) \
01071 INSTALL_ASSIGNOP (op_el_mul_eq, octave_ ## TLHS ## matrix, octave_ ## TRHS ## matrix, PFX ## _assign_el_mul) \
01072 INSTALL_ASSIGNOP (op_el_div_eq, octave_ ## TLHS ## matrix, octave_ ## TRHS ## matrix, PFX ## _assign_el_div)
01073
01074 #define OCTAVE_INSTALL_MM_INT_OPS(TYPE) \
01075 OCTAVE_INSTALL_M_INT_UNOPS (TYPE) \
01076 OCTAVE_INSTALL_MM_INT_ARITH_OPS (mm, TYPE ##_, TYPE ## _) \
01077 OCTAVE_INSTALL_MM_INT_ARITH_OPS (mmx, TYPE ##_, ) \
01078 OCTAVE_INSTALL_MM_INT_ARITH_OPS (mxm, , TYPE ##_) \
01079 OCTAVE_INSTALL_MM_INT_ARITH_OPS (mmfx, TYPE ##_, float_) \
01080 OCTAVE_INSTALL_MM_INT_ARITH_OPS (mfxm, float_, TYPE ##_) \
01081 OCTAVE_INSTALL_MM_INT_CMP_OPS (mm, TYPE ## _, TYPE ## _) \
01082 OCTAVE_INSTALL_MM_INT_CMP_OPS (mmx, TYPE ## _, ) \
01083 OCTAVE_INSTALL_MM_INT_CMP_OPS (mxm, , TYPE ## _) \
01084 OCTAVE_INSTALL_MM_INT_CMP_OPS (mmfx, TYPE ## _, float_) \
01085 OCTAVE_INSTALL_MM_INT_CMP_OPS (mfxm, float_, TYPE ## _) \
01086 OCTAVE_INSTALL_MM_INT_BOOL_OPS (mm, TYPE ## _, TYPE ## _) \
01087 OCTAVE_INSTALL_MM_INT_BOOL_OPS (mmx, TYPE ## _, ) \
01088 OCTAVE_INSTALL_MM_INT_BOOL_OPS (mxm, , TYPE ## _) \
01089 OCTAVE_INSTALL_MM_INT_BOOL_OPS (mmfx, TYPE ## _, float_) \
01090 OCTAVE_INSTALL_MM_INT_BOOL_OPS (mfxm, float_, TYPE ## _) \
01091 OCTAVE_INSTALL_MM_INT_ASSIGN_OPS (mm, TYPE ## _, TYPE ## _) \
01092 OCTAVE_INSTALL_MM_INT_ASSIGNEQ_OPS (mme, TYPE ## _, TYPE ## _) \
01093 OCTAVE_INSTALL_MM_INT_ASSIGN_OPS (mmx, TYPE ## _, ) \
01094 OCTAVE_INSTALL_MM_INT_ASSIGN_OPS (mmfx, TYPE ## _, float_) \
01095 INSTALL_WIDENOP (octave_ ## TYPE ## _matrix, octave_complex_matrix, TYPE ## _m_complex_m_conv) \
01096 INSTALL_WIDENOP (octave_ ## TYPE ## _matrix, octave_float_complex_matrix, TYPE ## _m_float_complex_m_conv) \
01097 INSTALL_ASSIGNCONV (octave_ ## TYPE ## _matrix, octave_complex_matrix, octave_complex_matrix) \
01098 INSTALL_ASSIGNCONV (octave_ ## TYPE ## _matrix, octave_float_complex_matrix, octave_float_complex_matrix)
01099
01100 #define OCTAVE_INSTALL_RE_INT_ASSIGN_OPS(TYPE) \
01101 INSTALL_ASSIGNOP (op_asn_eq, octave_matrix, octave_ ## TYPE ## _scalar, TYPE ## ms_assign) \
01102 INSTALL_ASSIGNOP (op_asn_eq, octave_matrix, octave_ ## TYPE ## _matrix, TYPE ## mm_assign) \
01103 INSTALL_ASSIGNCONV (octave_scalar, octave_ ## TYPE ## _scalar, octave_matrix) \
01104 INSTALL_ASSIGNCONV (octave_matrix, octave_ ## TYPE ## _matrix, octave_matrix)
01105
01106 #define OCTAVE_INSTALL_FLT_RE_INT_ASSIGN_OPS(TYPE) \
01107 INSTALL_ASSIGNOP (op_asn_eq, octave_float_matrix, octave_ ## TYPE ## _scalar, TYPE ## fms_assign) \
01108 INSTALL_ASSIGNOP (op_asn_eq, octave_float_matrix, octave_ ## TYPE ## _matrix, TYPE ## fmm_assign) \
01109 INSTALL_ASSIGNCONV (octave_float_scalar, octave_ ## TYPE ## _scalar, octave_float_matrix) \
01110 INSTALL_ASSIGNCONV (octave_float_matrix, octave_ ## TYPE ## _matrix, octave_float_matrix)
01111
01112 #define OCTAVE_INSTALL_CX_INT_ASSIGN_OPS(TYPE) \
01113 INSTALL_ASSIGNOP (op_asn_eq, octave_complex_matrix, octave_ ## TYPE ## _scalar, TYPE ## cms_assign) \
01114 INSTALL_ASSIGNOP (op_asn_eq, octave_complex_matrix, octave_ ## TYPE ## _matrix, TYPE ## cmm_assign) \
01115 INSTALL_ASSIGNCONV (octave_complex_scalar, octave_ ## TYPE ## _scalar, octave_complex_matrix) \
01116 INSTALL_ASSIGNCONV (octave_complex_matrix, octave_ ## TYPE ## _matrix, octave_complex_matrix)
01117
01118 #define OCTAVE_INSTALL_FLT_CX_INT_ASSIGN_OPS(TYPE) \
01119 INSTALL_ASSIGNOP (op_asn_eq, octave_float_complex_matrix, octave_ ## TYPE ## _scalar, TYPE ## fcms_assign) \
01120 INSTALL_ASSIGNOP (op_asn_eq, octave_float_complex_matrix, octave_ ## TYPE ## _matrix, TYPE ## fcmm_assign) \
01121 INSTALL_ASSIGNCONV (octave_float_complex_scalar, octave_ ## TYPE ## _scalar, octave_complex_matrix) \
01122 INSTALL_ASSIGNCONV (octave_float_complex_matrix, octave_ ## TYPE ## _matrix, octave_complex_matrix)
01123
01124 #define OCTAVE_INSTALL_INT_NULL_ASSIGN_OPS(TYPE) \
01125 INSTALL_ASSIGNOP (op_asn_eq, octave_ ## TYPE ## _matrix, octave_null_matrix, TYPE ## null_assign) \
01126 INSTALL_ASSIGNOP (op_asn_eq, octave_ ## TYPE ## _matrix, octave_null_str, TYPE ## null_assign) \
01127 INSTALL_ASSIGNOP (op_asn_eq, octave_ ## TYPE ## _matrix, octave_null_sq_str, TYPE ## null_assign)
01128
01129 #define OCTAVE_INSTALL_INT_OPS(TYPE) \
01130 OCTAVE_INSTALL_SS_INT_OPS (TYPE) \
01131 OCTAVE_INSTALL_SM_INT_OPS (TYPE) \
01132 OCTAVE_INSTALL_MS_INT_OPS (TYPE) \
01133 OCTAVE_INSTALL_MM_INT_OPS (TYPE) \
01134 OCTAVE_INSTALL_CONCAT_FN (TYPE) \
01135 OCTAVE_INSTALL_RE_INT_ASSIGN_OPS (TYPE) \
01136 OCTAVE_INSTALL_FLT_RE_INT_ASSIGN_OPS (TYPE) \
01137 OCTAVE_INSTALL_CX_INT_ASSIGN_OPS (TYPE) \
01138 OCTAVE_INSTALL_FLT_CX_INT_ASSIGN_OPS (TYPE) \
01139 OCTAVE_INSTALL_INT_NULL_ASSIGN_OPS(TYPE)
01140
01141 #define OCTAVE_INSTALL_SM_INT_ASSIGNCONV(TLHS, TRHS) \
01142 INSTALL_ASSIGNCONV (octave_ ## TLHS ## _scalar, octave_ ## TRHS ## _scalar, octave_ ## TLHS ## _matrix) \
01143 INSTALL_ASSIGNCONV (octave_ ## TLHS ## _scalar, octave_ ## TRHS ## _matrix, octave_ ## TLHS ## _matrix)
01144
01145 #define OCTAVE_MIXED_INT_CMP_OPS(T1, T2) \
01146 OCTAVE_SS_INT_CMP_OPS (T1 ## _ ## T2 ## _ss, T1 ## _, T2 ## _) \
01147 OCTAVE_SM_INT_CMP_OPS (T1 ## _ ## T2 ## _sm, T1 ## _, T2 ## _) \
01148 OCTAVE_MS_INT_CMP_OPS (T1 ## _ ## T2 ## _ms, T1 ## _, T2 ## _) \
01149 OCTAVE_MM_INT_CMP_OPS (T1 ## _ ## T2 ## _mm, T1 ## _, T2 ## _)
01150
01151 #define OCTAVE_INSTALL_MIXED_INT_CMP_OPS(T1, T2) \
01152 OCTAVE_INSTALL_SS_INT_CMP_OPS (T1 ## _ ## T2 ## _ss, T1 ## _, T2 ## _) \
01153 OCTAVE_INSTALL_SM_INT_CMP_OPS (T1 ## _ ## T2 ## _sm, T1 ## _, T2 ## _) \
01154 OCTAVE_INSTALL_MS_INT_CMP_OPS (T1 ## _ ## T2 ## _ms, T1 ## _, T2 ## _) \
01155 OCTAVE_INSTALL_MM_INT_CMP_OPS (T1 ## _ ## T2 ## _mm, T1 ## _, T2 ## _)