diff src/ov.cc @ 4563:742993a501b9

[project @ 2003-10-29 06:25:12 by jwe]
author jwe
date Wed, 29 Oct 2003 06:25:12 +0000
parents 01ee68d18069
children fc30061d01da
line wrap: on
line diff
--- a/src/ov.cc	Tue Oct 28 21:14:07 2003 +0000
+++ b/src/ov.cc	Wed Oct 29 06:25:12 2003 +0000
@@ -817,6 +817,84 @@
   return *this;
 }
 
+int
+octave_value::rows (void) const
+{
+  dim_vector dv = dims ();
+
+  return (dv.length () > 0) ? dv(0) : -1;
+}
+
+int
+octave_value::columns (void) const
+{
+  dim_vector dv = dims ();
+
+  return (dv.length () > 1) ? dv(1) : -1;
+}
+
+int
+octave_value::length (void) const
+{
+  int retval = 0;
+
+  dim_vector dv = dims ();
+      
+  for (int i = 0; i < dv.length (); i++)
+    {
+      if (dv(i) < 0)
+	{
+	  retval = -1;
+	  break;
+	}
+
+      if (dv(i) > retval)
+	retval = dv(i);
+    }
+
+  return retval;
+}
+
+int
+octave_value::ndims (void) const
+{
+  dim_vector dv = dims ();
+
+  int n_dims = dv.length ();
+     
+   // Remove trailing singleton dimensions.
+
+   for (int i = n_dims; i > 2; i--)
+     {
+       if (dv(i-1) == 1)
+	 n_dims--;
+       else
+	 break;
+     }
+   
+   // The result is always >= 2.
+
+   if (n_dims < 2)
+     n_dims = 2;
+
+   return n_dims;
+}
+
+int
+octave_value::numel (void) const
+{
+  dim_vector dv = dims ();
+
+  int n_dims = dv.length ();
+
+  int retval = n_dims > 0 ? dv(0) : 0;
+
+  for (int i = 1; i < n_dims; i++)
+    retval *= dv(i);
+
+  return retval;    
+}
+
 Cell
 octave_value::cell_value (void) const
 {