diff src/ov-base.cc @ 9329:67fc970dad7d

improve indexed assignment using indexed numel
author Jaroslav Hajek <highegg@gmail.com>
date Wed, 10 Jun 2009 11:31:58 +0200
parents c2248cc4821a
children e08d72bb988e
line wrap: on
line diff
--- a/src/ov-base.cc	Wed Jun 10 20:33:10 2009 -0400
+++ b/src/ov-base.cc	Wed Jun 10 11:31:58 2009 +0200
@@ -76,6 +76,41 @@
   return octave_value ();
 }
 
+Matrix
+octave_base_value::size (void)
+{
+  const dim_vector dv = dims ();
+  Matrix mdv (1, dv.length ());
+  for (octave_idx_type i = 0; i < dv.length (); i++)
+    mdv(i) = dv(i);
+  return mdv;
+}
+
+octave_idx_type
+octave_base_value::numel (const octave_value_list& idx)
+{
+  octave_idx_type retval;
+
+  octave_idx_type len = idx.length ();
+
+  if (len == 0)
+    retval = numel ();
+  else
+    {
+      const dim_vector dv = dims ().redim (len);
+      retval = 1;
+      for (octave_idx_type i = 0; i < len; i++)
+        {
+          if (idx(i).is_magic_colon ())
+            retval *= dv(i);
+          else
+            retval *= idx(i).numel ();
+        }
+    }
+
+  return retval;
+}
+
 octave_value
 octave_base_value::subsref (const std::string&,
 			    const std::list<octave_value_list>&)