Mercurial > octave
annotate libinterp/octave-value/ov-base.h @ 29353:715344f405f0
improve handling of nan, infinite value, and empty ranges (bug #59229)
All ranges with NaN as their base, limit, or increment should produce
a single NaN value. Ranges with infinite base, limit, or increment
values may be empty, or produce NaN, or an infinite number of
elements. For compatibility with Matlab, ranges constructed normally
in the interpreter with an increment of zero are emtpy. We still
provide a special constructor to allow a range with zero increment to
represent a row vector with a constant value.
* Range.h, Range.cc (xall_elements_re_ints): Handle NaN and inf ranges.
(xinit): Correctly handle NaN ranges, empty ranges, and ranges with an
infinite number of values.
(xis_storable): New function.
(range<T>::is_storable): New function with specializations for double
and float.
(range<T>::array_value): If number of elements is 1, reeturn final value.
(range<T>::checkelem, range<T>::elem): If number of elements is 1 and
index is 0, Return final value instead of base value.
(class rangeidx_helper): Likewise. Prefix data members with m_.
* ov-base.h (octave_base_value::is_storable): New virtual function.
* ov-magic-int.h (octave_base_magic_int::is_storable): New function.
* ov-null-mat.h (octave_null_matrix::is_storable,
octave_null_str::is_storable, octave_null_sq_str::is_storable):
New functions.
* ov-range.h (octave_range::is_storable): New function.
* ov.cc (octave_value::storable_value,
octave_value::make_storable_value): Error if range is not storable.
* test/range.tst: New tests for double and float ranges.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Sat, 06 Feb 2021 09:27:26 -0500 |
parents | 853e60367cb6 |
children | 7854d5752dd2 |
rev | line source |
---|---|
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
1 //////////////////////////////////////////////////////////////////////// |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
2 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
3 // Copyright (C) 1996-2020 The Octave Project Developers |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
4 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
5 // See the file COPYRIGHT.md in the top-level directory of this |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
6 // distribution or <https://octave.org/copyright/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
7 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
8 // This file is part of Octave. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
9 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
10 // Octave is free software: you can redistribute it and/or modify it |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
11 // under the terms of the GNU General Public License as published by |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
12 // the Free Software Foundation, either version 3 of the License, or |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
13 // (at your option) any later version. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
14 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
15 // Octave is distributed in the hope that it will be useful, but |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
16 // WITHOUT ANY WARRANTY; without even the implied warranty of |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
18 // GNU General Public License for more details. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
19 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
20 // You should have received a copy of the GNU General Public License |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
21 // along with Octave; see the file COPYING. If not, see |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
22 // <https://www.gnu.org/licenses/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
23 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
24 //////////////////////////////////////////////////////////////////////// |
2376 | 25 |
20791
f7084eae3318
maint: Use Octave coding conventions for #if statements.
Rik <rik@octave.org>
parents:
20700
diff
changeset
|
26 #if ! defined (octave_ov_base_h) |
17822
ebb3ef964372
maint: Use common #define syntax "octave_filename_h" in h_files.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
27 #define octave_ov_base_h 1 |
2376 | 28 |
21244
1473547f50f5
include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents:
21228
diff
changeset
|
29 #include "octave-config.h" |
1473547f50f5
include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents:
21228
diff
changeset
|
30 |
2376 | 31 #include <cstdlib> |
32 | |
8950
d865363208d6
include <iosfwd> instead of <iostream> in header files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
33 #include <iosfwd> |
5759 | 34 #include <list> |
2376 | 35 #include <string> |
36 | |
5759 | 37 #include "Range.h" |
5828 | 38 #include "data-conv.h" |
2376 | 39 #include "mx-base.h" |
40 #include "str-vec.h" | |
41 | |
20264
bfe66db8addb
don't include hdf5.h or use HDF5 typedefs in public header files (bug #43180)
John W. Eaton <jwe@octave.org>
parents:
20229
diff
changeset
|
42 #include "oct-hdf5-types.h" |
23059
b98ebcd7f11c
move some octave stream classes into octave namespace
John W. Eaton <jwe@octave.org>
parents:
23012
diff
changeset
|
43 #include "oct-stream.h" |
2376 | 44 |
24540
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
45 namespace octave |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
46 { |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
47 class type_info; |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
48 |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
49 // FIXME: This is not ideal, but it avoids including |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
50 // interpreter-private.h here and bringing in a lot of unnecessary |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
51 // symbols that require even more header files. |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
52 |
29234
853e60367cb6
Set API tags in files in libinterp/octave-value (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28646
diff
changeset
|
53 extern OCTINTERP_API type_info& __get_type_info__ (const std::string&); |
24540
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
54 } |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
55 |
3351 | 56 class Cell; |
24668
d4dd741b2794
new octave_value functions for formatting output
John W. Eaton <jwe@octave.org>
parents:
24657
diff
changeset
|
57 class float_display_format; |
15149
62a35ae7d6a2
use forward decls for mxArray in ov.h and ov-base.h
John W. Eaton <jwe@octave.org>
parents:
15057
diff
changeset
|
58 class mxArray; |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10670
diff
changeset
|
59 class octave_map; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10670
diff
changeset
|
60 class octave_scalar_map; |
5759 | 61 class octave_value; |
2376 | 62 class octave_value_list; |
23881
5aec653c88e7
new function for accessing classdef objects
John W. Eaton <jwe@octave.org>
parents:
23865
diff
changeset
|
63 class octave_classdef; |
5759 | 64 class octave_function; |
65 class octave_user_function; | |
7719
87eda1f8faaa
octave_user_code: new base class for octave_user_script and octave_user_function
John W. Eaton <jwe@octave.org>
parents:
7638
diff
changeset
|
66 class octave_user_script; |
87eda1f8faaa
octave_user_code: new base class for octave_user_script and octave_user_function
John W. Eaton <jwe@octave.org>
parents:
7638
diff
changeset
|
67 class octave_user_code; |
5759 | 68 class octave_fcn_handle; |
69 class octave_value_list; | |
2376 | 70 |
9685 | 71 enum builtin_type_t |
72 { | |
73 btyp_double, | |
74 btyp_float, | |
75 btyp_complex, | |
76 btyp_float_complex, | |
77 btyp_int8, | |
78 btyp_int16, | |
79 btyp_int32, | |
80 btyp_int64, | |
81 btyp_uint8, | |
82 btyp_uint16, | |
83 btyp_uint32, | |
84 btyp_uint64, | |
9790
a5035bc7fbfb
rewrite dispatch part & slightly improve min,max,cummin,cummax
Jaroslav Hajek <highegg@gmail.com>
parents:
9767
diff
changeset
|
85 btyp_bool, |
9685 | 86 btyp_char, |
10087
090173f2db40
improve overload dispatching of built-in classes
Jaroslav Hajek <highegg@gmail.com>
parents:
10075
diff
changeset
|
87 btyp_struct, |
090173f2db40
improve overload dispatching of built-in classes
Jaroslav Hajek <highegg@gmail.com>
parents:
10075
diff
changeset
|
88 btyp_cell, |
090173f2db40
improve overload dispatching of built-in classes
Jaroslav Hajek <highegg@gmail.com>
parents:
10075
diff
changeset
|
89 btyp_func_handle, |
9743
26abff55f6fe
optimize bsxfun for common built-in operations
Jaroslav Hajek <highegg@gmail.com>
parents:
9689
diff
changeset
|
90 btyp_unknown, |
26abff55f6fe
optimize bsxfun for common built-in operations
Jaroslav Hajek <highegg@gmail.com>
parents:
9689
diff
changeset
|
91 btyp_num_types = btyp_unknown |
9685 | 92 }; |
93 | |
28632
6aa0808d2ed6
also provide builtin type to class traits
John W. Eaton <jwe@octave.org>
parents:
28588
diff
changeset
|
94 extern OCTINTERP_API std::string btyp_class_name []; |
10087
090173f2db40
improve overload dispatching of built-in classes
Jaroslav Hajek <highegg@gmail.com>
parents:
10075
diff
changeset
|
95 |
9790
a5035bc7fbfb
rewrite dispatch part & slightly improve min,max,cummin,cummax
Jaroslav Hajek <highegg@gmail.com>
parents:
9767
diff
changeset
|
96 inline bool btyp_isnumeric (builtin_type_t btyp) |
a5035bc7fbfb
rewrite dispatch part & slightly improve min,max,cummin,cummax
Jaroslav Hajek <highegg@gmail.com>
parents:
9767
diff
changeset
|
97 { return btyp <= btyp_uint64; } |
a5035bc7fbfb
rewrite dispatch part & slightly improve min,max,cummin,cummax
Jaroslav Hajek <highegg@gmail.com>
parents:
9767
diff
changeset
|
98 |
10087
090173f2db40
improve overload dispatching of built-in classes
Jaroslav Hajek <highegg@gmail.com>
parents:
10075
diff
changeset
|
99 inline bool btyp_isinteger (builtin_type_t btyp) |
090173f2db40
improve overload dispatching of built-in classes
Jaroslav Hajek <highegg@gmail.com>
parents:
10075
diff
changeset
|
100 { return btyp >= btyp_int8 && btyp <= btyp_uint64; } |
090173f2db40
improve overload dispatching of built-in classes
Jaroslav Hajek <highegg@gmail.com>
parents:
10075
diff
changeset
|
101 |
090173f2db40
improve overload dispatching of built-in classes
Jaroslav Hajek <highegg@gmail.com>
parents:
10075
diff
changeset
|
102 inline bool btyp_isfloat (builtin_type_t btyp) |
090173f2db40
improve overload dispatching of built-in classes
Jaroslav Hajek <highegg@gmail.com>
parents:
10075
diff
changeset
|
103 { return btyp <= btyp_float_complex; } |
090173f2db40
improve overload dispatching of built-in classes
Jaroslav Hajek <highegg@gmail.com>
parents:
10075
diff
changeset
|
104 |
090173f2db40
improve overload dispatching of built-in classes
Jaroslav Hajek <highegg@gmail.com>
parents:
10075
diff
changeset
|
105 inline bool btyp_isarray (builtin_type_t btyp) |
090173f2db40
improve overload dispatching of built-in classes
Jaroslav Hajek <highegg@gmail.com>
parents:
10075
diff
changeset
|
106 { return btyp <= btyp_char; } |
090173f2db40
improve overload dispatching of built-in classes
Jaroslav Hajek <highegg@gmail.com>
parents:
10075
diff
changeset
|
107 |
24624
ce2eb28e0a6d
doc: make all Doxygen comment blocks more consistent
Mike Miller <mtmiller@octave.org>
parents:
24620
diff
changeset
|
108 //! Determine the resulting type for a possible mixed-type operation. |
ce2eb28e0a6d
doc: make all Doxygen comment blocks more consistent
Mike Miller <mtmiller@octave.org>
parents:
24620
diff
changeset
|
109 //! |
ce2eb28e0a6d
doc: make all Doxygen comment blocks more consistent
Mike Miller <mtmiller@octave.org>
parents:
24620
diff
changeset
|
110 //! Rules for the resulting type: |
ce2eb28e0a6d
doc: make all Doxygen comment blocks more consistent
Mike Miller <mtmiller@octave.org>
parents:
24620
diff
changeset
|
111 //! - bool -> double |
ce2eb28e0a6d
doc: make all Doxygen comment blocks more consistent
Mike Miller <mtmiller@octave.org>
parents:
24620
diff
changeset
|
112 //! - single + double -> single |
ce2eb28e0a6d
doc: make all Doxygen comment blocks more consistent
Mike Miller <mtmiller@octave.org>
parents:
24620
diff
changeset
|
113 //! - real + complex -> complex |
ce2eb28e0a6d
doc: make all Doxygen comment blocks more consistent
Mike Miller <mtmiller@octave.org>
parents:
24620
diff
changeset
|
114 //! - integer + real -> integer |
ce2eb28e0a6d
doc: make all Doxygen comment blocks more consistent
Mike Miller <mtmiller@octave.org>
parents:
24620
diff
changeset
|
115 //! - uint + uint -> uint (the bigger one) |
ce2eb28e0a6d
doc: make all Doxygen comment blocks more consistent
Mike Miller <mtmiller@octave.org>
parents:
24620
diff
changeset
|
116 //! - sint + sint -> sint (the bigger one) |
ce2eb28e0a6d
doc: make all Doxygen comment blocks more consistent
Mike Miller <mtmiller@octave.org>
parents:
24620
diff
changeset
|
117 //! |
ce2eb28e0a6d
doc: make all Doxygen comment blocks more consistent
Mike Miller <mtmiller@octave.org>
parents:
24620
diff
changeset
|
118 //! @return The resulting type or "unknown type", if the resulting type cannot |
ce2eb28e0a6d
doc: make all Doxygen comment blocks more consistent
Mike Miller <mtmiller@octave.org>
parents:
24620
diff
changeset
|
119 //! be determined. |
ce2eb28e0a6d
doc: make all Doxygen comment blocks more consistent
Mike Miller <mtmiller@octave.org>
parents:
24620
diff
changeset
|
120 |
9790
a5035bc7fbfb
rewrite dispatch part & slightly improve min,max,cummin,cummax
Jaroslav Hajek <highegg@gmail.com>
parents:
9767
diff
changeset
|
121 extern OCTINTERP_API |
a5035bc7fbfb
rewrite dispatch part & slightly improve min,max,cummin,cummax
Jaroslav Hajek <highegg@gmail.com>
parents:
9767
diff
changeset
|
122 builtin_type_t btyp_mixed_numeric (builtin_type_t x, builtin_type_t y); |
a5035bc7fbfb
rewrite dispatch part & slightly improve min,max,cummin,cummax
Jaroslav Hajek <highegg@gmail.com>
parents:
9767
diff
changeset
|
123 |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
21134
diff
changeset
|
124 template <typename T> |
9685 | 125 struct class_to_btyp |
126 { | |
127 static const builtin_type_t btyp = btyp_unknown; | |
128 }; | |
129 | |
28632
6aa0808d2ed6
also provide builtin type to class traits
John W. Eaton <jwe@octave.org>
parents:
28588
diff
changeset
|
130 template <builtin_type_t BTYP> |
6aa0808d2ed6
also provide builtin type to class traits
John W. Eaton <jwe@octave.org>
parents:
28588
diff
changeset
|
131 struct btyp_to_class |
6aa0808d2ed6
also provide builtin type to class traits
John W. Eaton <jwe@octave.org>
parents:
28588
diff
changeset
|
132 { |
6aa0808d2ed6
also provide builtin type to class traits
John W. Eaton <jwe@octave.org>
parents:
28588
diff
changeset
|
133 typedef void type; |
6aa0808d2ed6
also provide builtin type to class traits
John W. Eaton <jwe@octave.org>
parents:
28588
diff
changeset
|
134 }; |
6aa0808d2ed6
also provide builtin type to class traits
John W. Eaton <jwe@octave.org>
parents:
28588
diff
changeset
|
135 |
6aa0808d2ed6
also provide builtin type to class traits
John W. Eaton <jwe@octave.org>
parents:
28588
diff
changeset
|
136 #define DEF_BTYP_TRAITS(BTYP, CLASS) \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
137 template <> \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
138 struct class_to_btyp<CLASS> \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
139 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
140 static const builtin_type_t btyp = BTYP; \ |
28632
6aa0808d2ed6
also provide builtin type to class traits
John W. Eaton <jwe@octave.org>
parents:
28588
diff
changeset
|
141 }; \ |
6aa0808d2ed6
also provide builtin type to class traits
John W. Eaton <jwe@octave.org>
parents:
28588
diff
changeset
|
142 \ |
6aa0808d2ed6
also provide builtin type to class traits
John W. Eaton <jwe@octave.org>
parents:
28588
diff
changeset
|
143 template <> \ |
6aa0808d2ed6
also provide builtin type to class traits
John W. Eaton <jwe@octave.org>
parents:
28588
diff
changeset
|
144 struct btyp_to_class<BTYP> \ |
6aa0808d2ed6
also provide builtin type to class traits
John W. Eaton <jwe@octave.org>
parents:
28588
diff
changeset
|
145 { \ |
6aa0808d2ed6
also provide builtin type to class traits
John W. Eaton <jwe@octave.org>
parents:
28588
diff
changeset
|
146 typedef CLASS type; \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
147 } |
9685 | 148 |
28632
6aa0808d2ed6
also provide builtin type to class traits
John W. Eaton <jwe@octave.org>
parents:
28588
diff
changeset
|
149 DEF_BTYP_TRAITS (btyp_double, double); |
6aa0808d2ed6
also provide builtin type to class traits
John W. Eaton <jwe@octave.org>
parents:
28588
diff
changeset
|
150 DEF_BTYP_TRAITS (btyp_float, float); |
6aa0808d2ed6
also provide builtin type to class traits
John W. Eaton <jwe@octave.org>
parents:
28588
diff
changeset
|
151 DEF_BTYP_TRAITS (btyp_complex, Complex); |
6aa0808d2ed6
also provide builtin type to class traits
John W. Eaton <jwe@octave.org>
parents:
28588
diff
changeset
|
152 DEF_BTYP_TRAITS (btyp_float_complex, FloatComplex); |
6aa0808d2ed6
also provide builtin type to class traits
John W. Eaton <jwe@octave.org>
parents:
28588
diff
changeset
|
153 DEF_BTYP_TRAITS (btyp_int8, octave_int8); |
6aa0808d2ed6
also provide builtin type to class traits
John W. Eaton <jwe@octave.org>
parents:
28588
diff
changeset
|
154 DEF_BTYP_TRAITS (btyp_int16, octave_int16); |
6aa0808d2ed6
also provide builtin type to class traits
John W. Eaton <jwe@octave.org>
parents:
28588
diff
changeset
|
155 DEF_BTYP_TRAITS (btyp_int32, octave_int32); |
6aa0808d2ed6
also provide builtin type to class traits
John W. Eaton <jwe@octave.org>
parents:
28588
diff
changeset
|
156 DEF_BTYP_TRAITS (btyp_int64, octave_int64); |
6aa0808d2ed6
also provide builtin type to class traits
John W. Eaton <jwe@octave.org>
parents:
28588
diff
changeset
|
157 DEF_BTYP_TRAITS (btyp_uint8, octave_uint8); |
6aa0808d2ed6
also provide builtin type to class traits
John W. Eaton <jwe@octave.org>
parents:
28588
diff
changeset
|
158 DEF_BTYP_TRAITS (btyp_uint16, octave_uint16); |
6aa0808d2ed6
also provide builtin type to class traits
John W. Eaton <jwe@octave.org>
parents:
28588
diff
changeset
|
159 DEF_BTYP_TRAITS (btyp_uint32, octave_uint32); |
6aa0808d2ed6
also provide builtin type to class traits
John W. Eaton <jwe@octave.org>
parents:
28588
diff
changeset
|
160 DEF_BTYP_TRAITS (btyp_uint64, octave_uint64); |
6aa0808d2ed6
also provide builtin type to class traits
John W. Eaton <jwe@octave.org>
parents:
28588
diff
changeset
|
161 DEF_BTYP_TRAITS (btyp_bool, bool); |
6aa0808d2ed6
also provide builtin type to class traits
John W. Eaton <jwe@octave.org>
parents:
28588
diff
changeset
|
162 DEF_BTYP_TRAITS (btyp_char, char); |
6aa0808d2ed6
also provide builtin type to class traits
John W. Eaton <jwe@octave.org>
parents:
28588
diff
changeset
|
163 |
9685 | 164 |
5759 | 165 // T_ID is the type id of struct objects, set by register_type(). |
166 // T_NAME is the type name of struct objects. | |
7067 | 167 |
21228
77a622392714
define OCTAVE_EMPTY_CPP_ARG just prior to only use
John W. Eaton <jwe@octave.org>
parents:
21139
diff
changeset
|
168 #define OCTAVE_EMPTY_CPP_ARG /* empty */ |
77a622392714
define OCTAVE_EMPTY_CPP_ARG just prior to only use
John W. Eaton <jwe@octave.org>
parents:
21139
diff
changeset
|
169 |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
170 #define DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA \ |
7066 | 171 DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA2 (OCTAVE_EMPTY_CPP_ARG) |
5759 | 172 |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
173 #define DECLARE_OV_BASE_TYPEID_FUNCTIONS_AND_DATA \ |
5759 | 174 DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA2(virtual) |
175 | |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
176 #define DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA2(VIRTUAL) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
177 public: \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
178 VIRTUAL int type_id (void) const { return t_id; } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
179 VIRTUAL std::string type_name (void) const { return t_name; } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
180 VIRTUAL std::string class_name (void) const { return c_name; } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
181 static int static_type_id (void) { return t_id; } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
182 static std::string static_type_name (void) { return t_name; } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
183 static std::string static_class_name (void) { return c_name; } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
184 static void register_type (void); \ |
24540
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
185 static void register_type (octave::type_info&); \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
186 \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
187 private: \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
188 static int t_id; \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
189 static const std::string t_name; \ |
5759 | 190 static const std::string c_name; |
191 | |
28642
0237b10e3943
allow template types in OV_TYPEID macros
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
192 #define DECLARE_TEMPLATE_OV_TYPEID_SPECIALIZATIONS(cls, type) \ |
0237b10e3943
allow template types in OV_TYPEID macros
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
193 template <> void cls<type>::register_type (void); \ |
0237b10e3943
allow template types in OV_TYPEID macros
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
194 template <> void cls<type>::register_type (octave::type_info&); \ |
0237b10e3943
allow template types in OV_TYPEID macros
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
195 template <> int cls<type>::t_id; \ |
0237b10e3943
allow template types in OV_TYPEID macros
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
196 template <> const std::string cls<type>::t_name; \ |
0237b10e3943
allow template types in OV_TYPEID macros
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
197 template <> const std::string cls<type>::c_name; |
0237b10e3943
allow template types in OV_TYPEID macros
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
198 |
0237b10e3943
allow template types in OV_TYPEID macros
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
199 #define DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA_INTERNAL(tspec, t, n, c) \ |
0237b10e3943
allow template types in OV_TYPEID macros
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
200 tspec int t::t_id (-1); \ |
0237b10e3943
allow template types in OV_TYPEID macros
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
201 tspec const std::string t::t_name (n); \ |
0237b10e3943
allow template types in OV_TYPEID macros
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
202 tspec const std::string t::c_name (c); \ |
0237b10e3943
allow template types in OV_TYPEID macros
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
203 tspec void t::register_type (void) \ |
0237b10e3943
allow template types in OV_TYPEID macros
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
204 { \ |
0237b10e3943
allow template types in OV_TYPEID macros
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
205 octave::type_info& type_info \ |
0237b10e3943
allow template types in OV_TYPEID macros
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
206 = octave::__get_type_info__ (#t "::register_type"); \ |
0237b10e3943
allow template types in OV_TYPEID macros
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
207 \ |
0237b10e3943
allow template types in OV_TYPEID macros
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
208 register_type (type_info); \ |
0237b10e3943
allow template types in OV_TYPEID macros
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
209 } \ |
0237b10e3943
allow template types in OV_TYPEID macros
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
210 tspec void t::register_type (octave::type_info& ti) \ |
0237b10e3943
allow template types in OV_TYPEID macros
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
211 { \ |
0237b10e3943
allow template types in OV_TYPEID macros
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
212 octave_value v (new t ()); \ |
0237b10e3943
allow template types in OV_TYPEID macros
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
213 t_id = ti.register_type (t::t_name, t::c_name, v); \ |
0237b10e3943
allow template types in OV_TYPEID macros
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
214 } |
0237b10e3943
allow template types in OV_TYPEID macros
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
215 |
0237b10e3943
allow template types in OV_TYPEID macros
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
216 #define DEFINE_TEMPLATE_OV_TYPEID_FUNCTIONS_AND_DATA(t, n, c) \ |
0237b10e3943
allow template types in OV_TYPEID macros
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
217 DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA_INTERNAL (template <>, t, n, c) |
0237b10e3943
allow template types in OV_TYPEID macros
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
218 |
24540
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
219 #define DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA(t, n, c) \ |
28642
0237b10e3943
allow template types in OV_TYPEID macros
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
220 DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA_INTERNAL ( , t, n, c) |
5759 | 221 |
2477 | 222 // A base value type, so that derived types only have to redefine what |
223 // they need (if they are derived from octave_base_value instead of | |
224 // octave_value). | |
2376 | 225 |
226 class | |
6109 | 227 OCTINTERP_API |
5759 | 228 octave_base_value |
2376 | 229 { |
230 public: | |
231 | |
5759 | 232 typedef octave_base_value * (*type_conv_fcn) (const octave_base_value&); |
233 | |
8345
c777f3ce02d8
smarter conversion lookup
Jaroslav Hajek <highegg@gmail.com>
parents:
8150
diff
changeset
|
234 // type conversion, including result type information |
c777f3ce02d8
smarter conversion lookup
Jaroslav Hajek <highegg@gmail.com>
parents:
8150
diff
changeset
|
235 class type_conv_info |
c777f3ce02d8
smarter conversion lookup
Jaroslav Hajek <highegg@gmail.com>
parents:
8150
diff
changeset
|
236 { |
c777f3ce02d8
smarter conversion lookup
Jaroslav Hajek <highegg@gmail.com>
parents:
8150
diff
changeset
|
237 public: |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23683
diff
changeset
|
238 type_conv_info (type_conv_fcn f = nullptr, int t = -1) |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
239 : _fcn (f), _type_id (t) { } |
8345
c777f3ce02d8
smarter conversion lookup
Jaroslav Hajek <highegg@gmail.com>
parents:
8150
diff
changeset
|
240 |
c777f3ce02d8
smarter conversion lookup
Jaroslav Hajek <highegg@gmail.com>
parents:
8150
diff
changeset
|
241 operator type_conv_fcn (void) const { return _fcn; } |
c777f3ce02d8
smarter conversion lookup
Jaroslav Hajek <highegg@gmail.com>
parents:
8150
diff
changeset
|
242 |
23433
c9fab0bc983e
maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
243 octave_base_value * operator () (const octave_base_value& v) const |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
244 { return (*_fcn) (v); } |
8345
c777f3ce02d8
smarter conversion lookup
Jaroslav Hajek <highegg@gmail.com>
parents:
8150
diff
changeset
|
245 |
c777f3ce02d8
smarter conversion lookup
Jaroslav Hajek <highegg@gmail.com>
parents:
8150
diff
changeset
|
246 int type_id (void) const { return _type_id; } |
c777f3ce02d8
smarter conversion lookup
Jaroslav Hajek <highegg@gmail.com>
parents:
8150
diff
changeset
|
247 |
c777f3ce02d8
smarter conversion lookup
Jaroslav Hajek <highegg@gmail.com>
parents:
8150
diff
changeset
|
248 private: |
c777f3ce02d8
smarter conversion lookup
Jaroslav Hajek <highegg@gmail.com>
parents:
8150
diff
changeset
|
249 type_conv_fcn _fcn; |
c777f3ce02d8
smarter conversion lookup
Jaroslav Hajek <highegg@gmail.com>
parents:
8150
diff
changeset
|
250 int _type_id; |
c777f3ce02d8
smarter conversion lookup
Jaroslav Hajek <highegg@gmail.com>
parents:
8150
diff
changeset
|
251 }; |
c777f3ce02d8
smarter conversion lookup
Jaroslav Hajek <highegg@gmail.com>
parents:
8150
diff
changeset
|
252 |
5759 | 253 friend class octave_value; |
2376 | 254 |
5759 | 255 octave_base_value (void) : count (1) { } |
256 | |
9521 | 257 octave_base_value (const octave_base_value&) : count (1) { } |
2376 | 258 |
22868
87e3163f6c87
use c++11 "= default" syntax for declaration of trivial destructors
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
259 virtual ~octave_base_value (void) = default; |
5759 | 260 |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21739
diff
changeset
|
261 // Unconditional clone. Always clones. |
5759 | 262 virtual octave_base_value * |
263 clone (void) const { return new octave_base_value (*this); } | |
2376 | 264 |
9521 | 265 // Empty clone. |
5759 | 266 virtual octave_base_value * |
10544
9961fc022d9d
fix assignment to non-existing variables and octave_value::assign
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
267 empty_clone (void) const; |
2376 | 268 |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21739
diff
changeset
|
269 // Unique clone. Usually clones, but may be overridden to fake the |
9521 | 270 // cloning when sharing copies is to be controlled from within an |
271 // instance (see octave_class). | |
272 virtual octave_base_value * | |
273 unique_clone (void) { return clone (); } | |
274 | |
8345
c777f3ce02d8
smarter conversion lookup
Jaroslav Hajek <highegg@gmail.com>
parents:
8150
diff
changeset
|
275 virtual type_conv_info |
5759 | 276 numeric_conversion_function (void) const |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
277 { return type_conv_info (); } |
2410 | 278 |
8345
c777f3ce02d8
smarter conversion lookup
Jaroslav Hajek <highegg@gmail.com>
parents:
8150
diff
changeset
|
279 virtual type_conv_info |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
280 numeric_demotion_function (void) const |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
281 { return type_conv_info (); } |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
282 |
5759 | 283 virtual octave_value squeeze (void) const; |
284 | |
8458
d254a21e0120
reimplement full as method of octave_base_value
Jaroslav Hajek <highegg@gmail.com>
parents:
8437
diff
changeset
|
285 virtual octave_value full_value (void) const; |
d254a21e0120
reimplement full as method of octave_base_value
Jaroslav Hajek <highegg@gmail.com>
parents:
8437
diff
changeset
|
286 |
22296
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
287 virtual octave_value as_double (void) const; |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
288 virtual octave_value as_single (void) const; |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
289 |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
290 virtual octave_value as_int8 (void) const; |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
291 virtual octave_value as_int16 (void) const; |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
292 virtual octave_value as_int32 (void) const; |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
293 virtual octave_value as_int64 (void) const; |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
294 |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
295 virtual octave_value as_uint8 (void) const; |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
296 virtual octave_value as_uint16 (void) const; |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
297 virtual octave_value as_uint32 (void) const; |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
298 virtual octave_value as_uint64 (void) const; |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
299 |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23683
diff
changeset
|
300 virtual octave_base_value * try_narrowing_conversion (void) { return nullptr; } |
4532 | 301 |
8523
ad3afaaa19c1
implement non-copying contiguous range indexing
Jaroslav Hajek <highegg@gmail.com>
parents:
8458
diff
changeset
|
302 virtual void maybe_economize (void) { } |
ad3afaaa19c1
implement non-copying contiguous range indexing
Jaroslav Hajek <highegg@gmail.com>
parents:
8458
diff
changeset
|
303 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
304 virtual Matrix size (void); |
9329
67fc970dad7d
improve indexed assignment using indexed numel
Jaroslav Hajek <highegg@gmail.com>
parents:
9182
diff
changeset
|
305 |
26922
072d0610cc56
avoid some overloaded virtual warnings (bug #55741)
John W. Eaton <jwe@octave.org>
parents:
26916
diff
changeset
|
306 virtual octave_idx_type xnumel (const octave_value_list&); |
9329
67fc970dad7d
improve indexed assignment using indexed numel
Jaroslav Hajek <highegg@gmail.com>
parents:
9182
diff
changeset
|
307 |
26916
9cd4b045fe3d
avoid some overloaded virtual warnings (bug #55741)
John W. Eaton <jwe@octave.org>
parents:
26655
diff
changeset
|
308 // FIXME: Do we really need all three of these versions of subsref? |
9cd4b045fe3d
avoid some overloaded virtual warnings (bug #55741)
John W. Eaton <jwe@octave.org>
parents:
26655
diff
changeset
|
309 |
5759 | 310 virtual octave_value |
311 subsref (const std::string& type, | |
10313 | 312 const std::list<octave_value_list>& idx); |
3933 | 313 |
5759 | 314 virtual octave_value_list |
315 subsref (const std::string& type, | |
10313 | 316 const std::list<octave_value_list>& idx, |
317 int nargout); | |
3933 | 318 |
5759 | 319 virtual octave_value |
8551
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8523
diff
changeset
|
320 subsref (const std::string& type, |
10313 | 321 const std::list<octave_value_list>& idx, |
8551
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8523
diff
changeset
|
322 bool auto_add); |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8523
diff
changeset
|
323 |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8523
diff
changeset
|
324 virtual octave_value |
5885 | 325 do_index_op (const octave_value_list& idx, bool resize_ok = false); |
2974 | 326 |
9147
5579998f8acf
Update to OOP facilities.
rtshort@bristlecone.phaselocked.com
parents:
9010
diff
changeset
|
327 virtual void assign (const std::string&, const octave_value&) { } |
5579998f8acf
Update to OOP facilities.
rtshort@bristlecone.phaselocked.com
parents:
9010
diff
changeset
|
328 |
5759 | 329 virtual octave_value |
330 subsasgn (const std::string& type, | |
10313 | 331 const std::list<octave_value_list>& idx, |
332 const octave_value& rhs); | |
2376 | 333 |
12171
d08901c05c1b
fix bug in class assignment to undefined object with index
John W. Eaton <jwe@octave.org>
parents:
12125
diff
changeset
|
334 virtual octave_value |
d08901c05c1b
fix bug in class assignment to undefined object with index
John W. Eaton <jwe@octave.org>
parents:
12125
diff
changeset
|
335 undef_subsasgn (const std::string& type, |
d08901c05c1b
fix bug in class assignment to undefined object with index
John W. Eaton <jwe@octave.org>
parents:
12125
diff
changeset
|
336 const std::list<octave_value_list>& idx, |
d08901c05c1b
fix bug in class assignment to undefined object with index
John W. Eaton <jwe@octave.org>
parents:
12125
diff
changeset
|
337 const octave_value& rhs); |
d08901c05c1b
fix bug in class assignment to undefined object with index
John W. Eaton <jwe@octave.org>
parents:
12125
diff
changeset
|
338 |
18130
e473c4853afc
enable non-integer ranges as indices by default and deprecate preference
John W. Eaton <jwe@octave.org>
parents:
17870
diff
changeset
|
339 virtual idx_vector index_vector (bool require_integers = false) const; |
2376 | 340 |
10181
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10160
diff
changeset
|
341 virtual dim_vector dims (void) const { return dim_vector (); } |
4559 | 342 |
5759 | 343 octave_idx_type rows (void) const |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
344 { |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
345 const dim_vector dv = dims (); |
5164 | 346 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
347 return dv(0); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
348 } |
4791 | 349 |
5759 | 350 octave_idx_type columns (void) const |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
351 { |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
352 const dim_vector dv = dims (); |
5602 | 353 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
354 return dv(1); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
355 } |
5604 | 356 |
10652
2f0fbfa4dd23
simplify octave_base_value::ndims
Jaroslav Hajek <highegg@gmail.com>
parents:
10651
diff
changeset
|
357 virtual int ndims (void) const |
21660
53728df3e4c9
maint: for clarity, call ndims() rather than length() on dimension vectors.
Rik <rik@octave.org>
parents:
21244
diff
changeset
|
358 { return dims ().ndims (); } |
4567 | 359 |
5759 | 360 virtual octave_idx_type numel (void) const { return dims ().numel (); } |
4593 | 361 |
5759 | 362 virtual size_t byte_size (void) const { return 0; } |
4915 | 363 |
5759 | 364 virtual octave_idx_type nnz (void) const; |
2376 | 365 |
5759 | 366 virtual octave_idx_type nzmax (void) const; |
367 | |
5900 | 368 virtual octave_idx_type nfields (void) const; |
369 | |
5759 | 370 virtual octave_value reshape (const dim_vector&) const; |
3351 | 371 |
5759 | 372 virtual octave_value permute (const Array<int>& vec, bool = false) const; |
2376 | 373 |
5759 | 374 virtual octave_value resize (const dim_vector&, bool fill = false) const; |
2376 | 375 |
5785 | 376 virtual MatrixType matrix_type (void) const; |
377 | |
378 virtual MatrixType matrix_type (const MatrixType& typ) const; | |
379 | |
5759 | 380 virtual bool is_defined (void) const { return false; } |
4505 | 381 |
29353
715344f405f0
improve handling of nan, infinite value, and empty ranges (bug #59229)
John W. Eaton <jwe@octave.org>
parents:
29234
diff
changeset
|
382 virtual bool is_storable (void) const { return true; } |
715344f405f0
improve handling of nan, infinite value, and empty ranges (bug #59229)
John W. Eaton <jwe@octave.org>
parents:
29234
diff
changeset
|
383 |
23577
80c42f4cca13
maint: Deprecate is_empty and replace with isempty.
Rik <rik@octave.org>
parents:
23576
diff
changeset
|
384 bool isempty (void) const { return (dims ().any_zero ()); } |
2376 | 385 |
24657
dd19b0b9a9a1
allow empty strings to be edited (bug #51848)
John W. Eaton <jwe@octave.org>
parents:
24643
diff
changeset
|
386 bool is_zero_by_zero (void) const { return dims().zero_by_zero (); } |
dd19b0b9a9a1
allow empty strings to be edited (bug #51848)
John W. Eaton <jwe@octave.org>
parents:
24643
diff
changeset
|
387 |
23576
00e518162fda
maint: Deprecate is_cell and replace with iscell.
Rik <rik@octave.org>
parents:
23575
diff
changeset
|
388 virtual bool iscell (void) const { return false; } |
2376 | 389 |
23575
e95738a119da
maint: Deprecate is_cellstr and replace with iscellstr.
Rik <rik@octave.org>
parents:
23502
diff
changeset
|
390 virtual bool iscellstr (void) const { return false; } |
6116 | 391 |
5759 | 392 virtual bool is_real_scalar (void) const { return false; } |
4587 | 393 |
5759 | 394 virtual bool is_real_matrix (void) const { return false; } |
395 | |
396 virtual bool is_complex_scalar (void) const { return false; } | |
2376 | 397 |
5759 | 398 virtual bool is_complex_matrix (void) const { return false; } |
399 | |
5881 | 400 virtual bool is_bool_scalar (void) const { return false; } |
401 | |
5759 | 402 virtual bool is_bool_matrix (void) const { return false; } |
5279 | 403 |
5759 | 404 virtual bool is_char_matrix (void) const { return false; } |
2376 | 405 |
8366
8b1a2555c4e2
implement diagonal matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8345
diff
changeset
|
406 virtual bool is_diag_matrix (void) const { return false; } |
8b1a2555c4e2
implement diagonal matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8345
diff
changeset
|
407 |
8371
c3f7e2549abb
make det & inv aware of diagonal & permutation matrices
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
408 virtual bool is_perm_matrix (void) const { return false; } |
c3f7e2549abb
make det & inv aware of diagonal & permutation matrices
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
409 |
5759 | 410 virtual bool is_string (void) const { return false; } |
2376 | 411 |
5759 | 412 virtual bool is_sq_string (void) const { return false; } |
4643 | 413 |
5759 | 414 virtual bool is_range (void) const { return false; } |
3977 | 415 |
23584
7ed6b258db91
maint: Deprecate is_map and replace with isstruct.
Rik <rik@octave.org>
parents:
23583
diff
changeset
|
416 virtual bool isstruct (void) const { return false; } |
5759 | 417 |
23587
0c468af9dc00
maint: Deprecate is_object and replace with isobject.
Rik <rik@octave.org>
parents:
23586
diff
changeset
|
418 virtual bool isobject (void) const { return false; } |
7336 | 419 |
23683
ffd27f53fc79
make +package function calls work again (bug #51295, #51296)
John W. Eaton <jwe@octave.org>
parents:
23680
diff
changeset
|
420 virtual bool is_classdef_meta (void) const { return false; } |
ffd27f53fc79
make +package function calls work again (bug #51295, #51296)
John W. Eaton <jwe@octave.org>
parents:
23680
diff
changeset
|
421 |
23865
d56c18dc1373
new predicates for classdef_superclass_ref objects
John W. Eaton <jwe@octave.org>
parents:
23843
diff
changeset
|
422 virtual bool is_classdef_superclass_ref (void) const { return false; } |
d56c18dc1373
new predicates for classdef_superclass_ref objects
John W. Eaton <jwe@octave.org>
parents:
23843
diff
changeset
|
423 |
19110
fa48651fbb8a
isstruct for classdef objects should not return true.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19103
diff
changeset
|
424 virtual bool is_classdef_object (void) const { return false; } |
23843
a52eb3f210af
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
23838
diff
changeset
|
425 |
23838
6e0fd7e3c262
Fix argument lookup in '+' package functions (Bug #51532).
Piotr Held <pjheld@gmail.com>
parents:
23795
diff
changeset
|
426 virtual bool is_package (void) const { return false; } |
19110
fa48651fbb8a
isstruct for classdef objects should not return true.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19103
diff
changeset
|
427 |
23578
7b47b7c2d6c7
maint: Deprecate is_java and replace with isjava.
Rik <rik@octave.org>
parents:
23577
diff
changeset
|
428 virtual bool isjava (void) const { return false; } |
15770 | 429 |
5759 | 430 virtual bool is_cs_list (void) const { return false; } |
2376 | 431 |
5759 | 432 virtual bool is_magic_colon (void) const { return false; } |
2376 | 433 |
5759 | 434 virtual bool is_all_va_args (void) const { return false; } |
2376 | 435 |
5759 | 436 virtual octave_value all (int = 0) const; |
437 | |
438 virtual octave_value any (int = 0) const; | |
2376 | 439 |
9685 | 440 virtual builtin_type_t builtin_type (void) const { return btyp_unknown; } |
441 | |
5895 | 442 virtual bool is_double_type (void) const { return false; } |
443 | |
444 virtual bool is_single_type (void) const { return false; } | |
445 | |
23585
570170b6eb09
maint: Deprecate is_float_type and replace with isfloat.
Rik <rik@octave.org>
parents:
23584
diff
changeset
|
446 virtual bool isfloat (void) const { return false; } |
7576 | 447 |
5895 | 448 virtual bool is_int8_type (void) const { return false; } |
449 | |
450 virtual bool is_int16_type (void) const { return false; } | |
451 | |
452 virtual bool is_int32_type (void) const { return false; } | |
453 | |
454 virtual bool is_int64_type (void) const { return false; } | |
455 | |
456 virtual bool is_uint8_type (void) const { return false; } | |
457 | |
458 virtual bool is_uint16_type (void) const { return false; } | |
459 | |
460 virtual bool is_uint32_type (void) const { return false; } | |
461 | |
462 virtual bool is_uint64_type (void) const { return false; } | |
463 | |
23579
c20a0fa91c0c
maint: Deprecate is_bool_type and replace with islogical.
Rik <rik@octave.org>
parents:
23578
diff
changeset
|
464 virtual bool islogical (void) const { return false; } |
3209 | 465 |
23580
2230f9e10fb3
maint: Deprecate is_integer_type and replace with isinteger.
Rik <rik@octave.org>
parents:
23579
diff
changeset
|
466 virtual bool isinteger (void) const { return false; } |
6223 | 467 |
23582
0cc2011d800e
maint: Deprecate is_real_type and replace with isreal.
Rik <rik@octave.org>
parents:
23581
diff
changeset
|
468 virtual bool isreal (void) const { return false; } |
2376 | 469 |
23581
c3075ae020e1
maint: Deprecate is_complex_type and replace with iscomplex.
Rik <rik@octave.org>
parents:
23580
diff
changeset
|
470 virtual bool iscomplex (void) const { return false; } |
2376 | 471 |
472 // Would be nice to get rid of the next four functions: | |
473 | |
5759 | 474 virtual bool is_scalar_type (void) const { return false; } |
2376 | 475 |
5759 | 476 virtual bool is_matrix_type (void) const { return false; } |
2376 | 477 |
23586
f6c5db0a02e7
maint: Deprecate is_numeric_type and replace with isnumeric.
Rik <rik@octave.org>
parents:
23585
diff
changeset
|
478 virtual bool isnumeric (void) const { return false; } |
2376 | 479 |
23583
b7747a2c88b2
maint: Deprecate is_sparse_type and replace with issparse.
Rik <rik@octave.org>
parents:
23582
diff
changeset
|
480 virtual bool issparse (void) const { return false; } |
5631 | 481 |
5759 | 482 virtual bool is_true (void) const { return false; } |
483 | |
28588
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28444
diff
changeset
|
484 virtual bool is_magic_int (void) const { return false; } |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28444
diff
changeset
|
485 |
23589
63950abd2f81
maint: Deprecate is_null_type and replace with isnull.
Rik <rik@octave.org>
parents:
23588
diff
changeset
|
486 virtual bool isnull (void) const { return false; } |
8150
283989f2da9b
make null assignment matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
487 |
5759 | 488 virtual bool is_constant (void) const { return false; } |
2376 | 489 |
5759 | 490 virtual bool is_function_handle (void) const { return false; } |
2376 | 491 |
13241
2a8dcb5b3a00
improve default indexing for objects
John W. Eaton <jwe@octave.org>
parents:
12171
diff
changeset
|
492 virtual bool is_anonymous_function (void) const { return false; } |
2a8dcb5b3a00
improve default indexing for objects
John W. Eaton <jwe@octave.org>
parents:
12171
diff
changeset
|
493 |
5759 | 494 virtual bool is_inline_function (void) const { return false; } |
2974 | 495 |
5759 | 496 virtual bool is_function (void) const { return false; } |
4954 | 497 |
7336 | 498 virtual bool is_user_script (void) const { return false; } |
499 | |
500 virtual bool is_user_function (void) const { return false; } | |
501 | |
7719
87eda1f8faaa
octave_user_code: new base class for octave_user_script and octave_user_function
John W. Eaton <jwe@octave.org>
parents:
7638
diff
changeset
|
502 virtual bool is_user_code (void) const { return false; } |
87eda1f8faaa
octave_user_code: new base class for octave_user_script and octave_user_function
John W. Eaton <jwe@octave.org>
parents:
7638
diff
changeset
|
503 |
5759 | 504 virtual bool is_builtin_function (void) const { return false; } |
2974 | 505 |
5759 | 506 virtual bool is_dld_function (void) const { return false; } |
3325 | 507 |
5864 | 508 virtual bool is_mex_function (void) const { return false; } |
509 | |
7876
8447a5024650
clear subfunctions when clearing parent function
John W. Eaton <jwe@octave.org>
parents:
7789
diff
changeset
|
510 virtual void erase_subfunctions (void) { } |
8447a5024650
clear subfunctions when clearing parent function
John W. Eaton <jwe@octave.org>
parents:
7789
diff
changeset
|
511 |
5759 | 512 virtual short int short_value (bool = false, bool = false) const; |
4254 | 513 |
5759 | 514 virtual unsigned short int ushort_value (bool = false, bool = false) const; |
4254 | 515 |
5759 | 516 virtual int int_value (bool = false, bool = false) const; |
3202 | 517 |
5759 | 518 virtual unsigned int uint_value (bool = false, bool = false) const; |
4254 | 519 |
5759 | 520 virtual int nint_value (bool = false) const; |
3202 | 521 |
5759 | 522 virtual long int long_value (bool = false, bool = false) const; |
4254 | 523 |
5759 | 524 virtual unsigned long int ulong_value (bool = false, bool = false) const; |
4254 | 525 |
16323
e769440b39db
provide int64 extractors for octave_value class
John W. Eaton <jwe@octave.org>
parents:
15770
diff
changeset
|
526 virtual int64_t int64_value (bool = false, bool = false) const; |
e769440b39db
provide int64 extractors for octave_value class
John W. Eaton <jwe@octave.org>
parents:
15770
diff
changeset
|
527 |
e769440b39db
provide int64 extractors for octave_value class
John W. Eaton <jwe@octave.org>
parents:
15770
diff
changeset
|
528 virtual uint64_t uint64_value (bool = false, bool = false) const; |
e769440b39db
provide int64 extractors for octave_value class
John W. Eaton <jwe@octave.org>
parents:
15770
diff
changeset
|
529 |
5759 | 530 virtual double double_value (bool = false) const; |
2376 | 531 |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
532 virtual float float_value (bool = false) const; |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
533 |
5759 | 534 virtual double scalar_value (bool frc_str_conv = false) const |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
535 { return double_value (frc_str_conv); } |
2376 | 536 |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
537 virtual float float_scalar_value (bool frc_str_conv = false) const |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
538 { return float_value (frc_str_conv); } |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
539 |
5759 | 540 virtual Cell cell_value (void) const; |
3351 | 541 |
5759 | 542 virtual Matrix matrix_value (bool = false) const; |
3145 | 543 |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
544 virtual FloatMatrix float_matrix_value (bool = false) const; |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
545 |
5759 | 546 virtual NDArray array_value (bool = false) const; |
4505 | 547 |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
548 virtual FloatNDArray float_array_value (bool = false) const; |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
549 |
5759 | 550 virtual Complex complex_value (bool = false) const; |
2376 | 551 |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
552 virtual FloatComplex float_complex_value (bool = false) const; |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
553 |
5759 | 554 virtual ComplexMatrix complex_matrix_value (bool = false) const; |
2376 | 555 |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
556 virtual FloatComplexMatrix float_complex_matrix_value (bool = false) const; |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
557 |
5759 | 558 virtual ComplexNDArray complex_array_value (bool = false) const; |
4550 | 559 |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
560 virtual FloatComplexNDArray float_complex_array_value (bool = false) const; |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
561 |
5943 | 562 virtual bool bool_value (bool = false) const; |
4550 | 563 |
5943 | 564 virtual boolMatrix bool_matrix_value (bool = false) const; |
4550 | 565 |
5943 | 566 virtual boolNDArray bool_array_value (bool = false) const; |
4550 | 567 |
5759 | 568 virtual charMatrix char_matrix_value (bool force = false) const; |
569 | |
570 virtual charNDArray char_array_value (bool = false) const; | |
2376 | 571 |
5759 | 572 virtual SparseMatrix sparse_matrix_value (bool = false) const; |
4550 | 573 |
5759 | 574 virtual SparseComplexMatrix sparse_complex_matrix_value (bool = false) const; |
5164 | 575 |
5759 | 576 virtual SparseBoolMatrix sparse_bool_matrix_value (bool = false) const; |
5164 | 577 |
8916
a2878ba31a9e
add diag & perm matrix query methods to octave_value
Jaroslav Hajek <highegg@gmail.com>
parents:
8734
diff
changeset
|
578 virtual DiagMatrix diag_matrix_value (bool = false) const; |
a2878ba31a9e
add diag & perm matrix query methods to octave_value
Jaroslav Hajek <highegg@gmail.com>
parents:
8734
diff
changeset
|
579 |
a2878ba31a9e
add diag & perm matrix query methods to octave_value
Jaroslav Hajek <highegg@gmail.com>
parents:
8734
diff
changeset
|
580 virtual FloatDiagMatrix float_diag_matrix_value (bool = false) const; |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
581 |
8916
a2878ba31a9e
add diag & perm matrix query methods to octave_value
Jaroslav Hajek <highegg@gmail.com>
parents:
8734
diff
changeset
|
582 virtual ComplexDiagMatrix complex_diag_matrix_value (bool = false) const; |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
583 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
584 virtual FloatComplexDiagMatrix |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
585 float_complex_diag_matrix_value (bool = false) const; |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
586 |
8916
a2878ba31a9e
add diag & perm matrix query methods to octave_value
Jaroslav Hajek <highegg@gmail.com>
parents:
8734
diff
changeset
|
587 virtual PermMatrix perm_matrix_value (void) const; |
a2878ba31a9e
add diag & perm matrix query methods to octave_value
Jaroslav Hajek <highegg@gmail.com>
parents:
8734
diff
changeset
|
588 |
5759 | 589 virtual octave_int8 int8_scalar_value (void) const; |
5164 | 590 |
5759 | 591 virtual octave_int16 int16_scalar_value (void) const; |
4910 | 592 |
5759 | 593 virtual octave_int32 int32_scalar_value (void) const; |
594 | |
595 virtual octave_int64 int64_scalar_value (void) const; | |
4910 | 596 |
5759 | 597 virtual octave_uint8 uint8_scalar_value (void) const; |
4910 | 598 |
5759 | 599 virtual octave_uint16 uint16_scalar_value (void) const; |
4910 | 600 |
5759 | 601 virtual octave_uint32 uint32_scalar_value (void) const; |
4910 | 602 |
5759 | 603 virtual octave_uint64 uint64_scalar_value (void) const; |
4910 | 604 |
5759 | 605 virtual int8NDArray int8_array_value (void) const; |
4910 | 606 |
5759 | 607 virtual int16NDArray int16_array_value (void) const; |
4910 | 608 |
5759 | 609 virtual int32NDArray int32_array_value (void) const; |
4906 | 610 |
5759 | 611 virtual int64NDArray int64_array_value (void) const; |
4906 | 612 |
5759 | 613 virtual uint8NDArray uint8_array_value (void) const; |
4906 | 614 |
5759 | 615 virtual uint16NDArray uint16_array_value (void) const; |
4906 | 616 |
5759 | 617 virtual uint32NDArray uint32_array_value (void) const; |
4906 | 618 |
5759 | 619 virtual uint64NDArray uint64_array_value (void) const; |
4906 | 620 |
20990
fc9cca99b2de
Deprecate all_strings, replace with string_vector_value.
Rik <rik@octave.org>
parents:
20791
diff
changeset
|
621 virtual string_vector string_vector_value (bool pad = false) const; |
4906 | 622 |
5759 | 623 virtual std::string string_value (bool force = false) const; |
4906 | 624 |
8732 | 625 virtual Array<std::string> cellstr_value (void) const; |
626 | |
28646
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28642
diff
changeset
|
627 virtual octave::range<float> float_range_value (void) const; |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28642
diff
changeset
|
628 |
28638
98192ec1621f
replace Range with range<double>
John W. Eaton <jwe@octave.org>
parents:
28632
diff
changeset
|
629 virtual octave::range<double> range_value (void) const; |
2376 | 630 |
28646
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28642
diff
changeset
|
631 virtual octave::range<octave_int8> int8_range_value (void) const; |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28642
diff
changeset
|
632 |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28642
diff
changeset
|
633 virtual octave::range<octave_int16> int16_range_value (void) const; |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28642
diff
changeset
|
634 |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28642
diff
changeset
|
635 virtual octave::range<octave_int32> int32_range_value (void) const; |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28642
diff
changeset
|
636 |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28642
diff
changeset
|
637 virtual octave::range<octave_int64> int64_range_value (void) const; |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28642
diff
changeset
|
638 |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28642
diff
changeset
|
639 virtual octave::range<octave_uint8> uint8_range_value (void) const; |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28642
diff
changeset
|
640 |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28642
diff
changeset
|
641 virtual octave::range<octave_uint16> uint16_range_value (void) const; |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28642
diff
changeset
|
642 |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28642
diff
changeset
|
643 virtual octave::range<octave_uint32> uint32_range_value (void) const; |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28642
diff
changeset
|
644 |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28642
diff
changeset
|
645 virtual octave::range<octave_uint64> uint64_range_value (void) const; |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28642
diff
changeset
|
646 |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10670
diff
changeset
|
647 virtual octave_map map_value (void) const; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10670
diff
changeset
|
648 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10670
diff
changeset
|
649 virtual octave_scalar_map scalar_map_value (void) const; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10670
diff
changeset
|
650 |
5759 | 651 virtual string_vector map_keys (void) const; |
2376 | 652 |
9151 | 653 virtual size_t nparents (void) const; |
654 | |
655 virtual std::list<std::string> parent_class_name_list (void) const; | |
656 | |
657 virtual string_vector parent_class_names (void) const; | |
9010
f914834836e7
Partial implementation of derived classes using the old form with "@" files.
rtshort@smoketree.phaselocked.com
parents:
8950
diff
changeset
|
658 |
23446
cd4e1ee28716
maint: Use convention 'void * fcn ()' for functions which return pointers.
Rik <rik@octave.org>
parents:
23433
diff
changeset
|
659 virtual octave_base_value * find_parent_class (const std::string&) |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23683
diff
changeset
|
660 { return nullptr; } |
9010
f914834836e7
Partial implementation of derived classes using the old form with "@" files.
rtshort@smoketree.phaselocked.com
parents:
8950
diff
changeset
|
661 |
23446
cd4e1ee28716
maint: Use convention 'void * fcn ()' for functions which return pointers.
Rik <rik@octave.org>
parents:
23433
diff
changeset
|
662 virtual octave_base_value * unique_parent_class (const std::string&) |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23683
diff
changeset
|
663 { return nullptr; } |
9767
0df32e0b2074
fix base class field assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
9743
diff
changeset
|
664 |
19103
56bc1464ec59
Implement "isa" for classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18416
diff
changeset
|
665 virtual bool is_instance_of (const std::string&) const |
56bc1464ec59
Implement "isa" for classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18416
diff
changeset
|
666 { return false; } |
56bc1464ec59
Implement "isa" for classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18416
diff
changeset
|
667 |
23881
5aec653c88e7
new function for accessing classdef objects
John W. Eaton <jwe@octave.org>
parents:
23865
diff
changeset
|
668 virtual octave_classdef * classdef_object_value (bool silent = false); |
5aec653c88e7
new function for accessing classdef objects
John W. Eaton <jwe@octave.org>
parents:
23865
diff
changeset
|
669 |
23446
cd4e1ee28716
maint: Use convention 'void * fcn ()' for functions which return pointers.
Rik <rik@octave.org>
parents:
23433
diff
changeset
|
670 virtual octave_function * function_value (bool silent = false); |
3933 | 671 |
23446
cd4e1ee28716
maint: Use convention 'void * fcn ()' for functions which return pointers.
Rik <rik@octave.org>
parents:
23433
diff
changeset
|
672 virtual octave_user_function * user_function_value (bool silent = false); |
4645 | 673 |
23446
cd4e1ee28716
maint: Use convention 'void * fcn ()' for functions which return pointers.
Rik <rik@octave.org>
parents:
23433
diff
changeset
|
674 virtual octave_user_script * user_script_value (bool silent = false); |
7719
87eda1f8faaa
octave_user_code: new base class for octave_user_script and octave_user_function
John W. Eaton <jwe@octave.org>
parents:
7638
diff
changeset
|
675 |
23446
cd4e1ee28716
maint: Use convention 'void * fcn ()' for functions which return pointers.
Rik <rik@octave.org>
parents:
23433
diff
changeset
|
676 virtual octave_user_code * user_code_value (bool silent = false); |
7719
87eda1f8faaa
octave_user_code: new base class for octave_user_script and octave_user_function
John W. Eaton <jwe@octave.org>
parents:
7638
diff
changeset
|
677 |
23446
cd4e1ee28716
maint: Use convention 'void * fcn ()' for functions which return pointers.
Rik <rik@octave.org>
parents:
23433
diff
changeset
|
678 virtual octave_fcn_handle * fcn_handle_value (bool silent = false); |
4643 | 679 |
5759 | 680 virtual octave_value_list list_value (void) const; |
4343 | 681 |
5759 | 682 virtual octave_value convert_to_str (bool pad = false, bool force = false, |
10313 | 683 char type = '\'') const; |
5759 | 684 virtual octave_value |
685 convert_to_str_internal (bool pad, bool force, char type) const; | |
4933 | 686 |
5759 | 687 virtual void convert_to_row_or_column_vector (void); |
2882 | 688 |
20700
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20681
diff
changeset
|
689 // The following extractor functions don't perform any implicit type |
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20681
diff
changeset
|
690 // conversions. |
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20681
diff
changeset
|
691 |
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20681
diff
changeset
|
692 virtual std::string xstring_value () const; |
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20681
diff
changeset
|
693 |
5759 | 694 virtual bool print_as_scalar (void) const { return false; } |
2376 | 695 |
18416
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18316
diff
changeset
|
696 virtual void print (std::ostream& os, bool pr_as_read_syntax = false); |
2376 | 697 |
5759 | 698 virtual void |
699 print_raw (std::ostream& os, bool pr_as_read_syntax = false) const; | |
4604 | 700 |
5759 | 701 virtual bool |
702 print_name_tag (std::ostream& os, const std::string& name) const; | |
2901 | 703 |
5759 | 704 virtual void |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
705 print_with_name (std::ostream& output_buf, const std::string& name, |
10313 | 706 bool print_padding = true); |
2376 | 707 |
17870 | 708 virtual void short_disp (std::ostream& os) const { os << "..."; } |
16468
0f143f68078d
use signal/slot for updating workspace instead of using event listener
John W. Eaton <jwe@octave.org>
parents:
16323
diff
changeset
|
709 |
24668
d4dd741b2794
new octave_value functions for formatting output
John W. Eaton <jwe@octave.org>
parents:
24657
diff
changeset
|
710 virtual float_display_format get_edit_display_format (void) const; |
d4dd741b2794
new octave_value functions for formatting output
John W. Eaton <jwe@octave.org>
parents:
24657
diff
changeset
|
711 |
d4dd741b2794
new octave_value functions for formatting output
John W. Eaton <jwe@octave.org>
parents:
24657
diff
changeset
|
712 virtual std::string edit_display (const float_display_format&, |
d4dd741b2794
new octave_value functions for formatting output
John W. Eaton <jwe@octave.org>
parents:
24657
diff
changeset
|
713 octave_idx_type, octave_idx_type) const |
24643
78aff6f14227
more variable editor improvements; allow more variable types to be edited
John W. Eaton <jwe@octave.org>
parents:
24624
diff
changeset
|
714 { return "#VAL"; } |
78aff6f14227
more variable editor improvements; allow more variable types to be edited
John W. Eaton <jwe@octave.org>
parents:
24624
diff
changeset
|
715 |
5759 | 716 virtual void print_info (std::ostream& os, const std::string& prefix) const; |
3933 | 717 |
6974 | 718 virtual bool save_ascii (std::ostream& os); |
4687 | 719 |
5759 | 720 virtual bool load_ascii (std::istream& is); |
4687 | 721 |
26399
586413770c7f
pass save_as_floats by value in octave_value save_binary functions
John W. Eaton <jwe@octave.org>
parents:
26377
diff
changeset
|
722 virtual bool save_binary (std::ostream& os, bool save_as_floats); |
4687 | 723 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
724 virtual bool load_binary (std::istream& is, bool swap, |
21739
c4ab2e54f100
use namespace for oct_mach_info class
John W. Eaton <jwe@octave.org>
parents:
21660
diff
changeset
|
725 octave::mach_info::float_format fmt); |
4687 | 726 |
5759 | 727 virtual bool |
19863
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19697
diff
changeset
|
728 save_hdf5 (octave_hdf5_id loc_id, const char *name, bool save_as_floats); |
4687 | 729 |
5759 | 730 virtual bool |
19863
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19697
diff
changeset
|
731 load_hdf5 (octave_hdf5_id loc_id, const char *name); |
4687 | 732 |
5759 | 733 virtual int |
23059
b98ebcd7f11c
move some octave stream classes into octave namespace
John W. Eaton <jwe@octave.org>
parents:
23012
diff
changeset
|
734 write (octave::stream& os, int block_size, |
10313 | 735 oct_data_conv::data_type output_type, int skip, |
21739
c4ab2e54f100
use namespace for oct_mach_info class
John W. Eaton <jwe@octave.org>
parents:
21660
diff
changeset
|
736 octave::mach_info::float_format flt_fmt) const; |
5759 | 737 |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23683
diff
changeset
|
738 virtual void * mex_get_data (void) const { return nullptr; } |
5900 | 739 |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23683
diff
changeset
|
740 virtual octave_idx_type * mex_get_ir (void) const { return nullptr; } |
5900 | 741 |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23683
diff
changeset
|
742 virtual octave_idx_type * mex_get_jc (void) const { return nullptr; } |
5900 | 743 |
28126
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
744 virtual mxArray * as_mxArray (bool interleaved) const; |
5900 | 745 |
7620
36594d5bbe13
Move diag function into the octave_value class
David Bateman <dbateman@free.fr>
parents:
7576
diff
changeset
|
746 virtual octave_value diag (octave_idx_type k = 0) const; |
36594d5bbe13
Move diag function into the octave_value class
David Bateman <dbateman@free.fr>
parents:
7576
diff
changeset
|
747 |
14557
e8e86ae3abbc
make diag (x, m, n) return a proper diagonal matrix object (bug #36099)
John W. Eaton <jwe@octave.org>
parents:
14138
diff
changeset
|
748 virtual octave_value diag (octave_idx_type m, octave_idx_type n) const; |
e8e86ae3abbc
make diag (x, m, n) return a proper diagonal matrix object (bug #36099)
John W. Eaton <jwe@octave.org>
parents:
14138
diff
changeset
|
749 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
750 virtual octave_value sort (octave_idx_type dim = 0, |
10313 | 751 sortmode mode = ASCENDING) const; |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
752 virtual octave_value sort (Array<octave_idx_type> &sidx, |
10313 | 753 octave_idx_type dim = 0, |
754 sortmode mode = ASCENDING) const; | |
7433 | 755 |
23588
0549061d35b9
maint: Deprecate is_sorted and replace with issorted.
Rik <rik@octave.org>
parents:
23587
diff
changeset
|
756 virtual sortmode issorted (sortmode mode = UNSORTED) const; |
8721
e9cb742df9eb
imported patch sort3.diff
Jaroslav Hajek <highegg@gmail.com>
parents:
8676
diff
changeset
|
757 |
8733
3ef774603887
rename all uses of sortrows_idx to sort_rows_idx
John W. Eaton <jwe@octave.org>
parents:
8732
diff
changeset
|
758 virtual Array<octave_idx_type> |
3ef774603887
rename all uses of sortrows_idx to sort_rows_idx
John W. Eaton <jwe@octave.org>
parents:
8732
diff
changeset
|
759 sort_rows_idx (sortmode mode = ASCENDING) const; |
8721
e9cb742df9eb
imported patch sort3.diff
Jaroslav Hajek <highegg@gmail.com>
parents:
8676
diff
changeset
|
760 |
8734
767ed8cc6634
rename internal issorted and issorted_rows functions to is_sorted and is_sorted_rows
John W. Eaton <jwe@octave.org>
parents:
8733
diff
changeset
|
761 virtual sortmode is_sorted_rows (sortmode mode = UNSORTED) const; |
8721
e9cb742df9eb
imported patch sort3.diff
Jaroslav Hajek <highegg@gmail.com>
parents:
8676
diff
changeset
|
762 |
7489
8e4592e49fa7
don't clear locked functions
John W. Eaton <jwe@octave.org>
parents:
7463
diff
changeset
|
763 virtual void lock (void); |
8e4592e49fa7
don't clear locked functions
John W. Eaton <jwe@octave.org>
parents:
7463
diff
changeset
|
764 |
8e4592e49fa7
don't clear locked functions
John W. Eaton <jwe@octave.org>
parents:
7463
diff
changeset
|
765 virtual void unlock (void); |
8e4592e49fa7
don't clear locked functions
John W. Eaton <jwe@octave.org>
parents:
7463
diff
changeset
|
766 |
8e4592e49fa7
don't clear locked functions
John W. Eaton <jwe@octave.org>
parents:
7463
diff
changeset
|
767 virtual bool islocked (void) const { return false; } |
8e4592e49fa7
don't clear locked functions
John W. Eaton <jwe@octave.org>
parents:
7463
diff
changeset
|
768 |
26655
cca0548f7b86
refactor calling object destructor
John W. Eaton <jwe@octave.org>
parents:
26527
diff
changeset
|
769 virtual void call_object_destructor (void) { } |
cca0548f7b86
refactor calling object destructor
John W. Eaton <jwe@octave.org>
parents:
26527
diff
changeset
|
770 |
23680
ef71711f6d64
rework __dump_symbol_table__ function
John W. Eaton <jwe@octave.org>
parents:
23626
diff
changeset
|
771 virtual octave_value dump (void) const; |
7761
5adeea5de26c
symbol table reporting functions
John W. Eaton <jwe@octave.org>
parents:
7740
diff
changeset
|
772 |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21739
diff
changeset
|
773 // Standard mappers. Register new ones here. |
9813
8fa32b527d9a
improve & partially revert previous change
Jaroslav Hajek <highegg@gmail.com>
parents:
9812
diff
changeset
|
774 enum unary_mapper_t |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
775 { |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
776 umap_abs, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
777 umap_acos, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
778 umap_acosh, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
779 umap_angle, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
780 umap_arg, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
781 umap_asin, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
782 umap_asinh, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
783 umap_atan, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
784 umap_atanh, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
785 umap_cbrt, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
786 umap_ceil, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
787 umap_conj, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
788 umap_cos, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
789 umap_cosh, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
790 umap_erf, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
791 umap_erfinv, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
792 umap_erfcinv, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
793 umap_erfc, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
794 umap_erfcx, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
795 umap_erfi, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
796 umap_dawson, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
797 umap_exp, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
798 umap_expm1, |
21013
7f4c6d594e3d
Finish renaming mapper function finite to isfinite.
Rik <rik@octave.org>
parents:
20990
diff
changeset
|
799 umap_isfinite, |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
800 umap_fix, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
801 umap_floor, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
802 umap_gamma, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
803 umap_imag, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
804 umap_isinf, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
805 umap_isna, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
806 umap_isnan, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
807 umap_lgamma, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
808 umap_log, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
809 umap_log2, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
810 umap_log10, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
811 umap_log1p, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
812 umap_real, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
813 umap_round, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
814 umap_roundb, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
815 umap_signum, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
816 umap_sin, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
817 umap_sinh, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
818 umap_sqrt, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
819 umap_tan, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
820 umap_tanh, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
821 umap_xisalnum, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
822 umap_xisalpha, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
823 umap_xisascii, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
824 umap_xiscntrl, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
825 umap_xisdigit, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
826 umap_xisgraph, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
827 umap_xislower, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
828 umap_xisprint, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
829 umap_xispunct, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
830 umap_xisspace, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
831 umap_xisupper, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
832 umap_xisxdigit, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
833 umap_xsignbit, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
834 umap_xtolower, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
835 umap_xtoupper, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
836 umap_unknown, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
837 num_unary_mappers = umap_unknown |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
838 }; |
9813
8fa32b527d9a
improve & partially revert previous change
Jaroslav Hajek <highegg@gmail.com>
parents:
9812
diff
changeset
|
839 |
9812
f80c566bc751
improve unary mapper system
Jaroslav Hajek <highegg@gmail.com>
parents:
9790
diff
changeset
|
840 virtual octave_value map (unary_mapper_t) const; |
7503
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7489
diff
changeset
|
841 |
10670
654fbde5dceb
make cellfun's fast scalar collection mechanism public
Jaroslav Hajek <highegg@gmail.com>
parents:
10652
diff
changeset
|
842 // These are fast indexing & assignment shortcuts for extracting |
654fbde5dceb
make cellfun's fast scalar collection mechanism public
Jaroslav Hajek <highegg@gmail.com>
parents:
10652
diff
changeset
|
843 // or inserting a single scalar from/to an array. |
654fbde5dceb
make cellfun's fast scalar collection mechanism public
Jaroslav Hajek <highegg@gmail.com>
parents:
10652
diff
changeset
|
844 |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21739
diff
changeset
|
845 // Extract the n-th element, aka val(n). Result is undefined if val is not |
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21739
diff
changeset
|
846 // an array type or n is out of range. Never error. |
10670
654fbde5dceb
make cellfun's fast scalar collection mechanism public
Jaroslav Hajek <highegg@gmail.com>
parents:
10652
diff
changeset
|
847 virtual octave_value |
654fbde5dceb
make cellfun's fast scalar collection mechanism public
Jaroslav Hajek <highegg@gmail.com>
parents:
10652
diff
changeset
|
848 fast_elem_extract (octave_idx_type n) const; |
654fbde5dceb
make cellfun's fast scalar collection mechanism public
Jaroslav Hajek <highegg@gmail.com>
parents:
10652
diff
changeset
|
849 |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21739
diff
changeset
|
850 // Assign the n-th element, aka val(n) = x. Returns false if val is not an |
10670
654fbde5dceb
make cellfun's fast scalar collection mechanism public
Jaroslav Hajek <highegg@gmail.com>
parents:
10652
diff
changeset
|
851 // array type, x is not a matching scalar type, or n is out of range. |
654fbde5dceb
make cellfun's fast scalar collection mechanism public
Jaroslav Hajek <highegg@gmail.com>
parents:
10652
diff
changeset
|
852 // Never error. |
654fbde5dceb
make cellfun's fast scalar collection mechanism public
Jaroslav Hajek <highegg@gmail.com>
parents:
10652
diff
changeset
|
853 virtual bool |
654fbde5dceb
make cellfun's fast scalar collection mechanism public
Jaroslav Hajek <highegg@gmail.com>
parents:
10652
diff
changeset
|
854 fast_elem_insert (octave_idx_type n, const octave_value& x); |
654fbde5dceb
make cellfun's fast scalar collection mechanism public
Jaroslav Hajek <highegg@gmail.com>
parents:
10652
diff
changeset
|
855 |
20097
1f9ed81bd173
maint: Fix spelling and grammar mistakes in docs and comments (bug #44878)
Rafael Laboissiere <rafael@laboissiere.net>
parents:
19863
diff
changeset
|
856 // This is a helper for the above, to be overridden in scalar types. The |
10670
654fbde5dceb
make cellfun's fast scalar collection mechanism public
Jaroslav Hajek <highegg@gmail.com>
parents:
10652
diff
changeset
|
857 // whole point is to handle the insertion efficiently with just *two* VM |
654fbde5dceb
make cellfun's fast scalar collection mechanism public
Jaroslav Hajek <highegg@gmail.com>
parents:
10652
diff
changeset
|
858 // calls, which is basically the theoretical minimum. |
654fbde5dceb
make cellfun's fast scalar collection mechanism public
Jaroslav Hajek <highegg@gmail.com>
parents:
10652
diff
changeset
|
859 virtual bool |
654fbde5dceb
make cellfun's fast scalar collection mechanism public
Jaroslav Hajek <highegg@gmail.com>
parents:
10652
diff
changeset
|
860 fast_elem_insert_self (void *where, builtin_type_t btyp) const; |
654fbde5dceb
make cellfun's fast scalar collection mechanism public
Jaroslav Hajek <highegg@gmail.com>
parents:
10652
diff
changeset
|
861 |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21739
diff
changeset
|
862 // Grab the reference count. For use by jit. |
14903 | 863 void |
864 grab (void) | |
865 { | |
866 ++count; | |
867 } | |
868 | |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21739
diff
changeset
|
869 // Release the reference count. For use by jit. |
14903 | 870 void |
871 release (void) | |
872 { | |
873 if (--count == 0) | |
874 delete this; | |
875 } | |
876 | |
5759 | 877 protected: |
878 | |
879 // This should only be called for derived types. | |
880 | |
29234
853e60367cb6
Set API tags in files in libinterp/octave-value (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28646
diff
changeset
|
881 OCTINTERP_API octave_value |
853e60367cb6
Set API tags in files in libinterp/octave-value (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28646
diff
changeset
|
882 numeric_assign (const std::string& type, |
853e60367cb6
Set API tags in files in libinterp/octave-value (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28646
diff
changeset
|
883 const std::list<octave_value_list>& idx, |
853e60367cb6
Set API tags in files in libinterp/octave-value (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28646
diff
changeset
|
884 const octave_value& rhs); |
5759 | 885 |
886 void reset_indent_level (void) const | |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
887 { curr_print_indent_level = 0; } |
5759 | 888 |
889 void increment_indent_level (void) const | |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
890 { curr_print_indent_level += 2; } |
5759 | 891 |
892 void decrement_indent_level (void) const | |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
893 { curr_print_indent_level -= 2; } |
5759 | 894 |
895 int current_print_indent_level (void) const | |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
896 { return curr_print_indent_level; } |
5759 | 897 |
29234
853e60367cb6
Set API tags in files in libinterp/octave-value (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28646
diff
changeset
|
898 OCTINTERP_API void indent (std::ostream& os) const; |
5759 | 899 |
29234
853e60367cb6
Set API tags in files in libinterp/octave-value (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28646
diff
changeset
|
900 OCTINTERP_API void newline (std::ostream& os) const; |
5759 | 901 |
29234
853e60367cb6
Set API tags in files in libinterp/octave-value (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28646
diff
changeset
|
902 OCTINTERP_API void reset (void) const; |
5759 | 903 |
904 // A reference count. | |
9521 | 905 // NOTE: the declaration is octave_idx_type because with 64-bit indexing, |
906 // it is well possible to have more than MAX_INT copies of a single value | |
907 // (think of an empty cell array with >2G elements). | |
23012
27e4ec3b0b49
move octave_refcount inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
908 octave::refcount<octave_idx_type> count; |
4944 | 909 |
29234
853e60367cb6
Set API tags in files in libinterp/octave-value (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28646
diff
changeset
|
910 OCTINTERP_API static const char * get_umap_name (unary_mapper_t); |
2376 | 911 |
29234
853e60367cb6
Set API tags in files in libinterp/octave-value (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28646
diff
changeset
|
912 OCTINTERP_API void warn_load (const char *type) const; |
853e60367cb6
Set API tags in files in libinterp/octave-value (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28646
diff
changeset
|
913 OCTINTERP_API void warn_save (const char *type) const; |
19863
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19697
diff
changeset
|
914 |
15501
814c4b0d5c49
make numeric mapper functions throw error for char args (bug #37535)
John W. Eaton <jwe@octave.org>
parents:
15487
diff
changeset
|
915 private: |
9813
8fa32b527d9a
improve & partially revert previous change
Jaroslav Hajek <highegg@gmail.com>
parents:
9812
diff
changeset
|
916 |
29234
853e60367cb6
Set API tags in files in libinterp/octave-value (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28646
diff
changeset
|
917 OCTINTERP_API void wrong_type_arg_error (void) const; |
20700
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20681
diff
changeset
|
918 |
5759 | 919 static int curr_print_indent_level; |
920 static bool beginning_of_line; | |
921 | |
922 DECLARE_OV_BASE_TYPEID_FUNCTIONS_AND_DATA | |
2376 | 923 }; |
924 | |
7193 | 925 // TRUE means to perform automatic sparse to real mutation if there |
926 // is memory to be saved | |
10612
09e244649f50
Export symbol Vsparse_auto_mutate
Michael Goffioul <michael.goffioul@gmail.com>
parents:
10544
diff
changeset
|
927 extern OCTINTERP_API bool Vsparse_auto_mutate; |
7193 | 928 |
18314
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18130
diff
changeset
|
929 // Utility function to convert C++ arguments used in subsref/subsasgn into an |
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18130
diff
changeset
|
930 // octave_value_list object that can be used to call a function/method in the |
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18130
diff
changeset
|
931 // interpreter. |
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18130
diff
changeset
|
932 extern OCTINTERP_API octave_value |
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18130
diff
changeset
|
933 make_idx_args (const std::string& type, |
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18130
diff
changeset
|
934 const std::list<octave_value_list>& idx, |
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18130
diff
changeset
|
935 const std::string& who); |
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18130
diff
changeset
|
936 |
26525
0d3eca5955dc
Backed out changeset 920a4ad8043b (bug #54995)
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
937 // Tells whether some regular octave_value_base methods are being called from |
0d3eca5955dc
Backed out changeset 920a4ad8043b (bug #54995)
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
938 // within the "builtin" function. |
0d3eca5955dc
Backed out changeset 920a4ad8043b (bug #54995)
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
939 extern OCTINTERP_API bool called_from_builtin (void); |
0d3eca5955dc
Backed out changeset 920a4ad8043b (bug #54995)
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
940 |
2376 | 941 #endif |