Mercurial > hg > octave-nkf
diff liboctave/MArray-defs.h @ 1988:7b56630a1e05
[project @ 1996-03-02 00:33:22 by jwe]
Initial revision
author | jwe |
---|---|
date | Sat, 02 Mar 1996 00:33:22 +0000 |
parents | |
children | dd00769643ae |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/liboctave/MArray-defs.h @@ -0,0 +1,67 @@ +// Nothing like a little CPP abuse to brighten everyone's day. Would +// have been nice to do this with template functions but as of 2.5.x, +// g++ seems to fail to resolve them properly. + +#define DO_VS_OP(OP) \ + int l = a.length (); \ + T *result = 0; \ + if (l > 0) \ + { \ + result = new T [l]; \ + const T *x = a.data (); \ + for (int i = 0; i < l; i++) \ + result[i] = x[i] OP s; \ + } + +#define DO_SV_OP(OP) \ + int l = a.length (); \ + T *result = 0; \ + if (l > 0) \ + { \ + result = new T [l]; \ + const T *x = a.data (); \ + for (int i = 0; i < l; i++) \ + result[i] = s OP x[i]; \ + } + +#define DO_VV_OP(OP) \ + T *result = 0; \ + if (l > 0) \ + { \ + result = new T [l]; \ + const T *x = a.data (); \ + const T *y = b.data (); \ + for (int i = 0; i < l; i++) \ + result[i] = x[i] OP y[i]; \ + } + +#define NEG_V \ + int l = a.length (); \ + T *result = 0; \ + if (l > 0) \ + { \ + result = new T [l]; \ + const T *x = a.data (); \ + for (int i = 0; i < l; i++) \ + result[i] = -x[i]; \ + } + +#define DO_VS_OP2(OP) \ + int l = a.length (); \ + if (l > 0) \ + { \ + T *tmp = a.fortran_vec (); \ + for (int i = 0; i < l; i++) \ + tmp[i] OP s; \ + } + +#define DO_VV_OP2(OP) \ + do \ + { \ + T *a_tmp = a.fortran_vec (); \ + const T *b_tmp = b.data (); \ + for (int i = 0; i < l; i++) \ + a_tmp[i] += b_tmp[i]; \ + } \ + while (0) +