# HG changeset patch # User Jaroslav Hajek # Date 1263460657 -3600 # Node ID edbe47bc0f8827ccdd0389ce11440794891c621f # Parent 018d92ad0730a0166704c886a19014e41bb3fb97 make numel query more matlab compatible diff --git a/src/ChangeLog b/src/ChangeLog --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2010-01-14 Jaroslav Hajek + + * ov-class.cc (octave_class::numel (const octave_value_list&)): Don't + attempt to query overloaded size. + 2010-01-13 John W. Eaton * ov-fcn.h (octave_function (const std::string&, const std::string&)): diff --git a/src/ov-class.cc b/src/ov-class.cc --- a/src/ov-class.cc +++ b/src/ov-class.cc @@ -346,40 +346,7 @@ error ("@%s/numel: invalid return value", cn.c_str ()); } else - { - // If method is not found, calculate using size (). - const Matrix mdv = size (); - octave_idx_type nmdv = mdv.numel (); - dim_vector dv; dv.resize (std::max (nmdv, 2)); - for (octave_idx_type i = 0; i < nmdv && !error_state; i++) - { - if (mdv(i) == xround (mdv(i)) && xfinite (mdv(i)) && mdv(i) >= 0) - dv(i) = mdv(i); - else - error ("@%s/numel: expected nonnegative integers from @%s/size", - cn.c_str (), cn.c_str ()); - } - - if (! error_state) - { - octave_idx_type len = idx.length (); - if (len == 0) - retval = dv.numel (); - else - { - dv = dv.redim (len); - retval = 1; - for (octave_idx_type i = 0; i < len; i++) - { - if (idx(i).is_magic_colon ()) - retval *= dv(i); - else - retval *= idx(i).numel (); - } - } - } - - } + retval = octave_base_value::numel (idx); return retval; }