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
 {