diff libinterp/octave-value/ov.h @ 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 7ebe185e3818
children 43ad651cf5a0
line wrap: on
line diff
--- a/libinterp/octave-value/ov.h	Thu Aug 20 17:42:26 2020 -0400
+++ b/libinterp/octave-value/ov.h	Wed Aug 12 12:14:17 2020 -0400
@@ -950,9 +950,36 @@
   Array<std::string> cellstr_value (void) const
   { return rep->cellstr_value (); }
 
+  octave::range<float> float_range_value (void) const
+  { return rep->float_range_value (); }
+
   octave::range<double> range_value (void) const
   { return rep->range_value (); }
 
+  octave::range<octave_int8> int8_range_value (void) const
+  { return rep->int8_range_value (); }
+
+  octave::range<octave_int16> int16_range_value (void) const
+  { return rep->int16_range_value (); }
+
+  octave::range<octave_int32> int32_range_value (void) const
+  { return rep->int32_range_value (); }
+
+  octave::range<octave_int64> int64_range_value (void) const
+  { return rep->int64_range_value (); }
+
+  octave::range<octave_uint8> uint8_range_value (void) const
+  { return rep->uint8_range_value (); }
+
+  octave::range<octave_uint16> uint16_range_value (void) const
+  { return rep->uint16_range_value (); }
+
+  octave::range<octave_uint32> uint32_range_value (void) const
+  { return rep->uint32_range_value (); }
+
+  octave::range<octave_uint64> uint64_range_value (void) const
+  { return rep->uint64_range_value (); }
+
   octave_map map_value (void) const;
 
   octave_scalar_map scalar_map_value (void) const;
@@ -1162,8 +1189,26 @@
 
   Array<std::string> xcellstr_value (const char *fmt, ...) const;
 
+  octave::range<float> xfloat_range_value (const char *fmt, ...) const;
+
   octave::range<double> xrange_value (const char *fmt, ...) const;
 
+  octave::range<octave_int8> xint8_range_value (const char *fmt, ...) const;
+
+  octave::range<octave_int16> xint16_range_value (const char *fmt, ...) const;
+
+  octave::range<octave_int32> xint32_range_value (const char *fmt, ...) const;
+
+  octave::range<octave_int64> xint64_range_value (const char *fmt, ...) const;
+
+  octave::range<octave_uint8> xuint8_range_value (const char *fmt, ...) const;
+
+  octave::range<octave_uint16> xuint16_range_value (const char *fmt, ...) const;
+
+  octave::range<octave_uint32> xuint32_range_value (const char *fmt, ...) const;
+
+  octave::range<octave_uint64> xuint64_range_value (const char *fmt, ...) const;
+
   octave_map xmap_value (const char *fmt, ...) const;
 
   octave_scalar_map xscalar_map_value (const char *fmt, ...) const;