Mercurial > octave
diff libinterp/octave-value/ov-base.cc @ 28646:e26201931ea3
new template class for octave_range objects
* ov-range.h, ov-range.cc (class octave_range): Convert to template.
For now, use specializations to preserve existing behavior for
double-precision ranges. Change all uses.
* ov.h, ov.cc: Update range constructors to create range objects for
integer and float ranges. Provide value extractor functions for
range<T> types that forward to virtual functions in the
octave_base_value class.
* ov-base.cc: Provide virtual value extractor functions for range<T>
types.
* ov-range-traits.h: New file.
* libinterp/octave-value/module.mk: Update.
* Range.h, Range.cc (Range::Range): Deprecate public constructors.
* pt-eval.h, pt-eval.cc (tree_evaluator::execute_range_loop):
New template function.
(tree_evaluator::visit_simple_for_command): Use it to handle looping
when the loop variable expression is a range.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 12 Aug 2020 12:14:17 -0400 |
parents | 98192ec1621f |
children | 8f67ad8b3103 |
line wrap: on
line diff
--- a/libinterp/octave-value/ov-base.cc Thu Aug 20 17:42:26 2020 -0400 +++ b/libinterp/octave-value/ov-base.cc Wed Aug 12 12:14:17 2020 -0400 @@ -811,12 +811,66 @@ err_wrong_type_arg ("octave_base_value::cellstr_value()", type_name ()); } +octave::range<float> +octave_base_value::float_range_value (void) const +{ + err_wrong_type_arg ("octave_base_value::float_range_value()", type_name ()); +} + octave::range<double> octave_base_value::range_value (void) const { err_wrong_type_arg ("octave_base_value::range_value()", type_name ()); } +octave::range<octave_int8> +octave_base_value::int8_range_value (void) const +{ + err_wrong_type_arg ("octave_base_value::int8_range_value()", type_name ()); +} + +octave::range<octave_int16> +octave_base_value::int16_range_value (void) const +{ + err_wrong_type_arg ("octave_base_value::int16_range_value()", type_name ()); +} + +octave::range<octave_int32> +octave_base_value::int32_range_value (void) const +{ + err_wrong_type_arg ("octave_base_value::int32_range_value()", type_name ()); +} + +octave::range<octave_int64> +octave_base_value::int64_range_value (void) const +{ + err_wrong_type_arg ("octave_base_value::int64_range_value()", type_name ()); +} + +octave::range<octave_uint8> +octave_base_value::uint8_range_value (void) const +{ + err_wrong_type_arg ("octave_base_value::uint8_range_value()", type_name ()); +} + +octave::range<octave_uint16> +octave_base_value::uint16_range_value (void) const +{ + err_wrong_type_arg ("octave_base_value::uint16_range_value()", type_name ()); +} + +octave::range<octave_uint32> +octave_base_value::uint32_range_value (void) const +{ + err_wrong_type_arg ("octave_base_value::uint32_range_value()", type_name ()); +} + +octave::range<octave_uint64> +octave_base_value::uint64_range_value (void) const +{ + err_wrong_type_arg ("octave_base_value::uint64_range_value()", type_name ()); +} + octave_map octave_base_value::map_value (void) const {