Mercurial > octave
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;