diff liboctave/CNDArray.cc @ 8736:53b4fdeacc2e

improve reduction functions
author Jaroslav Hajek <highegg@gmail.com>
date Fri, 13 Feb 2009 21:04:50 +0100
parents a1ae2aae903e
children 1bd918cfb6e2
line wrap: on
line diff
--- a/liboctave/CNDArray.cc
+++ b/liboctave/CNDArray.cc
@@ -639,34 +639,31 @@
 ComplexNDArray
 ComplexNDArray::cumprod (int dim) const
 {
-  MX_ND_CUMULATIVE_OP (ComplexNDArray, Complex, Complex (1, 0), *);
+  return do_mx_cum_op<ComplexNDArray> (*this, dim, mx_inline_cumprod);
 }
 
 ComplexNDArray
 ComplexNDArray::cumsum (int dim) const
 {
-  MX_ND_CUMULATIVE_OP (ComplexNDArray, Complex, Complex (0, 0), +);
+  return do_mx_cum_op<ComplexNDArray> (*this, dim, mx_inline_cumsum);
 }
 
 ComplexNDArray
 ComplexNDArray::prod (int dim) const
 {
-  MX_ND_COMPLEX_OP_REDUCTION (*= elem (iter_idx), Complex (1, 0));
+  return do_mx_red_op<ComplexNDArray> (*this, dim, mx_inline_prod);
+}
+
+ComplexNDArray
+ComplexNDArray::sum (int dim) const
+{
+  return do_mx_red_op<ComplexNDArray> (*this, dim, mx_inline_sum);
 }
 
 ComplexNDArray
 ComplexNDArray::sumsq (int dim) const
 {
-  MX_ND_COMPLEX_OP_REDUCTION
-    (+= std::imag (elem (iter_idx))
-     ? elem (iter_idx) * conj (elem (iter_idx))
-     : std::pow (elem (iter_idx), 2), Complex (0, 0));
-}
-
-ComplexNDArray 
-ComplexNDArray::sum (int dim) const
-{
-  MX_ND_COMPLEX_OP_REDUCTION (+= elem (iter_idx), Complex (0, 0));
+  return do_mx_red_op<NDArray> (*this, dim, mx_inline_sumsq);
 }
 
 ComplexNDArray