# HG changeset patch # User jwe # Date 1100704501 0 # Node ID 273205761b4d8c664b8647d68e13f25b584ccf9e # Parent 7929486ef2ed8d212c412c48504de7ae481657f6 [project @ 2004-11-17 15:15:00 by jwe] diff --git a/liboctave/Array.cc b/liboctave/Array.cc --- a/liboctave/Array.cc +++ b/liboctave/Array.cc @@ -1934,19 +1934,27 @@ { Array 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; diff --git a/liboctave/ChangeLog b/liboctave/ChangeLog --- a/liboctave/ChangeLog +++ b/liboctave/ChangeLog @@ -1,3 +1,8 @@ +2004-11-17 John W. Eaton + + * Array.cc (Array::index): Call generic N-d indexing function + if idx_arg is N-d. + 2004-11-09 David Bateman * dNDArray.cc (concat): Delete. diff --git a/src/pt-arg-list.cc b/src/pt-arg-list.cc --- a/src/pt-arg-list.cc +++ b/src/pt-arg-list.cc @@ -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) {