diff liboctave/Array.cc @ 9046:88bf56bbccca

make Array::find already return Matlab-compatible dimensions
author Jaroslav Hajek <highegg@gmail.com>
date Fri, 27 Mar 2009 12:22:05 +0100
parents 2df28ad88b0e
children 2da105bf2507
line wrap: on
line diff
--- a/liboctave/Array.cc	Fri Mar 27 07:28:13 2009 +0100
+++ b/liboctave/Array.cc	Fri Mar 27 12:22:05 2009 +0100
@@ -2546,6 +2546,21 @@
         }
     }
 
+  // Fixup return dimensions, for Matlab compatibility.
+  // find(zeros(0,0)) -> zeros(0,0)
+  // find(zeros(1,0)) -> zeros(1,0)
+  // find(zeros(0,1)) -> zeros(0,1)
+  // find(zeros(0,X)) -> zeros(0,1)
+  // find(zeros(1,1)) -> zeros(0,0) !!!! WHY?
+  // find(zeros(0,1,0)) -> zeros(0,0)
+  // find(zeros(0,1,0,1)) -> zeros(0,0) etc
+
+  if ((numel () == 1 && retval.is_empty ())
+      || (rows () == 0 && dims ().numel (1) == 0))
+    retval.dimensions = dim_vector ();
+  else if (rows () == 1 && ndims () == 2)
+    retval.dimensions = dim_vector (1, retval.length ());
+
   return retval;
 }