GNU Octave 10.1.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
 
Loading...
Searching...
No Matches
ov-range.h
Go to the documentation of this file.
1////////////////////////////////////////////////////////////////////////
2//
3// Copyright (C) 1996-2025 The Octave Project Developers
4//
5// See the file COPYRIGHT.md in the top-level directory of this
6// distribution or <https://octave.org/copyright/>.
7//
8// This file is part of Octave.
9//
10// Octave is free software: you can redistribute it and/or modify it
11// under the terms of the GNU General Public License as published by
12// the Free Software Foundation, either version 3 of the License, or
13// (at your option) any later version.
14//
15// Octave is distributed in the hope that it will be useful, but
16// WITHOUT ANY WARRANTY; without even the implied warranty of
17// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18// GNU General Public License for more details.
19//
20// You should have received a copy of the GNU General Public License
21// along with Octave; see the file COPYING. If not, see
22// <https://www.gnu.org/licenses/>.
23//
24////////////////////////////////////////////////////////////////////////
25
26#if ! defined (octave_ov_range_h)
27#define octave_ov_range_h 1
28
29#include "octave-config.h"
30
31#include <cstdlib>
32
33#include <iosfwd>
34#include <string>
35#include <type_traits>
36
37#include "Array-fwd.h"
38#include "Range.h"
39
40#include "lo-mappers.h"
41#include "lo-utils.h"
42#include "mx-base.h"
43#include "str-vec.h"
44
45#include "error.h"
46#include "oct-stream.h"
47#include "ov-base.h"
48#include "ov-range-traits.h"
49#include "ov-re-mat.h"
50#include "ov-typeinfo.h"
51
53
54
56{
57public:
58
60 : m_numel (numel), m_base (base), m_increment(incr) { }
61
63
65
66 OCTINTERP_API octave_value
68 {
69 if (i < m_numel - 1)
70 return m_base + static_cast<int> (i) * m_increment;
71 return m_base + (m_numel - 1) * m_increment;
72 }
73
74 double
76 {
77 if (i < m_numel - 1)
78 return m_base + static_cast<int> (i) * m_increment;
79 return m_base + (m_numel - 1) * m_increment;
80 }
81
82 bool is_trivial_range () const { return true; };
83
84private:
85 int m_numel = 0;
86 int m_base = 0;
87 int m_increment = 0;
88
90};
91
92// For now, we only need ov_range<double> but we don't attempt to
93// enforce that restriction.
94
95template <typename T>
97{
98public:
99
102
103 ov_range (const octave::range<T>& r)
105 {
106 if (numel () < 0 && numel () != -2)
107 error ("invalid range");
108 }
109
113 ? new octave::idx_vector (*r.m_idx_cache) : nullptr)
114 { }
115
116 ov_range (const octave::range<T>& r, const octave::idx_vector& cache)
118 {
119 set_idx_cache (cache);
120 }
121
122 // No assignment.
123 ov_range& operator = (const ov_range&) = delete;
124
126
128 {
129 return new ov_range (*this);
130 }
131
132 // A range is really just a special kind of real matrix object. In
133 // the places where we need to call empty_clone, it makes more sense
134 // to create an empty matrix (0x0) instead of an empty range (1x0).
135
137 {
138 return new typename octave_value_range_traits<T>::matrix_type ();
139 }
140
141 OCTINTERP_API type_conv_info numeric_conversion_function () const;
142
144
146
147 // We don't need to override all three forms of subsref. The using
148 // declaration will avoid warnings about partially-overloaded virtual
149 // functions.
151
152 octave_value subsref (const std::string& type,
153 const std::list<octave_value_list>& idx);
154
155 octave_value_list subsref (const std::string& type,
156 const std::list<octave_value_list>& idx, int)
157 { return subsref (type, idx); }
158
159 OCTINTERP_API octave_value
160 do_index_op (const octave_value_list& idx, bool resize_ok = false);
161
162 OCTINTERP_API octave::idx_vector index_vector (bool require_integers = false) const;
163
165 {
166 octave_idx_type n = numel ();
167 return dim_vector (n > 0, n);
168 }
169
170 OCTINTERP_API octave_value as_trivial_range ();
171 OCTINTERP_API bool could_be_trivial_range ();
172
173 OCTINTERP_API octave_value
175
176 octave_idx_type numel () const { return m_range.numel (); }
177
179 {
180 // FIXME: this is a potential waste of memory.
181
183 return tmp.nnz ();
184 }
185
186 OCTINTERP_API octave_value
187 resize (const dim_vector& dv, bool fill = false) const;
188
189 std::size_t byte_size () const { return 3 * sizeof (T); }
190
191 octave_value reshape (const dim_vector& new_dims) const
192 {
193 return raw_array_value ().reshape (new_dims);
194 }
195
196 octave_value permute (const Array<int>& vec, bool inv = false) const
197 {
198 return raw_array_value ().permute (vec, inv);
199 }
200
201 octave_value squeeze () const { return m_range; }
202
204
205 bool is_defined () const { return true; }
206
207 bool is_storable () const { return m_range.is_storable (); }
208
209 bool is_constant () const { return true; }
210
211 bool is_range () const { return true; }
212
213 bool vm_need_storable_call () const { return true; }
214
215 bool is_double_type () const { return builtin_type () == btyp_double; }
216
217 bool is_single_type () const { return builtin_type () == btyp_float; }
218
219 bool isfloat () const { return btyp_isfloat (builtin_type ()); }
220
221 bool is_int8_type () const { return builtin_type () == btyp_int8; }
222
223 bool is_int16_type () const { return builtin_type () == btyp_int16; }
224
225 bool is_int32_type () const { return builtin_type () == btyp_int32; }
226
227 bool is_int64_type () const { return builtin_type () == btyp_int64; }
228
229 bool is_uint8_type () const { return builtin_type () == btyp_uint8; }
230
231 bool is_uint16_type () const { return builtin_type () == btyp_uint16; }
232
233 bool is_uint32_type () const { return builtin_type () == btyp_uint32; }
234
235 bool is_uint64_type () const { return builtin_type () == btyp_uint64; }
236
237 bool isinteger () const
238 {
239 return btyp_isinteger (builtin_type ());
240 }
241
242 bool isreal () const { return true; }
243
244 bool isnumeric () const
245 {
246 return btyp_isnumeric (builtin_type ());
247 }
248
249 bool is_true () const { return nnz () == numel (); }
250
251 octave_value all (int dim = 0) const
252 {
253 // FIXME: this is a potential waste of memory.
254
255 typedef typename octave_value_range_traits<T>::matrix_type ov_mx_type;
256 typename ov_mx_type::object_type m (raw_array_value ());
257
258 return m.all (dim);
259 }
260
261 octave_value any (int dim = 0) const
262 {
263 // FIXME: this is a potential waste of memory.
264
265 typedef typename octave_value_range_traits<T>::matrix_type ov_mx_type;
266 typename ov_mx_type::object_type m (raw_array_value ());
267
268 return m.any (dim);
269 }
270
272 {
273 // FIXME: this is a potential waste of memory.
274
275 return m_range.diag (k);
276 }
277
279 {
280 // FIXME: this is a potential waste of memory.
281
282 typedef typename octave_value_range_traits<T>::matrix_type ov_mx_type;
283 typename ov_mx_type::object_type m (raw_array_value ());
284
285 return m.diag (nr, nc);
286 }
287
289 {
290 Array<T> tmp = raw_array_value ();
291 return tmp.sort (dim, mode);
292 }
293
295 sortmode mode = ASCENDING) const
296 {
297 Array<T> tmp = raw_array_value ();
298 return tmp.sort (sidx, dim, mode);
299 }
300
302 {
303 return m_range.issorted (mode);
304 }
305
310
312 {
313 return (mode == UNSORTED) ? ASCENDING : mode;
314 }
315
316 Array<T> raw_array_value () const { return m_range.array_value (); }
317
318 OCTINTERP_API double double_value (bool = false) const;
319
320 OCTINTERP_API float float_value (bool = false) const;
321
322 double scalar_value (bool frc_str_conv = false) const
323 {
324 return double_value (frc_str_conv);
325 }
326
327 float float_scalar_value (bool frc_str_conv = false) const
328 {
329 return float_value (frc_str_conv);
330 }
331
332 Matrix matrix_value (bool = false) const
333 {
334 return raw_array_value ();
335 }
336
337 FloatMatrix float_matrix_value (bool = false) const
338 {
339 return raw_array_value ();
340 }
341
342 NDArray array_value (bool = false) const
343 {
344 return raw_array_value ();
345 }
346
347 FloatNDArray float_array_value (bool = false) const
348 {
349 return raw_array_value ();
350 }
351
352 OCTINTERP_API charNDArray char_array_value (bool = false) const;
353
354 // FIXME: it would be better to have Range::intXNDArray_value
355 // functions to avoid the intermediate conversion to a matrix
356 // object.
357
359 {
360 return raw_array_value ();
361 }
362
364 {
365 return raw_array_value ();
366 }
367
369 {
370 return raw_array_value ();
371 }
372
374 {
375 return raw_array_value ();
376 }
377
379 {
380 return raw_array_value ();
381 }
382
384 {
385 return raw_array_value ();
386 }
387
389 {
390 return raw_array_value ();
391 }
392
394 {
395 return raw_array_value ();
396 }
397
399 {
400 return SparseMatrix (matrix_value ());
401 }
402
407
408 OCTINTERP_API Complex complex_value (bool = false) const;
409
410 OCTINTERP_API FloatComplex float_complex_value (bool = false) const;
411
412 OCTINTERP_API boolNDArray bool_array_value (bool warn = false) const;
413
415 {
416 return raw_array_value ();
417 }
418
420 {
421 return raw_array_value ();
422 }
423
425 {
426 return raw_array_value ();
427 }
428
430 {
431 return raw_array_value ();
432 }
433
434 OCTINTERP_API octave::range<double> range_value () const;
435
436// For now, enable only ov_range<double>.
437
438 OCTINTERP_API octave_value
439 convert_to_str_internal (bool pad, bool force, char type) const;
440
441 OCTINTERP_API octave_value as_double () const;
442 OCTINTERP_API octave_value as_single () const;
443
444 OCTINTERP_API octave_value as_int8 () const;
445 OCTINTERP_API octave_value as_int16 () const;
446 OCTINTERP_API octave_value as_int32 () const;
447 OCTINTERP_API octave_value as_int64 () const;
448
449 OCTINTERP_API octave_value as_uint8 () const;
450 OCTINTERP_API octave_value as_uint16 () const;
451 OCTINTERP_API octave_value as_uint32 () const;
452 OCTINTERP_API octave_value as_uint64 () const;
453
454 OCTINTERP_API void print (std::ostream& os, bool pr_as_read_syntax = false);
455
456 OCTINTERP_API void
457 print_raw (std::ostream& os, bool pr_as_read_syntax = false) const;
458
459 OCTINTERP_API bool
460 print_name_tag (std::ostream& os, const std::string& name) const;
461
462 OCTINTERP_API void short_disp (std::ostream& os) const;
463
464 OCTINTERP_API float_display_format get_edit_display_format () const;
465
466 OCTINTERP_API std::string
469
470 OCTINTERP_API bool save_ascii (std::ostream& os);
471
472 OCTINTERP_API bool load_ascii (std::istream& is);
473
474 OCTINTERP_API bool save_binary (std::ostream& os, bool save_as_floats);
475
476 OCTINTERP_API bool
477 load_binary (std::istream& is, bool swap,
478 octave::mach_info::float_format fmt);
479
480 OCTINTERP_API bool
481 save_hdf5 (octave_hdf5_id loc_id, const char *name, bool flag);
482
483 OCTINTERP_API bool load_hdf5 (octave_hdf5_id loc_id, const char *name);
484
485 int write (octave::stream& os, int block_size,
486 oct_data_conv::data_type output_type, int skip,
487 octave::mach_info::float_format flt_fmt) const
488 {
489 // FIXME: could be more memory efficient by having a
490 // special case of the octave::stream::write method for ranges.
491
492 return os.write (matrix_value (), block_size, output_type, skip, flt_fmt);
493 }
494
495 OCTINTERP_API mxArray * as_mxArray (bool interleaved) const;
496
498 {
500 return tmp.map (umap);
501 }
502
503 OCTINTERP_API octave_value fast_elem_extract (octave_idx_type n) const;
504
505protected:
506
507 octave::range<T> m_range;
508
509 octave::idx_vector set_idx_cache (const octave::idx_vector& idx) const
510 {
511 delete m_idx_cache;
512 m_idx_cache = new octave::idx_vector (idx);
513 return idx;
514 }
515
516 void clear_cached_info () const
517 {
518 delete m_idx_cache; m_idx_cache = nullptr;
519 }
520
521 mutable octave::idx_vector *m_idx_cache;
522
524
526};
527
529
530// For now, enable only ov_range<double>.
531
532// Specializations.
533
534template <>
535OCTINTERP_API octave::range<double>
537
538// For now, enable only ov_range<double>.
539
540// The following specializations are here to preserve previous Range
541// performance until solutions can be generalized for other types.
542
543template <>
544OCTINTERP_API octave::idx_vector
545ov_range<double>::index_vector (bool require_integers) const;
546
547template <>
548OCTINTERP_API octave_idx_type
550
551// The following specialization is also historical baggage. For double
552// ranges, we can produce special double-valued diagnoal matrix objects
553// but Octave currently provides only double and Complex diagonal matrix
554// objects.
555
556template <>
557OCTINTERP_API octave_value
559
560template <>
561OCTINTERP_API octave_value
563
564template <>
565OCTINTERP_API void
566ov_range<double>::print_raw (std::ostream& os, bool pr_as_read_syntax) const;
567
569
570// For now, enable only ov_range<double>.
571
573
574#endif
N Dimensional Array with copy-on-write semantics.
Definition Array.h:130
Array< T, Alloc > permute(const Array< octave_idx_type > &vec, bool inv=false) const
Size of the specified dimension.
Array< T, Alloc > sort(int dim=0, sortmode mode=ASCENDING) const
Size of the specified dimension.
Array< T, Alloc > reshape(octave_idx_type nr, octave_idx_type nc) const
Size of the specified dimension.
Definition Array.h:636
Vector representing the dimensions (size) of an Array.
Definition dim-vector.h:90
virtual octave_value subsref(const std::string &type, const std::list< octave_value_list > &idx)
Definition ov-base.cc:245
virtual octave_idx_type numel() const
Definition ov-base.h:401
octave_trivial_range(const octave_trivial_range &)=default
bool is_trivial_range() const
Definition ov-range.h:82
double vm_extract_forloop_double(octave_idx_type i)
Definition ov-range.h:75
octave_trivial_range(octave_idx_type numel, int base, int incr)
Definition ov-range.h:59
octave_value vm_extract_forloop_value(octave_idx_type i)
Definition ov-range.h:67
octave_idx_type nnz() const
Definition ov.h:565
octave_value map(octave_base_value::unary_mapper_t umap) const
Definition ov.h:1528
octave_value diag(octave_idx_type k=0) const
Definition ov.h:1425
ComplexMatrix complex_matrix_value(bool=false) const
Definition ov-range.h:414
double scalar_value(bool frc_str_conv=false) const
Definition ov-range.h:322
FloatComplex float_complex_value(bool=false) const
Definition ov-range.cc:280
octave::idx_vector set_idx_cache(const octave::idx_vector &idx) const
Definition ov-range.h:509
bool isreal() const
Definition ov-range.h:242
bool is_defined() const
Definition ov-range.h:205
octave_value do_index_op(const octave_value_list &idx, bool resize_ok=false)
Definition ov-range.cc:174
octave_value fast_elem_extract(octave_idx_type n) const
Definition ov-range.cc:1051
octave_value map(unary_mapper_t umap) const
Definition ov-range.h:497
bool is_uint8_type() const
Definition ov-range.h:229
ov_range(const ov_range< T > &r)
Definition ov-range.h:110
float float_scalar_value(bool frc_str_conv=false) const
Definition ov-range.h:327
octave_idx_type numel() const
Definition ov-range.h:176
int32NDArray int32_array_value() const
Definition ov-range.h:368
bool is_range() const
Definition ov-range.h:211
bool is_uint16_type() const
Definition ov-range.h:231
octave_value as_int64() const
Definition ov-range.cc:379
Array< octave_idx_type > sort_rows_idx(sortmode) const
Definition ov-range.h:306
octave_value subsref(const std::string &type, const std::list< octave_value_list > &idx)
Definition ov-range.cc:146
bool is_int64_type() const
Definition ov-range.h:227
bool is_double_type() const
Definition ov-range.h:215
sortmode is_sorted_rows(sortmode mode=UNSORTED) const
Definition ov-range.h:311
octave_value diag(octave_idx_type k=0) const
Definition ov-range.h:271
ov_range(const octave::range< T > &r)
Definition ov-range.h:103
ov_range & operator=(const ov_range &)=delete
builtin_type_t builtin_type() const
Definition ov-range.h:145
static octave_hdf5_id hdf5_save_type
Definition ov-range.h:523
bool save_hdf5(octave_hdf5_id loc_id, const char *name, bool flag)
Definition ov-range.cc:834
octave_value resize(const dim_vector &dv, bool fill=false) const
Definition ov-range.cc:313
octave_value sort(octave_idx_type dim=0, sortmode mode=ASCENDING) const
Definition ov-range.h:288
SparseMatrix sparse_matrix_value(bool=false) const
Definition ov-range.h:398
octave_value as_uint32() const
Definition ov-range.cc:400
Array< T > raw_array_value() const
Definition ov-range.h:316
dim_vector dims() const
Definition ov-range.h:164
FloatNDArray float_array_value(bool=false) const
Definition ov-range.h:347
octave_value as_uint16() const
Definition ov-range.cc:393
bool could_be_trivial_range()
Definition ov-range.cc:986
sortmode issorted(sortmode mode=UNSORTED) const
Definition ov-range.h:301
bool load_ascii(std::istream &is)
Definition ov-range.cc:585
FloatComplexMatrix float_complex_matrix_value(bool=false) const
Definition ov-range.h:419
uint8NDArray uint8_array_value() const
Definition ov-range.h:378
bool isinteger() const
Definition ov-range.h:237
void short_disp(std::ostream &os) const
Definition ov-range.cc:460
octave_value as_single() const
Definition ov-range.cc:351
void print_raw(std::ostream &os, bool pr_as_read_syntax=false) const
Definition ov-range.cc:422
bool save_ascii(std::ostream &os)
Definition ov-range.cc:552
NDArray array_value(bool=false) const
Definition ov-range.h:342
bool is_int8_type() const
Definition ov-range.h:221
std::string edit_display(const float_display_format &fmt, octave_idx_type i, octave_idx_type j) const
Definition ov-range.cc:506
octave_value full_value() const
Definition ov-range.h:203
octave_base_value * clone() const
Definition ov-range.h:127
bool save_binary(std::ostream &os, bool save_as_floats)
Definition ov-range.cc:649
double double_value(bool=false) const
Definition ov-range.cc:220
octave_value all(int dim=0) const
Definition ov-range.h:251
octave_value as_uint64() const
Definition ov-range.cc:407
float_display_format get_edit_display_format() const
Definition ov-range.cc:499
bool vm_need_storable_call() const
Definition ov-range.h:213
std::size_t byte_size() const
Definition ov-range.h:189
~ov_range()
Definition ov-range.h:125
octave_idx_type nnz() const
Definition ov-range.h:178
bool isfloat() const
Definition ov-range.h:219
bool is_int16_type() const
Definition ov-range.h:223
bool is_uint32_type() const
Definition ov-range.h:233
octave_value squeeze() const
Definition ov-range.h:201
octave_value as_int8() const
Definition ov-range.cc:358
octave_value as_int16() const
Definition ov-range.cc:365
charNDArray char_array_value(bool=false) const
Definition ov-range.cc:250
octave::range< T > m_range
Definition ov-range.h:507
octave_value_list subsref(const std::string &type, const std::list< octave_value_list > &idx, int)
Definition ov-range.h:155
bool is_constant() const
Definition ov-range.h:209
octave_value vm_extract_forloop_value(octave_idx_type idx)
Definition ov-range.cc:1067
bool is_storable() const
Definition ov-range.h:207
boolNDArray bool_array_value(bool warn=false) const
Definition ov-range.cc:301
octave_value any(int dim=0) const
Definition ov-range.h:261
int8NDArray int8_array_value() const
Definition ov-range.h:358
type_conv_info numeric_conversion_function() const
Definition ov-range.cc:102
float float_value(bool=false) const
Definition ov-range.cc:235
mxArray * as_mxArray(bool interleaved) const
Definition ov-range.cc:960
bool is_single_type() const
Definition ov-range.h:217
octave_value as_trivial_range()
Definition ov-range.cc:1037
bool load_hdf5(octave_hdf5_id loc_id, const char *name)
Definition ov-range.cc:916
ComplexNDArray complex_array_value(bool=false) const
Definition ov-range.h:424
bool is_true() const
Definition ov-range.h:249
bool load_binary(std::istream &is, bool swap, octave::mach_info::float_format fmt)
Definition ov-range.cc:696
octave_value diag(octave_idx_type nr, octave_idx_type nc) const
Definition ov-range.h:278
octave::idx_vector * m_idx_cache
Definition ov-range.h:521
FloatMatrix float_matrix_value(bool=false) const
Definition ov-range.h:337
octave_base_value * empty_clone() const
Definition ov-range.h:136
octave_value as_double() const
Definition ov-range.cc:344
octave::range< double > range_value() const
Definition ov-range.cc:325
ov_range(const octave::range< T > &r, const octave::idx_vector &cache)
Definition ov-range.h:116
Matrix matrix_value(bool=false) const
Definition ov-range.h:332
SparseComplexMatrix sparse_complex_matrix_value(bool=false) const
Definition ov-range.h:403
int16NDArray int16_array_value() const
Definition ov-range.h:363
void clear_cached_info() const
Definition ov-range.h:516
bool is_uint64_type() const
Definition ov-range.h:235
octave_value reshape(const dim_vector &new_dims) const
Definition ov-range.h:191
uint16NDArray uint16_array_value() const
Definition ov-range.h:383
int write(octave::stream &os, int block_size, oct_data_conv::data_type output_type, int skip, octave::mach_info::float_format flt_fmt) const
Definition ov-range.h:485
void print(std::ostream &os, bool pr_as_read_syntax=false)
Definition ov-range.cc:414
octave_value permute(const Array< int > &vec, bool inv=false) const
Definition ov-range.h:196
FloatComplexNDArray float_complex_array_value(bool=false) const
Definition ov-range.h:429
bool is_int32_type() const
Definition ov-range.h:225
octave_value convert_to_str_internal(bool pad, bool force, char type) const
Definition ov-range.cc:334
octave_base_value * try_narrowing_conversion()
Definition ov-range.cc:112
bool isnumeric() const
Definition ov-range.h:244
octave_value as_uint8() const
Definition ov-range.cc:386
octave_value sort(Array< octave_idx_type > &sidx, octave_idx_type dim=0, sortmode mode=ASCENDING) const
Definition ov-range.h:294
uint32NDArray uint32_array_value() const
Definition ov-range.h:388
uint64NDArray uint64_array_value() const
Definition ov-range.h:393
octave::idx_vector index_vector(bool require_integers=false) const
Definition ov-range.cc:212
bool print_name_tag(std::ostream &os, const std::string &name) const
Definition ov-range.cc:435
octave_value as_int32() const
Definition ov-range.cc:372
Complex complex_value(bool=false) const
Definition ov-range.cc:265
int64NDArray int64_array_value() const
Definition ov-range.h:373
void error(const char *fmt,...)
Definition error.cc:1003
std::complex< double > Complex
Definition oct-cmplx.h:33
std::complex< float > FloatComplex
Definition oct-cmplx.h:34
int64_t octave_hdf5_id
sortmode
Definition oct-sort.h:97
@ UNSORTED
Definition oct-sort.h:97
@ ASCENDING
Definition oct-sort.h:97
bool btyp_isnumeric(builtin_type_t btyp)
Definition ov-base.h:107
bool btyp_isinteger(builtin_type_t btyp)
Definition ov-base.h:110
bool btyp_isfloat(builtin_type_t btyp)
Definition ov-base.h:113
#define DECLARE_TEMPLATE_OV_TYPEID_SPECIALIZATIONS_API(cls, type, API)
Definition ov-base.h:214
#define DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA_API(API)
Definition ov-base.h:185
builtin_type_t
Definition ov-base.h:83
@ btyp_double
Definition ov-base.h:84
@ btyp_int32
Definition ov-base.h:90
@ btyp_float
Definition ov-base.h:85
@ btyp_uint16
Definition ov-base.h:93
@ btyp_int64
Definition ov-base.h:91
@ btyp_uint64
Definition ov-base.h:95
@ btyp_int16
Definition ov-base.h:89
@ btyp_uint32
Definition ov-base.h:94
@ btyp_uint8
Definition ov-base.h:92
@ btyp_int8
Definition ov-base.h:88
ov_range< double > octave_double_range
Definition ov-range.h:568
octave_double_range octave_range
Definition ov-range.h:572