Mercurial > octave
changeset 25287:f692728de113 stable
enable lazy index to numeric conversion (bug #53681)
* ov-lazy-idx.h, ov-lazy-idx.h (octave_lazy_index::as_double,
octave_lazy_index::as_single, octave_lazy_index::as_int8,
octave_lazy_index::as_int16, octave_lazy_index::as_int32,
octave_lazy_index::as_int64, octave_lazy_index::as_uint8,
octave_lazy_index::as_uint16, octave_lazy_index::as_uint32,
octave_lazy_index::as_uint64): New functions.
New tests.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Thu, 19 Apr 2018 14:32:37 -0400 |
parents | 44c0aca121cc |
children | c1e344166c4b ff59be58f028 |
files | libinterp/octave-value/ov-lazy-idx.cc libinterp/octave-value/ov-lazy-idx.h |
diffstat | 2 files changed, 90 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/octave-value/ov-lazy-idx.cc Thu Apr 19 08:39:45 2018 -0700 +++ b/libinterp/octave-value/ov-lazy-idx.cc Thu Apr 19 14:32:37 2018 -0400 @@ -157,6 +157,66 @@ return index.as_array ().is_sorted_rows (mode); } +octave_value +octave_lazy_index::as_double (void) const +{ + return array_value (); +} + +octave_value +octave_lazy_index::as_single (void) const +{ + return float_array_value (); +} + +octave_value +octave_lazy_index::as_int8 (void) const +{ + return int8_array_value (); +} + +octave_value +octave_lazy_index::as_int16 (void) const +{ + return int16_array_value (); +} + +octave_value +octave_lazy_index::as_int32 (void) const +{ + return int32_array_value (); +} + +octave_value +octave_lazy_index::as_int64 (void) const +{ + return int64_array_value (); +} + +octave_value +octave_lazy_index::as_uint8 (void) const +{ + return uint8_array_value (); +} + +octave_value +octave_lazy_index::as_uint16 (void) const +{ + return uint16_array_value (); +} + +octave_value +octave_lazy_index::as_uint32 (void) const +{ + return uint32_array_value (); +} + +octave_value +octave_lazy_index::as_uint64 (void) const +{ + return uint64_array_value (); +} + static const std::string value_save_tag ("index_value"); bool octave_lazy_index::save_ascii (std::ostream& os) @@ -197,3 +257,20 @@ return true; } + +/* +%!shared x, y +%! x = find ([-1, 0, -2, 1, 3, -4] < 0); +%! y = [1, 3, 6]; +%!assert (typeinfo (x), "lazy_index") +%!assert (double (x), y) +%!assert (single (x), single (y)) +%!assert (int8 (x), int8 (y)) +%!assert (int16 (x), int16 (y)) +%!assert (int32 (x), int32 (y)) +%!assert (int64 (x), int64 (y)) +%!assert (uint8 (x), uint8 (y)) +%!assert (uint16 (x), uint16 (y)) +%!assert (uint32 (x), uint32 (y)) +%!assert (uint64 (x), uint64 (y)) +*/
--- a/libinterp/octave-value/ov-lazy-idx.h Thu Apr 19 08:39:45 2018 -0700 +++ b/libinterp/octave-value/ov-lazy-idx.h Thu Apr 19 14:32:37 2018 -0400 @@ -187,6 +187,19 @@ return make_value ().convert_to_str_internal (pad, force, type); } + octave_value as_double (void) const; + octave_value as_single (void) const; + + octave_value as_int8 (void) const; + octave_value as_int16 (void) const; + octave_value as_int32 (void) const; + octave_value as_int64 (void) const; + + octave_value as_uint8 (void) const; + octave_value as_uint16 (void) const; + octave_value as_uint32 (void) const; + octave_value as_uint64 (void) const; + void print_raw (std::ostream& os, bool pr_as_read_syntax = false) const { return make_value ().print_raw (os, pr_as_read_syntax);