Mercurial > octave
diff src/ov-base.cc @ 9329:67fc970dad7d
improve indexed assignment using indexed numel
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Wed, 10 Jun 2009 11:31:58 +0200 |
parents | c2248cc4821a |
children | e08d72bb988e |
line wrap: on
line diff
--- a/src/ov-base.cc Wed Jun 10 20:33:10 2009 -0400 +++ b/src/ov-base.cc Wed Jun 10 11:31:58 2009 +0200 @@ -76,6 +76,41 @@ return octave_value (); } +Matrix +octave_base_value::size (void) +{ + const dim_vector dv = dims (); + Matrix mdv (1, dv.length ()); + for (octave_idx_type i = 0; i < dv.length (); i++) + mdv(i) = dv(i); + return mdv; +} + +octave_idx_type +octave_base_value::numel (const octave_value_list& idx) +{ + octave_idx_type retval; + + octave_idx_type len = idx.length (); + + if (len == 0) + retval = numel (); + else + { + const dim_vector dv = dims ().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 (); + } + } + + return retval; +} + octave_value octave_base_value::subsref (const std::string&, const std::list<octave_value_list>&)