Mercurial > hg > octave-max
diff liboctave/mx-inlines.cc @ 9607:1be3c73ed7b5
reuse temporary arrays in nested expressions
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Thu, 03 Sep 2009 08:48:51 +0200 |
parents | 7dafdb8b062f |
children | 66970dd627f6 |
line wrap: on
line diff
--- a/liboctave/mx-inlines.cc +++ b/liboctave/mx-inlines.cc @@ -49,6 +49,13 @@ DEFMXUNOP (mx_inline_uminus, -) +#define DEFMXUNOPEQ(F, OP) \ +template <class R> \ +inline void F (size_t n, R *r) \ +{ for (size_t i = 0; i < n; i++) r[i] = OP r[i]; } + +DEFMXUNOPEQ (mx_inline_uminus2, -) + #define DEFMXUNBOOLOP(F, OP) \ template <class X> \ inline void F (size_t n, bool *r, const X *x) \ @@ -127,6 +134,11 @@ r[i] = ! logical_value (x[i]); } +inline void mx_inline_not2 (size_t n, bool *r) +{ + for (size_t i = 0; i < n; i++) r[i] = ! r[i]; +} + #define DEFMXBOOLOP(F, NOT1, OP, NOT2) \ template <class X, class Y> \ inline void F (size_t n, bool *r, const X *x, const Y *y) \ @@ -222,6 +234,16 @@ return r; } +template <class RNDA> +inline RNDA& +do_mx_inplace_op (RNDA& r, + void (*op) (size_t, typename RNDA::element_type *)) +{ + op (r.numel (), r.fortran_vec ()); + return r; +} + + template <class RNDA, class XNDA, class YNDA> inline RNDA do_mm_binary_op (const XNDA& x, const YNDA& y,