changeset 5081:273205761b4d

[project @ 2004-11-17 15:15:00 by jwe]
author jwe
date Wed, 17 Nov 2004 15:15:01 +0000
parents 7929486ef2ed
children acbf858264d6
files liboctave/Array.cc liboctave/ChangeLog src/pt-arg-list.cc
diffstat 3 files changed, 30 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/liboctave/Array.cc	Tue Nov 16 21:57:50 2004 +0000
+++ b/liboctave/Array.cc	Wed Nov 17 15:15:01 2004 +0000
@@ -1934,19 +1934,27 @@
 {
   Array<T> retval;
 
-  switch (ndims ())
+  dim_vector dv = idx_arg.orig_dimensions ();
+
+  if (dv.length () > 2 || ndims () > 2)
+    retval = indexN (idx_arg, resize_ok, rfv);
+  else
     {
-    case 1:
-      retval = index1 (idx_arg, resize_ok, rfv);
-      break;
-
-    case 2:
-      retval = index2 (idx_arg, resize_ok, rfv);
-      break;
-
-    default:
-      retval = indexN (idx_arg, resize_ok, rfv);
-      break;
+      switch (ndims ())
+	{
+	case 1:
+	  retval = index1 (idx_arg, resize_ok, rfv);
+	  break;
+
+	case 2:
+	  retval = index2 (idx_arg, resize_ok, rfv);
+	  break;
+
+	default:
+	  (*current_liboctave_error_handler)
+	    ("invalid array (internal error)");
+	  break;
+	}
     }
 
   return retval;
--- a/liboctave/ChangeLog	Tue Nov 16 21:57:50 2004 +0000
+++ b/liboctave/ChangeLog	Wed Nov 17 15:15:01 2004 +0000
@@ -1,3 +1,8 @@
+2004-11-17  John W. Eaton  <jwe@octave.org>
+
+	* Array.cc (Array<T>::index): Call generic N-d indexing function
+	if idx_arg is N-d.
+
 2004-11-09  David Bateman  <dbateman@free.fr>
 
 	* dNDArray.cc (concat): Delete.
--- a/src/pt-arg-list.cc	Tue Nov 16 21:57:50 2004 +0000
+++ b/src/pt-arg-list.cc	Wed Nov 17 15:15:01 2004 +0000
@@ -129,7 +129,11 @@
 	{
 	case -1:
 	  {
-	    int numel = indexed_object->numel ();
+	    // We want numel = prod (size ()) here, so dont' use
+	    // index_object->numel () as that may be different (it is
+	    // the number of nonzero elements for sparse arrays).
+
+	    int numel = dv.numel ();
 
 	    if (numel < 0)
 	      {