diff liboctave/idx-vector.cc @ 8367:445d27d79f4e

support permutation matrix objects
author Jaroslav Hajek <highegg@gmail.com>
date Thu, 04 Dec 2008 08:31:56 +0100
parents 9238637cb81c
children 584d9e80556b
line wrap: on
line diff
--- a/liboctave/idx-vector.cc
+++ b/liboctave/idx-vector.cc
@@ -528,6 +528,39 @@
                              dim_vector (1, len), DIRECT);
 }
 
+bool
+idx_vector::is_permutation (octave_idx_type n) const
+{
+  bool retval = false;
+
+  if (is_colon_equiv (n))
+    retval = true;
+  else if (length (n) == n && extent(n) == n)
+    {
+      bool *left = new bool[n];
+
+      std::fill (left, left + n, true);
+
+      retval = true;
+
+      for (octave_idx_type i = 0, len = length (); i < len; i++)
+        { 
+          octave_idx_type k = xelem (i);
+          if (left[k])
+              left[k] = false;
+          else
+            {
+              retval = false;
+              break;
+            }
+        }
+
+      delete left;
+    }
+
+  return retval;
+}
+
 octave_idx_type 
 idx_vector::freeze (octave_idx_type z_len, const char *tag, bool resize_ok)
 {