diff liboctave/idx-vector.cc @ 10425:0677c5d80b77

rewrite 1D sparse indexing
author Jaroslav Hajek <highegg@gmail.com>
date Fri, 19 Mar 2010 13:00:06 +0100
parents 9c4daf174387
children 739109ef88ee
line wrap: on
line diff
--- a/liboctave/idx-vector.cc
+++ b/liboctave/idx-vector.cc
@@ -722,9 +722,25 @@
     return *aowner;
   else
     {
+      Array<bool> retval (ext, 1);
+      for (octave_idx_type i = 0; i < ext; i++)
+        retval.xelem (i) = data[i];
+      return retval;
+    }
+}
+
+Array<octave_idx_type>
+idx_vector::idx_mask_rep::as_array (void)
+{
+  if (aowner)
+    return aowner->find ().reshape (orig_dims);
+  else
+    {
       Array<bool> retval (orig_dims);
-      for (octave_idx_type i = 0; i < len; i++)
-        retval.xelem (i) = data[i];
+      for (octave_idx_type i = 0, j = 0; i < ext; i++)
+        if (data[i])
+          retval.xelem (j++) = i;
+
       return retval;
     }
 }