# HG changeset patch # User David Bateman # Date 1223314316 14400 # Node ID 277218396978303b29d49502590d507afd47dc9f # Parent 1b2256d6e01d9fa521b476327e72b7b65d66c17d Handle arrays of handles in the Fishandle function diff --git a/src/ChangeLog b/src/ChangeLog --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2008-10-06 David Bateman + + * graphics.cc (static bool is_handle (const octave_value&)): Delete. + (static octave_value is_handle (const octave_value&)): New function. + 2008-10-03 Jaroslav Hajek * Cell.cc (Cell::delete_elements): Don't pass second arg to diff --git a/src/graphics.cc b/src/graphics.cc --- a/src/graphics.cc +++ b/src/graphics.cc @@ -1424,10 +1424,34 @@ return h.ok (); } -static bool +static octave_value is_handle (const octave_value& val) { - return val.is_real_scalar () && is_handle (val.double_value ()); + octave_value retval = false; + + if (val.is_real_scalar () && is_handle (val.double_value ())) + retval = true; + else if (val.is_real_matrix ()) + { + if (val.is_string ()) + retval = boolNDArray (val.dims (), false); + else + { + const NDArray handles = val.array_value (); + + if (! error_state) + { + boolNDArray result (handles.dims ()); + + for (octave_idx_type i = 0; i < handles.numel (); i++) + result.xelem (i) = is_handle (handles (i)); + + retval = result; + } + } + } + + return retval; } static bool