diff src/data.cc @ 9858:47c5af1868df

move idx_add methods to MArrayN
author Jaroslav Hajek <highegg@gmail.com>
date Tue, 24 Nov 2009 12:30:26 +0100
parents 870a69bac55c
children b5aa5d9ee6b9
line wrap: on
line diff
--- a/src/data.cc
+++ b/src/data.cc
@@ -6330,24 +6330,16 @@
   else if (idx.extent (n) > n)
     error ("accumarray: index out of range");
 
-  // FIXME: the class tree in liboctave is overly complicated, hence the
-  // following type gymnastics.
-  MArray<T> array;
+  NDT retval (dim_vector (n, 1), T());
 
   if (vals.numel () == 1)
-    {
-      array = MArray<T> (n, T ());
-      array.idx_add (idx, vals (0));
-    }
-  else if (vals.length () == idx.length (n))
-    {
-      array = MArray<T> (n, T ());
-      array.idx_add (idx, MArray<T> (vals));
-    }
+    retval.idx_add (idx, vals (0));
+  else if (vals.numel () == idx.length (n))
+    retval.idx_add (idx, vals);
   else
     error ("accumarray: dimensions mismatch");
 
-  return NDT (MArrayN<T> (Array<T> (array)));
+  return retval;
 }
 
 DEFUN (__accumarray_sum__, args, ,