diff liboctave/fCNDArray.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/fCNDArray.cc	Fri Feb 13 13:03:04 2009 -0500
+++ b/liboctave/fCNDArray.cc	Fri Feb 13 21:04:50 2009 +0100
@@ -634,33 +634,31 @@
 FloatComplexNDArray
 FloatComplexNDArray::cumprod (int dim) const
 {
-  MX_ND_CUMULATIVE_OP (FloatComplexNDArray, FloatComplex, FloatComplex (1, 0), *);
+  return do_mx_cum_op<FloatComplexNDArray> (*this, dim, mx_inline_cumprod);
 }
 
 FloatComplexNDArray
 FloatComplexNDArray::cumsum (int dim) const
 {
-  MX_ND_CUMULATIVE_OP (FloatComplexNDArray, FloatComplex, FloatComplex (0, 0), +);
+  return do_mx_cum_op<FloatComplexNDArray> (*this, dim, mx_inline_cumsum);
 }
 
 FloatComplexNDArray
 FloatComplexNDArray::prod (int dim) const
 {
-  MX_ND_REDUCTION (retval(result_idx) *= elem (iter_idx), FloatComplex (1, 0), FloatComplexNDArray);
+  return do_mx_red_op<FloatComplexNDArray> (*this, dim, mx_inline_prod);
+}
+
+FloatComplexNDArray
+FloatComplexNDArray::sum (int dim) const
+{
+  return do_mx_red_op<FloatComplexNDArray> (*this, dim, mx_inline_sum);
 }
 
 FloatComplexNDArray
 FloatComplexNDArray::sumsq (int dim) const
 {
-  MX_ND_REDUCTION (retval(result_idx) += std::imag (elem (iter_idx))
-     ? elem (iter_idx) * conj (elem (iter_idx))
-     : std::pow (elem (iter_idx), 2), FloatComplex (0, 0), FloatComplexNDArray);
-}
-
-FloatComplexNDArray 
-FloatComplexNDArray::sum (int dim) const
-{
-  MX_ND_REDUCTION (retval(result_idx) += elem (iter_idx), FloatComplex (0, 0), FloatComplexNDArray);
+  return do_mx_red_op<FloatNDArray> (*this, dim, mx_inline_sumsq);
 }
 
 FloatComplexNDArray