Mercurial > octave
annotate libinterp/octave-value/ov.cc @ 31608:23664317f0d3
maint: merge stable to default
author | Rik <rik@octave.org> |
---|---|
date | Thu, 01 Dec 2022 20:05:44 -0800 |
parents | dfa5d9c3ae72 aac27ad79be6 |
children | 5f11de0e7440 |
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 // |
30564
796f54d4ddbf
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
30423
diff
changeset
|
3 // Copyright (C) 1996-2022 The Octave Project Developers |
27923
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 |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21660
diff
changeset
|
26 #if defined (HAVE_CONFIG_H) |
21301
40de9f8f23a6
Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents:
21295
diff
changeset
|
27 # include "config.h" |
2376 | 28 #endif |
29 | |
30142
a4d1c080e445
fix construction of ranges with extreme integer values (bug #61132)
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
30 #include <cmath> |
a4d1c080e445
fix construction of ranges with extreme integer values (bug #61132)
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
31 |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
32 #include <type_traits> |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
33 |
4970 | 34 #include "data-conv.h" |
35 #include "quit.h" | |
2942 | 36 #include "str-vec.h" |
2376 | 37 |
20940
48b2ad5ee801
maint: Rename oct-obj.[cc|h] to ovl.[cc|h] for clarity.
Rik <rik@octave.org>
parents:
20939
diff
changeset
|
38 #include "ovl.h" |
4944 | 39 #include "oct-stream.h" |
2376 | 40 #include "ov.h" |
41 #include "ov-base.h" | |
2825 | 42 #include "ov-bool.h" |
43 #include "ov-bool-mat.h" | |
3351 | 44 #include "ov-cell.h" |
2376 | 45 #include "ov-scalar.h" |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
46 #include "ov-float.h" |
2376 | 47 #include "ov-re-mat.h" |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
48 #include "ov-flt-re-mat.h" |
8366
8b1a2555c4e2
implement diagonal matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8346
diff
changeset
|
49 #include "ov-re-diag.h" |
8b1a2555c4e2
implement diagonal matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8346
diff
changeset
|
50 #include "ov-flt-re-diag.h" |
30852
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
51 #include "ov-legacy-range.h" |
8367
445d27d79f4e
support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
52 #include "ov-perm.h" |
5164 | 53 #include "ov-bool-sparse.h" |
54 #include "ov-cx-sparse.h" | |
55 #include "ov-re-sparse.h" | |
4901 | 56 #include "ov-int8.h" |
57 #include "ov-int16.h" | |
58 #include "ov-int32.h" | |
59 #include "ov-int64.h" | |
60 #include "ov-uint8.h" | |
61 #include "ov-uint16.h" | |
62 #include "ov-uint32.h" | |
63 #include "ov-uint64.h" | |
2376 | 64 #include "ov-complex.h" |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
65 #include "ov-flt-complex.h" |
2376 | 66 #include "ov-cx-mat.h" |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
67 #include "ov-flt-cx-mat.h" |
8366
8b1a2555c4e2
implement diagonal matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8346
diff
changeset
|
68 #include "ov-cx-diag.h" |
8b1a2555c4e2
implement diagonal matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8346
diff
changeset
|
69 #include "ov-flt-cx-diag.h" |
2376 | 70 #include "ov-ch-mat.h" |
71 #include "ov-str-mat.h" | |
72 #include "ov-range.h" | |
73 #include "ov-struct.h" | |
7336 | 74 #include "ov-class.h" |
15037
56b8eb7c9c04
improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents:
14861
diff
changeset
|
75 #include "ov-classdef.h" |
14015 | 76 #include "ov-oncleanup.h" |
3977 | 77 #include "ov-cs-list.h" |
2376 | 78 #include "ov-colon.h" |
2974 | 79 #include "ov-builtin.h" |
4649 | 80 #include "ov-dld-fcn.h" |
2974 | 81 #include "ov-usr-fcn.h" |
4342 | 82 #include "ov-fcn-handle.h" |
2376 | 83 #include "ov-typeinfo.h" |
28588
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28519
diff
changeset
|
84 #include "ov-magic-int.h" |
8150
283989f2da9b
make null assignment matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
8039
diff
changeset
|
85 #include "ov-null-mat.h" |
10325
8b3cfc1288e2
implement lazy index conversions
Jaroslav Hajek <highegg@gmail.com>
parents:
10315
diff
changeset
|
86 #include "ov-lazy-idx.h" |
15754
bf77f7f66bdf
register octave_java type at Octave startup
John W. Eaton <jwe@octave.org>
parents:
15467
diff
changeset
|
87 #include "ov-java.h" |
2376 | 88 |
89 #include "defun.h" | |
2880 | 90 #include "error.h" |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
21078
diff
changeset
|
91 #include "errwarn.h" |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23589
diff
changeset
|
92 #include "interpreter-private.h" |
2376 | 93 #include "pager.h" |
4005 | 94 #include "parse.h" |
24668
d4dd741b2794
new octave_value functions for formatting output
John W. Eaton <jwe@octave.org>
parents:
24565
diff
changeset
|
95 #include "pr-flt-fmt.h" |
2376 | 96 #include "pr-output.h" |
7336 | 97 #include "symtab.h" |
2376 | 98 #include "utils.h" |
99 #include "variables.h" | |
100 | |
2477 | 101 // We are likely to have a lot of octave_value objects to allocate, so |
102 // make the grow_size large. | |
103 | |
29982
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
104 // If TRUE, create special space-optimized diagonal matrix objects. |
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
105 |
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
106 static bool Voptimize_diagonal_matrix = true; |
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
107 |
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
108 // If TRUE, create special space-optimized permutation matrix objects. |
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
109 |
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
110 static bool Voptimize_permutation_matrix = true; |
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
111 |
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
112 // If TRUE, create special space-optimized range objects. |
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
113 |
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
114 static bool Voptimize_range = true; |
19394
b39cbe9f3bb0
allow ranges to be disabled
John W. Eaton <jwe@octave.org>
parents:
19391
diff
changeset
|
115 |
5775 | 116 // FIXME |
2880 | 117 |
2376 | 118 // Octave's value type. |
119 | |
21573
f3f8e1d3e399
avoid mulitple definitions of static function-scope vars (bug #47372)
John W. Eaton <jwe@octave.org>
parents:
20163
diff
changeset
|
120 octave_base_value * |
f3f8e1d3e399
avoid mulitple definitions of static function-scope vars (bug #47372)
John W. Eaton <jwe@octave.org>
parents:
20163
diff
changeset
|
121 octave_value::nil_rep (void) |
f3f8e1d3e399
avoid mulitple definitions of static function-scope vars (bug #47372)
John W. Eaton <jwe@octave.org>
parents:
20163
diff
changeset
|
122 { |
f3f8e1d3e399
avoid mulitple definitions of static function-scope vars (bug #47372)
John W. Eaton <jwe@octave.org>
parents:
20163
diff
changeset
|
123 static octave_base_value nr; |
f3f8e1d3e399
avoid mulitple definitions of static function-scope vars (bug #47372)
John W. Eaton <jwe@octave.org>
parents:
20163
diff
changeset
|
124 return &nr; |
f3f8e1d3e399
avoid mulitple definitions of static function-scope vars (bug #47372)
John W. Eaton <jwe@octave.org>
parents:
20163
diff
changeset
|
125 } |
f3f8e1d3e399
avoid mulitple definitions of static function-scope vars (bug #47372)
John W. Eaton <jwe@octave.org>
parents:
20163
diff
changeset
|
126 |
3536 | 127 std::string |
3203 | 128 octave_value::unary_op_as_string (unary_op op) |
129 { | |
130 switch (op) | |
131 { | |
3533 | 132 case op_not: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
133 return "!"; |
3203 | 134 |
4965 | 135 case op_uplus: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
136 return "+"; |
4965 | 137 |
3533 | 138 case op_uminus: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
139 return "-"; |
3203 | 140 |
3533 | 141 case op_transpose: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
142 return ".'"; |
3203 | 143 |
3533 | 144 case op_hermitian: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
145 return "'"; |
3203 | 146 |
3533 | 147 case op_incr: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
148 return "++"; |
3203 | 149 |
3533 | 150 case op_decr: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
151 return "--"; |
3203 | 152 |
153 default: | |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
154 return "<unknown>"; |
3203 | 155 } |
156 } | |
157 | |
3536 | 158 std::string |
7336 | 159 octave_value::unary_op_fcn_name (unary_op op) |
160 { | |
161 switch (op) | |
162 { | |
163 case op_not: | |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
164 return "not"; |
7336 | 165 |
166 case op_uplus: | |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
167 return "uplus"; |
7336 | 168 |
169 case op_uminus: | |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
170 return "uminus"; |
7336 | 171 |
172 case op_transpose: | |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
173 return "transpose"; |
7336 | 174 |
175 case op_hermitian: | |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
176 return "ctranspose"; |
7336 | 177 |
178 default: | |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
179 return "<unknown>"; |
7336 | 180 } |
181 } | |
182 | |
183 std::string | |
2376 | 184 octave_value::binary_op_as_string (binary_op op) |
185 { | |
186 switch (op) | |
187 { | |
3533 | 188 case op_add: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
189 return "+"; |
2376 | 190 |
3533 | 191 case op_sub: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
192 return "-"; |
2376 | 193 |
3533 | 194 case op_mul: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
195 return "*"; |
2376 | 196 |
3533 | 197 case op_div: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
198 return "/"; |
2376 | 199 |
3533 | 200 case op_pow: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
201 return "^"; |
2376 | 202 |
3533 | 203 case op_ldiv: |
23804
8057d3f0673d
Use C++11 raw string literals to avoid escaping backslashes in strings.
Rik <rik@octave.org>
parents:
23795
diff
changeset
|
204 return R"(\)"; |
2903 | 205 |
3533 | 206 case op_lt: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
207 return "<"; |
2376 | 208 |
3533 | 209 case op_le: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
210 return "<="; |
2376 | 211 |
3533 | 212 case op_eq: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
213 return "=="; |
2376 | 214 |
3533 | 215 case op_ge: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
216 return ">="; |
2376 | 217 |
3533 | 218 case op_gt: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
219 return ">"; |
2376 | 220 |
3533 | 221 case op_ne: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
222 return "!="; |
2376 | 223 |
3533 | 224 case op_el_mul: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
225 return ".*"; |
2376 | 226 |
3533 | 227 case op_el_div: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
228 return "./"; |
2376 | 229 |
3533 | 230 case op_el_pow: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
231 return ".^"; |
2376 | 232 |
3533 | 233 case op_el_ldiv: |
23804
8057d3f0673d
Use C++11 raw string literals to avoid escaping backslashes in strings.
Rik <rik@octave.org>
parents:
23795
diff
changeset
|
234 return R"(.\)"; |
2376 | 235 |
3533 | 236 case op_el_and: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
237 return "&"; |
2376 | 238 |
3533 | 239 case op_el_or: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
240 return "|"; |
2376 | 241 |
3533 | 242 case op_struct_ref: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
243 return "."; |
2376 | 244 |
245 default: | |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
246 return "<unknown>"; |
2376 | 247 } |
248 } | |
249 | |
3536 | 250 std::string |
7336 | 251 octave_value::binary_op_fcn_name (binary_op op) |
252 { | |
253 switch (op) | |
254 { | |
255 case op_add: | |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
256 return "plus"; |
7336 | 257 |
258 case op_sub: | |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
259 return "minus"; |
7336 | 260 |
261 case op_mul: | |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
262 return "mtimes"; |
7336 | 263 |
264 case op_div: | |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
265 return "mrdivide"; |
7336 | 266 |
267 case op_pow: | |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
268 return "mpower"; |
7336 | 269 |
270 case op_ldiv: | |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
271 return "mldivide"; |
7336 | 272 |
273 case op_lt: | |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
274 return "lt"; |
7336 | 275 |
276 case op_le: | |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
277 return "le"; |
7336 | 278 |
279 case op_eq: | |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
280 return "eq"; |
7336 | 281 |
282 case op_ge: | |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
283 return "ge"; |
7336 | 284 |
285 case op_gt: | |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
286 return "gt"; |
7336 | 287 |
288 case op_ne: | |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
289 return "ne"; |
7336 | 290 |
291 case op_el_mul: | |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
292 return "times"; |
7336 | 293 |
294 case op_el_div: | |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
295 return "rdivide"; |
7336 | 296 |
297 case op_el_pow: | |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
298 return "power"; |
7336 | 299 |
300 case op_el_ldiv: | |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
301 return "ldivide"; |
7336 | 302 |
303 case op_el_and: | |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
304 return "and"; |
7336 | 305 |
306 case op_el_or: | |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
307 return "or"; |
7336 | 308 |
309 default: | |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
310 return "<unknown>"; |
7336 | 311 } |
312 } | |
313 | |
314 std::string | |
7800
5861b95e9879
support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
315 octave_value::binary_op_fcn_name (compound_binary_op op) |
5861b95e9879
support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
316 { |
5861b95e9879
support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
317 switch (op) |
5861b95e9879
support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
318 { |
5861b95e9879
support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
319 case op_trans_mul: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
320 return "transtimes"; |
7800
5861b95e9879
support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
321 |
5861b95e9879
support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
322 case op_mul_trans: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
323 return "timestrans"; |
7800
5861b95e9879
support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
324 |
5861b95e9879
support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
325 case op_herm_mul: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
326 return "hermtimes"; |
7800
5861b95e9879
support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
327 |
5861b95e9879
support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
328 case op_mul_herm: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
329 return "timesherm"; |
7800
5861b95e9879
support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
330 |
9661
afcf852256d2
optimize / and '\ for triangular matrices
Jaroslav Hajek <highegg@gmail.com>
parents:
9608
diff
changeset
|
331 case op_trans_ldiv: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
332 return "transldiv"; |
9661
afcf852256d2
optimize / and '\ for triangular matrices
Jaroslav Hajek <highegg@gmail.com>
parents:
9608
diff
changeset
|
333 |
afcf852256d2
optimize / and '\ for triangular matrices
Jaroslav Hajek <highegg@gmail.com>
parents:
9608
diff
changeset
|
334 case op_herm_ldiv: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
335 return "hermldiv"; |
9661
afcf852256d2
optimize / and '\ for triangular matrices
Jaroslav Hajek <highegg@gmail.com>
parents:
9608
diff
changeset
|
336 |
8982
dc6bda6f9994
implement compound logical ops
Jaroslav Hajek <highegg@gmail.com>
parents:
8960
diff
changeset
|
337 case op_el_and_not: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
338 return "andnot"; |
8982
dc6bda6f9994
implement compound logical ops
Jaroslav Hajek <highegg@gmail.com>
parents:
8960
diff
changeset
|
339 |
dc6bda6f9994
implement compound logical ops
Jaroslav Hajek <highegg@gmail.com>
parents:
8960
diff
changeset
|
340 case op_el_or_not: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
341 return "ornot"; |
8982
dc6bda6f9994
implement compound logical ops
Jaroslav Hajek <highegg@gmail.com>
parents:
8960
diff
changeset
|
342 |
dc6bda6f9994
implement compound logical ops
Jaroslav Hajek <highegg@gmail.com>
parents:
8960
diff
changeset
|
343 case op_el_not_and: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
344 return "notand"; |
8982
dc6bda6f9994
implement compound logical ops
Jaroslav Hajek <highegg@gmail.com>
parents:
8960
diff
changeset
|
345 |
dc6bda6f9994
implement compound logical ops
Jaroslav Hajek <highegg@gmail.com>
parents:
8960
diff
changeset
|
346 case op_el_not_or: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
347 return "notor"; |
8982
dc6bda6f9994
implement compound logical ops
Jaroslav Hajek <highegg@gmail.com>
parents:
8960
diff
changeset
|
348 |
7800
5861b95e9879
support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
349 default: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
350 return "<unknown>"; |
7800
5861b95e9879
support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
351 } |
5861b95e9879
support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
352 } |
5861b95e9879
support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
353 |
5861b95e9879
support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
354 std::string |
2880 | 355 octave_value::assign_op_as_string (assign_op op) |
356 { | |
357 switch (op) | |
358 { | |
3533 | 359 case op_asn_eq: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
360 return "="; |
2880 | 361 |
3533 | 362 case op_add_eq: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
363 return "+="; |
2880 | 364 |
3533 | 365 case op_sub_eq: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
366 return "-="; |
2880 | 367 |
3533 | 368 case op_mul_eq: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
369 return "*="; |
2880 | 370 |
3533 | 371 case op_div_eq: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
372 return "/="; |
2880 | 373 |
3533 | 374 case op_ldiv_eq: |
23804
8057d3f0673d
Use C++11 raw string literals to avoid escaping backslashes in strings.
Rik <rik@octave.org>
parents:
23795
diff
changeset
|
375 return R"(\=)"; |
3204 | 376 |
4018 | 377 case op_pow_eq: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
378 return "^="; |
2903 | 379 |
3533 | 380 case op_el_mul_eq: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
381 return ".*="; |
2880 | 382 |
3533 | 383 case op_el_div_eq: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
384 return "./="; |
2880 | 385 |
3533 | 386 case op_el_ldiv_eq: |
23804
8057d3f0673d
Use C++11 raw string literals to avoid escaping backslashes in strings.
Rik <rik@octave.org>
parents:
23795
diff
changeset
|
387 return R"(.\=)"; |
3204 | 388 |
4018 | 389 case op_el_pow_eq: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
390 return ".^="; |
4018 | 391 |
3533 | 392 case op_el_and_eq: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
393 return "&="; |
2880 | 394 |
3533 | 395 case op_el_or_eq: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
396 return "|="; |
2880 | 397 |
398 default: | |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
399 return "<unknown>"; |
2880 | 400 } |
401 } | |
402 | |
15140
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
403 octave_value::binary_op |
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
404 octave_value::assign_op_to_binary_op (assign_op op) |
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
405 { |
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
406 switch (op) |
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
407 { |
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
408 case op_add_eq: |
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
409 return op_add; |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
410 |
15140
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
411 case op_sub_eq: |
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
412 return op_sub; |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
413 |
15140
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
414 case op_mul_eq: |
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
415 return op_mul; |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
416 |
15140
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
417 case op_div_eq: |
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
418 return op_div; |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
419 |
15140
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
420 case op_ldiv_eq: |
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
421 return op_ldiv; |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
422 |
15140
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
423 case op_pow_eq: |
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
424 return op_pow; |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
425 |
15140
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
426 case op_el_mul_eq: |
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
427 return op_el_mul; |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
428 |
15140
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
429 case op_el_div_eq: |
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
430 return op_el_div; |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
431 |
15140
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
432 case op_el_ldiv_eq: |
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
433 return op_el_ldiv; |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
434 |
15140
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
435 case op_el_pow_eq: |
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
436 return op_el_pow; |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
437 |
15140
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
438 case op_el_and_eq: |
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
439 return op_el_and; |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
440 |
15140
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
441 case op_el_or_eq: |
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
442 return op_el_or; |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
443 |
15140
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
444 default: |
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
445 return unknown_binary_op; |
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
446 } |
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
447 } |
6ea86e1d0f5f
Support +=, -=, *=, ect. in JIT
Max Brister <max@2bass.com>
parents:
15057
diff
changeset
|
448 |
9607
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
449 octave_value::assign_op |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
450 octave_value::binary_op_to_assign_op (binary_op op) |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
451 { |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
452 switch (op) |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
453 { |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
454 case op_add: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
455 return op_add_eq; |
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
456 |
9607
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
457 case op_sub: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
458 return op_sub_eq; |
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
459 |
9607
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
460 case op_mul: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
461 return op_mul_eq; |
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
462 |
9607
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
463 case op_div: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
464 return op_div_eq; |
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
465 |
9607
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
466 case op_el_mul: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
467 return op_el_mul_eq; |
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
468 |
9607
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
469 case op_el_div: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
470 return op_el_div_eq; |
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
471 |
9607
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
472 case op_el_and: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
473 return op_el_and_eq; |
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
474 |
9607
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
475 case op_el_or: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
476 return op_el_or_eq; |
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
477 |
9607
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
478 default: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
479 return unknown_assign_op; |
9607
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
480 } |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
481 } |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
482 |
4254 | 483 octave_value::octave_value (short int i) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
484 : m_rep (new octave_scalar (i)) |
22417
48c00363dc74
maint: Use '{ }' for empty function bodies in C++.
Rik <rik@octave.org>
parents:
22390
diff
changeset
|
485 { } |
4254 | 486 |
487 octave_value::octave_value (unsigned short int i) | |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
488 : m_rep (new octave_scalar (i)) |
22417
48c00363dc74
maint: Use '{ }' for empty function bodies in C++.
Rik <rik@octave.org>
parents:
22390
diff
changeset
|
489 { } |
4254 | 490 |
4233 | 491 octave_value::octave_value (int i) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
492 : m_rep (new octave_scalar (i)) |
22417
48c00363dc74
maint: Use '{ }' for empty function bodies in C++.
Rik <rik@octave.org>
parents:
22390
diff
changeset
|
493 { } |
4233 | 494 |
4254 | 495 octave_value::octave_value (unsigned int i) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
496 : m_rep (new octave_scalar (i)) |
22417
48c00363dc74
maint: Use '{ }' for empty function bodies in C++.
Rik <rik@octave.org>
parents:
22390
diff
changeset
|
497 { } |
4254 | 498 |
499 octave_value::octave_value (long int i) | |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
500 : m_rep (new octave_scalar (i)) |
22417
48c00363dc74
maint: Use '{ }' for empty function bodies in C++.
Rik <rik@octave.org>
parents:
22390
diff
changeset
|
501 { } |
4254 | 502 |
503 octave_value::octave_value (unsigned long int i) | |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
504 : m_rep (new octave_scalar (i)) |
22417
48c00363dc74
maint: Use '{ }' for empty function bodies in C++.
Rik <rik@octave.org>
parents:
22390
diff
changeset
|
505 { } |
4254 | 506 |
21354
06d15e4e611a
move public data type macros to octave-config.h
John W. Eaton <jwe@octave.org>
parents:
21317
diff
changeset
|
507 #if defined (OCTAVE_HAVE_LONG_LONG_INT) |
4353 | 508 octave_value::octave_value (long long int i) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
509 : m_rep (new octave_scalar (i)) |
22417
48c00363dc74
maint: Use '{ }' for empty function bodies in C++.
Rik <rik@octave.org>
parents:
22390
diff
changeset
|
510 { } |
4353 | 511 #endif |
512 | |
21354
06d15e4e611a
move public data type macros to octave-config.h
John W. Eaton <jwe@octave.org>
parents:
21317
diff
changeset
|
513 #if defined (OCTAVE_HAVE_UNSIGNED_LONG_LONG_INT) |
4353 | 514 octave_value::octave_value (unsigned long long int i) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
515 : m_rep (new octave_scalar (i)) |
22417
48c00363dc74
maint: Use '{ }' for empty function bodies in C++.
Rik <rik@octave.org>
parents:
22390
diff
changeset
|
516 { } |
4353 | 517 #endif |
518 | |
21730
30c53770f47e
use namespace for system time classes
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
519 octave_value::octave_value (octave::sys::time t) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
520 : m_rep (new octave_scalar (t.double_value ())) |
22417
48c00363dc74
maint: Use '{ }' for empty function bodies in C++.
Rik <rik@octave.org>
parents:
22390
diff
changeset
|
521 { } |
4254 | 522 |
2376 | 523 octave_value::octave_value (double d) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
524 : m_rep (new octave_scalar (d)) |
22417
48c00363dc74
maint: Use '{ }' for empty function bodies in C++.
Rik <rik@octave.org>
parents:
22390
diff
changeset
|
525 { } |
2376 | 526 |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
527 octave_value::octave_value (float d) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
528 : m_rep (new octave_float_scalar (d)) |
22417
48c00363dc74
maint: Use '{ }' for empty function bodies in C++.
Rik <rik@octave.org>
parents:
22390
diff
changeset
|
529 { } |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
530 |
4587 | 531 octave_value::octave_value (const Cell& c, bool is_csl) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
532 : m_rep (is_csl |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
533 ? dynamic_cast<octave_base_value *> (new octave_cs_list (c)) |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
534 : dynamic_cast<octave_base_value *> (new octave_cell (c))) |
22417
48c00363dc74
maint: Use '{ }' for empty function bodies in C++.
Rik <rik@octave.org>
parents:
22390
diff
changeset
|
535 { } |
3351 | 536 |
9732
b4fdfee405b5
remove ArrayN<T> + fix nonhom. diag-scalar ops
Jaroslav Hajek <highegg@gmail.com>
parents:
9728
diff
changeset
|
537 octave_value::octave_value (const Array<octave_value>& a, bool is_csl) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
538 : m_rep (is_csl |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
539 ? dynamic_cast<octave_base_value *> (new octave_cs_list (Cell (a))) |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
540 : dynamic_cast<octave_base_value *> (new octave_cell (Cell (a)))) |
22417
48c00363dc74
maint: Use '{ }' for empty function bodies in C++.
Rik <rik@octave.org>
parents:
22390
diff
changeset
|
541 { } |
5147 | 542 |
5785 | 543 octave_value::octave_value (const Matrix& m, const MatrixType& t) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
544 : m_rep (new octave_matrix (m, t)) |
2423 | 545 { |
546 maybe_mutate (); | |
547 } | |
2376 | 548 |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
549 octave_value::octave_value (const FloatMatrix& m, const MatrixType& t) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
550 : m_rep (new octave_float_matrix (m, t)) |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
551 { |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
552 maybe_mutate (); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
553 } |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
554 |
4507 | 555 octave_value::octave_value (const NDArray& a) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
556 : m_rep (new octave_matrix (a)) |
4478 | 557 { |
558 maybe_mutate (); | |
559 } | |
560 | |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
561 octave_value::octave_value (const FloatNDArray& a) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
562 : m_rep (new octave_float_matrix (a)) |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
563 { |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
564 maybe_mutate (); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
565 } |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
566 |
9732
b4fdfee405b5
remove ArrayN<T> + fix nonhom. diag-scalar ops
Jaroslav Hajek <highegg@gmail.com>
parents:
9728
diff
changeset
|
567 octave_value::octave_value (const Array<double>& a) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
568 : m_rep (new octave_matrix (a)) |
4911 | 569 { |
570 maybe_mutate (); | |
571 } | |
572 | |
9732
b4fdfee405b5
remove ArrayN<T> + fix nonhom. diag-scalar ops
Jaroslav Hajek <highegg@gmail.com>
parents:
9728
diff
changeset
|
573 octave_value::octave_value (const Array<float>& a) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
574 : m_rep (new octave_float_matrix (a)) |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
575 { |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
576 maybe_mutate (); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
577 } |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
578 |
15428
fd5c0159b588
Fix diag handling of diagvectors (bug #37411)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
579 octave_value::octave_value (const DiagArray2<double>& d) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
580 : m_rep (Voptimize_diagonal_matrix |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
581 ? dynamic_cast<octave_base_value *> (new octave_diag_matrix (d)) |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
582 : dynamic_cast<octave_base_value *> (new octave_matrix (Matrix (d)))) |
15428
fd5c0159b588
Fix diag handling of diagvectors (bug #37411)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
583 { |
fd5c0159b588
Fix diag handling of diagvectors (bug #37411)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
584 maybe_mutate (); |
fd5c0159b588
Fix diag handling of diagvectors (bug #37411)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
585 } |
fd5c0159b588
Fix diag handling of diagvectors (bug #37411)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
586 |
fd5c0159b588
Fix diag handling of diagvectors (bug #37411)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
587 octave_value::octave_value (const DiagArray2<float>& d) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
588 : m_rep (Voptimize_diagonal_matrix |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
589 ? dynamic_cast<octave_base_value *> (new octave_float_diag_matrix (d)) |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
590 : dynamic_cast<octave_base_value *> (new octave_float_matrix (FloatMatrix (d)))) |
15428
fd5c0159b588
Fix diag handling of diagvectors (bug #37411)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
591 { |
fd5c0159b588
Fix diag handling of diagvectors (bug #37411)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
592 maybe_mutate (); |
fd5c0159b588
Fix diag handling of diagvectors (bug #37411)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
593 } |
fd5c0159b588
Fix diag handling of diagvectors (bug #37411)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
594 |
fd5c0159b588
Fix diag handling of diagvectors (bug #37411)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
595 octave_value::octave_value (const DiagArray2<Complex>& d) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
596 : m_rep (Voptimize_diagonal_matrix |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
597 ? dynamic_cast<octave_base_value *> (new octave_complex_diag_matrix (d)) |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
598 : dynamic_cast<octave_base_value *> (new octave_complex_matrix (ComplexMatrix (d)))) |
15428
fd5c0159b588
Fix diag handling of diagvectors (bug #37411)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
599 { |
fd5c0159b588
Fix diag handling of diagvectors (bug #37411)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
600 maybe_mutate (); |
fd5c0159b588
Fix diag handling of diagvectors (bug #37411)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
601 } |
fd5c0159b588
Fix diag handling of diagvectors (bug #37411)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
602 |
fd5c0159b588
Fix diag handling of diagvectors (bug #37411)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
603 octave_value::octave_value (const DiagArray2<FloatComplex>& d) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
604 : m_rep (Voptimize_diagonal_matrix |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
605 ? dynamic_cast<octave_base_value *> (new octave_float_complex_diag_matrix (d)) |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
606 : dynamic_cast<octave_base_value *> (new octave_float_complex_matrix (FloatComplexMatrix (d)))) |
15428
fd5c0159b588
Fix diag handling of diagvectors (bug #37411)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
607 { |
fd5c0159b588
Fix diag handling of diagvectors (bug #37411)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
608 maybe_mutate (); |
fd5c0159b588
Fix diag handling of diagvectors (bug #37411)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
609 } |
fd5c0159b588
Fix diag handling of diagvectors (bug #37411)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
610 |
2376 | 611 octave_value::octave_value (const DiagMatrix& d) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
612 : m_rep (Voptimize_diagonal_matrix |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
613 ? dynamic_cast<octave_base_value *> (new octave_diag_matrix (d)) |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
614 : dynamic_cast<octave_base_value *> (new octave_matrix (Matrix (d)))) |
2423 | 615 { |
616 maybe_mutate (); | |
617 } | |
2376 | 618 |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
619 octave_value::octave_value (const FloatDiagMatrix& d) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
620 : m_rep (Voptimize_diagonal_matrix |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
621 ? dynamic_cast<octave_base_value *> (new octave_float_diag_matrix (d)) |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
622 : dynamic_cast<octave_base_value *> (new octave_float_matrix (FloatMatrix (d)))) |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
623 { |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
624 maybe_mutate (); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
625 } |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
626 |
3418 | 627 octave_value::octave_value (const RowVector& v) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
628 : m_rep (new octave_matrix (v)) |
2423 | 629 { |
630 maybe_mutate (); | |
631 } | |
2376 | 632 |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
633 octave_value::octave_value (const FloatRowVector& v) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
634 : m_rep (new octave_float_matrix (v)) |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
635 { |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
636 maybe_mutate (); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
637 } |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
638 |
3418 | 639 octave_value::octave_value (const ColumnVector& v) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
640 : m_rep (new octave_matrix (v)) |
2423 | 641 { |
642 maybe_mutate (); | |
643 } | |
2376 | 644 |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
645 octave_value::octave_value (const FloatColumnVector& v) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
646 : m_rep (new octave_float_matrix (v)) |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
647 { |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
648 maybe_mutate (); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
649 } |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
650 |
2376 | 651 octave_value::octave_value (const Complex& C) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
652 : m_rep (new octave_complex (C)) |
2423 | 653 { |
654 maybe_mutate (); | |
655 } | |
2376 | 656 |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
657 octave_value::octave_value (const FloatComplex& C) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
658 : m_rep (new octave_float_complex (C)) |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
659 { |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
660 maybe_mutate (); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
661 } |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
662 |
5785 | 663 octave_value::octave_value (const ComplexMatrix& m, const MatrixType& t) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
664 : m_rep (new octave_complex_matrix (m, t)) |
2423 | 665 { |
666 maybe_mutate (); | |
667 } | |
2376 | 668 |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
669 octave_value::octave_value (const FloatComplexMatrix& m, const MatrixType& t) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
670 : m_rep (new octave_float_complex_matrix (m, t)) |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
671 { |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
672 maybe_mutate (); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
673 } |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
674 |
4513 | 675 octave_value::octave_value (const ComplexNDArray& a) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
676 : m_rep (new octave_complex_matrix (a)) |
4478 | 677 { |
678 maybe_mutate (); | |
679 } | |
680 | |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
681 octave_value::octave_value (const FloatComplexNDArray& a) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
682 : m_rep (new octave_float_complex_matrix (a)) |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
683 { |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
684 maybe_mutate (); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
685 } |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
686 |
9732
b4fdfee405b5
remove ArrayN<T> + fix nonhom. diag-scalar ops
Jaroslav Hajek <highegg@gmail.com>
parents:
9728
diff
changeset
|
687 octave_value::octave_value (const Array<Complex>& a) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
688 : m_rep (new octave_complex_matrix (a)) |
4911 | 689 { |
690 maybe_mutate (); | |
691 } | |
692 | |
9732
b4fdfee405b5
remove ArrayN<T> + fix nonhom. diag-scalar ops
Jaroslav Hajek <highegg@gmail.com>
parents:
9728
diff
changeset
|
693 octave_value::octave_value (const Array<FloatComplex>& a) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
694 : m_rep (new octave_float_complex_matrix (a)) |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
695 { |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
696 maybe_mutate (); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
697 } |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
698 |
2376 | 699 octave_value::octave_value (const ComplexDiagMatrix& d) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
700 : m_rep (Voptimize_diagonal_matrix |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
701 ? dynamic_cast<octave_base_value *> (new octave_complex_diag_matrix (d)) |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
702 : dynamic_cast<octave_base_value *> (new octave_complex_matrix (ComplexMatrix (d)))) |
2423 | 703 { |
704 maybe_mutate (); | |
705 } | |
2376 | 706 |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
707 octave_value::octave_value (const FloatComplexDiagMatrix& d) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
708 : m_rep (Voptimize_diagonal_matrix |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
709 ? dynamic_cast<octave_base_value *> (new octave_float_complex_diag_matrix (d)) |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
710 : dynamic_cast<octave_base_value *> (new octave_float_complex_matrix (FloatComplexMatrix (d)))) |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
711 { |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
712 maybe_mutate (); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
713 } |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
714 |
3418 | 715 octave_value::octave_value (const ComplexRowVector& v) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
716 : m_rep (new octave_complex_matrix (v)) |
2423 | 717 { |
718 maybe_mutate (); | |
719 } | |
2376 | 720 |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
721 octave_value::octave_value (const FloatComplexRowVector& v) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
722 : m_rep (new octave_float_complex_matrix (v)) |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
723 { |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
724 maybe_mutate (); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
725 } |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
726 |
3418 | 727 octave_value::octave_value (const ComplexColumnVector& v) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
728 : m_rep (new octave_complex_matrix (v)) |
2423 | 729 { |
730 maybe_mutate (); | |
731 } | |
2376 | 732 |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
733 octave_value::octave_value (const FloatComplexColumnVector& v) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
734 : m_rep (new octave_float_complex_matrix (v)) |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
735 { |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
736 maybe_mutate (); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
737 } |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
738 |
8960
93f18f166aba
remove float perm matrices
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
739 octave_value::octave_value (const PermMatrix& p) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
740 : m_rep (Voptimize_permutation_matrix |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
741 ? dynamic_cast<octave_base_value *> (new octave_perm_matrix (p)) |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
742 : dynamic_cast<octave_base_value *> (new octave_matrix (Matrix (p)))) |
8367
445d27d79f4e
support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
743 { |
8960
93f18f166aba
remove float perm matrices
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
744 maybe_mutate (); |
8367
445d27d79f4e
support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
745 } |
445d27d79f4e
support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
746 |
2825 | 747 octave_value::octave_value (bool b) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
748 : m_rep (new octave_bool (b)) |
22417
48c00363dc74
maint: Use '{ }' for empty function bodies in C++.
Rik <rik@octave.org>
parents:
22390
diff
changeset
|
749 { } |
2825 | 750 |
5785 | 751 octave_value::octave_value (const boolMatrix& bm, const MatrixType& t) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
752 : m_rep (new octave_bool_matrix (bm, t)) |
2825 | 753 { |
754 maybe_mutate (); | |
755 } | |
756 | |
4513 | 757 octave_value::octave_value (const boolNDArray& bnda) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
758 : m_rep (new octave_bool_matrix (bnda)) |
4513 | 759 { |
760 maybe_mutate (); | |
761 } | |
762 | |
9732
b4fdfee405b5
remove ArrayN<T> + fix nonhom. diag-scalar ops
Jaroslav Hajek <highegg@gmail.com>
parents:
9728
diff
changeset
|
763 octave_value::octave_value (const Array<bool>& bnda) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
764 : m_rep (new octave_bool_matrix (bnda)) |
7433 | 765 { |
766 maybe_mutate (); | |
767 } | |
768 | |
5279 | 769 octave_value::octave_value (char c, char type) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
770 : m_rep (type == '"' |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
771 ? new octave_char_matrix_dq_str (c) |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
772 : new octave_char_matrix_sq_str (c)) |
3189 | 773 { |
774 maybe_mutate (); | |
775 } | |
776 | |
5279 | 777 octave_value::octave_value (const char *s, char type) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
778 : m_rep (type == '"' |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
779 ? new octave_char_matrix_dq_str (s) |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
780 : new octave_char_matrix_sq_str (s)) |
2423 | 781 { |
782 maybe_mutate (); | |
783 } | |
2376 | 784 |
5279 | 785 octave_value::octave_value (const std::string& s, char type) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
786 : m_rep (type == '"' |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
787 ? new octave_char_matrix_dq_str (s) |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
788 : new octave_char_matrix_sq_str (s)) |
2423 | 789 { |
790 maybe_mutate (); | |
791 } | |
2376 | 792 |
5279 | 793 octave_value::octave_value (const string_vector& s, char type) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
794 : m_rep (type == '"' |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
795 ? new octave_char_matrix_dq_str (s) |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
796 : new octave_char_matrix_sq_str (s)) |
2423 | 797 { |
798 maybe_mutate (); | |
799 } | |
2376 | 800 |
9689
34d6f005db4b
eliminate is_string argument from octave_value character array constructors
John W. Eaton <jwe@octave.org>
parents:
9661
diff
changeset
|
801 octave_value::octave_value (const charMatrix& chm, char type) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
802 : m_rep (type == '"' |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
803 ? new octave_char_matrix_dq_str (chm) |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
804 : new octave_char_matrix_sq_str (chm)) |
9689
34d6f005db4b
eliminate is_string argument from octave_value character array constructors
John W. Eaton <jwe@octave.org>
parents:
9661
diff
changeset
|
805 { |
34d6f005db4b
eliminate is_string argument from octave_value character array constructors
John W. Eaton <jwe@octave.org>
parents:
9661
diff
changeset
|
806 maybe_mutate (); |
34d6f005db4b
eliminate is_string argument from octave_value character array constructors
John W. Eaton <jwe@octave.org>
parents:
9661
diff
changeset
|
807 } |
34d6f005db4b
eliminate is_string argument from octave_value character array constructors
John W. Eaton <jwe@octave.org>
parents:
9661
diff
changeset
|
808 |
34d6f005db4b
eliminate is_string argument from octave_value character array constructors
John W. Eaton <jwe@octave.org>
parents:
9661
diff
changeset
|
809 octave_value::octave_value (const charNDArray& chm, char type) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
810 : m_rep (type == '"' |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
811 ? new octave_char_matrix_dq_str (chm) |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
812 : new octave_char_matrix_sq_str (chm)) |
2409 | 813 { |
4513 | 814 maybe_mutate (); |
815 } | |
2376 | 816 |
9732
b4fdfee405b5
remove ArrayN<T> + fix nonhom. diag-scalar ops
Jaroslav Hajek <highegg@gmail.com>
parents:
9728
diff
changeset
|
817 octave_value::octave_value (const Array<char>& chm, char type) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
818 : m_rep (type == '"' |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
819 ? new octave_char_matrix_dq_str (chm) |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
820 : new octave_char_matrix_sq_str (chm)) |
4513 | 821 { |
2423 | 822 maybe_mutate (); |
2409 | 823 } |
2376 | 824 |
23433
c9fab0bc983e
maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents:
23352
diff
changeset
|
825 octave_value::octave_value (const SparseMatrix& m, const MatrixType& t) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
826 : m_rep (new octave_sparse_matrix (m, t)) |
5164 | 827 { |
828 maybe_mutate (); | |
829 } | |
830 | |
23433
c9fab0bc983e
maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents:
23352
diff
changeset
|
831 octave_value::octave_value (const Sparse<double>& m, const MatrixType& t) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
832 : m_rep (new octave_sparse_matrix (m, t)) |
6863 | 833 { |
834 maybe_mutate (); | |
835 } | |
836 | |
23433
c9fab0bc983e
maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents:
23352
diff
changeset
|
837 octave_value::octave_value (const SparseComplexMatrix& m, const MatrixType& t) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
838 : m_rep (new octave_sparse_complex_matrix (m, t)) |
5164 | 839 { |
840 maybe_mutate (); | |
841 } | |
842 | |
23433
c9fab0bc983e
maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents:
23352
diff
changeset
|
843 octave_value::octave_value (const Sparse<Complex>& m, const MatrixType& t) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
844 : m_rep (new octave_sparse_complex_matrix (m, t)) |
6863 | 845 { |
846 maybe_mutate (); | |
847 } | |
848 | |
23433
c9fab0bc983e
maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents:
23352
diff
changeset
|
849 octave_value::octave_value (const SparseBoolMatrix& bm, const MatrixType& t) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
850 : m_rep (new octave_sparse_bool_matrix (bm, t)) |
5164 | 851 { |
852 maybe_mutate (); | |
853 } | |
854 | |
23433
c9fab0bc983e
maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents:
23352
diff
changeset
|
855 octave_value::octave_value (const Sparse<bool>& bm, const MatrixType& t) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
856 : m_rep (new octave_sparse_bool_matrix (bm, t)) |
7433 | 857 { |
858 maybe_mutate (); | |
859 } | |
860 | |
4901 | 861 octave_value::octave_value (const octave_int8& i) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
862 : m_rep (new octave_int8_scalar (i)) |
4901 | 863 { |
864 maybe_mutate (); | |
865 } | |
866 | |
867 octave_value::octave_value (const octave_uint8& i) | |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
868 : m_rep (new octave_uint8_scalar (i)) |
4901 | 869 { |
870 maybe_mutate (); | |
871 } | |
872 | |
873 octave_value::octave_value (const octave_int16& i) | |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
874 : m_rep (new octave_int16_scalar (i)) |
4901 | 875 { |
876 maybe_mutate (); | |
877 } | |
878 | |
879 octave_value::octave_value (const octave_uint16& i) | |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
880 : m_rep (new octave_uint16_scalar (i)) |
4901 | 881 { |
882 maybe_mutate (); | |
883 } | |
884 | |
885 octave_value::octave_value (const octave_int32& i) | |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
886 : m_rep (new octave_int32_scalar (i)) |
4901 | 887 { |
888 maybe_mutate (); | |
889 } | |
890 | |
891 octave_value::octave_value (const octave_uint32& i) | |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
892 : m_rep (new octave_uint32_scalar (i)) |
4901 | 893 { |
894 maybe_mutate (); | |
895 } | |
896 | |
897 octave_value::octave_value (const octave_int64& i) | |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
898 : m_rep (new octave_int64_scalar (i)) |
4901 | 899 { |
900 maybe_mutate (); | |
901 } | |
902 | |
903 octave_value::octave_value (const octave_uint64& i) | |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
904 : m_rep (new octave_uint64_scalar (i)) |
4901 | 905 { |
906 maybe_mutate (); | |
907 } | |
908 | |
909 octave_value::octave_value (const int8NDArray& inda) | |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
910 : m_rep (new octave_int8_matrix (inda)) |
4901 | 911 { |
912 maybe_mutate (); | |
913 } | |
914 | |
9732
b4fdfee405b5
remove ArrayN<T> + fix nonhom. diag-scalar ops
Jaroslav Hajek <highegg@gmail.com>
parents:
9728
diff
changeset
|
915 octave_value::octave_value (const Array<octave_int8>& inda) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
916 : m_rep (new octave_int8_matrix (inda)) |
7064 | 917 { |
918 maybe_mutate (); | |
919 } | |
920 | |
4901 | 921 octave_value::octave_value (const uint8NDArray& inda) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
922 : m_rep (new octave_uint8_matrix (inda)) |
4901 | 923 { |
924 maybe_mutate (); | |
925 } | |
926 | |
9732
b4fdfee405b5
remove ArrayN<T> + fix nonhom. diag-scalar ops
Jaroslav Hajek <highegg@gmail.com>
parents:
9728
diff
changeset
|
927 octave_value::octave_value (const Array<octave_uint8>& inda) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
928 : m_rep (new octave_uint8_matrix (inda)) |
7064 | 929 { |
930 maybe_mutate (); | |
931 } | |
932 | |
4901 | 933 octave_value::octave_value (const int16NDArray& inda) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
934 : m_rep (new octave_int16_matrix (inda)) |
4901 | 935 { |
936 maybe_mutate (); | |
937 } | |
938 | |
9732
b4fdfee405b5
remove ArrayN<T> + fix nonhom. diag-scalar ops
Jaroslav Hajek <highegg@gmail.com>
parents:
9728
diff
changeset
|
939 octave_value::octave_value (const Array<octave_int16>& inda) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
940 : m_rep (new octave_int16_matrix (inda)) |
7064 | 941 { |
942 maybe_mutate (); | |
943 } | |
944 | |
4901 | 945 octave_value::octave_value (const uint16NDArray& inda) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
946 : m_rep (new octave_uint16_matrix (inda)) |
4901 | 947 { |
948 maybe_mutate (); | |
949 } | |
950 | |
9732
b4fdfee405b5
remove ArrayN<T> + fix nonhom. diag-scalar ops
Jaroslav Hajek <highegg@gmail.com>
parents:
9728
diff
changeset
|
951 octave_value::octave_value (const Array<octave_uint16>& inda) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
952 : m_rep (new octave_uint16_matrix (inda)) |
7064 | 953 { |
954 maybe_mutate (); | |
955 } | |
956 | |
4901 | 957 octave_value::octave_value (const int32NDArray& inda) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
958 : m_rep (new octave_int32_matrix (inda)) |
4901 | 959 { |
960 maybe_mutate (); | |
961 } | |
962 | |
9732
b4fdfee405b5
remove ArrayN<T> + fix nonhom. diag-scalar ops
Jaroslav Hajek <highegg@gmail.com>
parents:
9728
diff
changeset
|
963 octave_value::octave_value (const Array<octave_int32>& inda) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
964 : m_rep (new octave_int32_matrix (inda)) |
7064 | 965 { |
966 maybe_mutate (); | |
967 } | |
968 | |
4901 | 969 octave_value::octave_value (const uint32NDArray& inda) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
970 : m_rep (new octave_uint32_matrix (inda)) |
4901 | 971 { |
972 maybe_mutate (); | |
973 } | |
974 | |
9732
b4fdfee405b5
remove ArrayN<T> + fix nonhom. diag-scalar ops
Jaroslav Hajek <highegg@gmail.com>
parents:
9728
diff
changeset
|
975 octave_value::octave_value (const Array<octave_uint32>& inda) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
976 : m_rep (new octave_uint32_matrix (inda)) |
7064 | 977 { |
978 maybe_mutate (); | |
979 } | |
980 | |
4901 | 981 octave_value::octave_value (const int64NDArray& inda) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
982 : m_rep (new octave_int64_matrix (inda)) |
4901 | 983 { |
984 maybe_mutate (); | |
985 } | |
986 | |
9732
b4fdfee405b5
remove ArrayN<T> + fix nonhom. diag-scalar ops
Jaroslav Hajek <highegg@gmail.com>
parents:
9728
diff
changeset
|
987 octave_value::octave_value (const Array<octave_int64>& inda) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
988 : m_rep (new octave_int64_matrix (inda)) |
7064 | 989 { |
990 maybe_mutate (); | |
991 } | |
992 | |
4901 | 993 octave_value::octave_value (const uint64NDArray& inda) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
994 : m_rep (new octave_uint64_matrix (inda)) |
4901 | 995 { |
996 maybe_mutate (); | |
997 } | |
998 | |
9732
b4fdfee405b5
remove ArrayN<T> + fix nonhom. diag-scalar ops
Jaroslav Hajek <highegg@gmail.com>
parents:
9728
diff
changeset
|
999 octave_value::octave_value (const Array<octave_uint64>& inda) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1000 : m_rep (new octave_uint64_matrix (inda)) |
7064 | 1001 { |
1002 maybe_mutate (); | |
1003 } | |
1004 | |
9351
e2344f4af0cb
autocache indices returned from find et al.
Jaroslav Hajek <highegg@gmail.com>
parents:
9329
diff
changeset
|
1005 octave_value::octave_value (const Array<octave_idx_type>& inda, bool zero_based, |
e2344f4af0cb
autocache indices returned from find et al.
Jaroslav Hajek <highegg@gmail.com>
parents:
9329
diff
changeset
|
1006 bool cache_index) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1007 : m_rep (new octave_matrix (inda, zero_based, cache_index)) |
9351
e2344f4af0cb
autocache indices returned from find et al.
Jaroslav Hajek <highegg@gmail.com>
parents:
9329
diff
changeset
|
1008 { |
e2344f4af0cb
autocache indices returned from find et al.
Jaroslav Hajek <highegg@gmail.com>
parents:
9329
diff
changeset
|
1009 maybe_mutate (); |
e2344f4af0cb
autocache indices returned from find et al.
Jaroslav Hajek <highegg@gmail.com>
parents:
9329
diff
changeset
|
1010 } |
e2344f4af0cb
autocache indices returned from find et al.
Jaroslav Hajek <highegg@gmail.com>
parents:
9329
diff
changeset
|
1011 |
29569
29a1f8fd8ee6
move idx_vector classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29478
diff
changeset
|
1012 octave_value::octave_value (const octave::idx_vector& idx, bool lazy) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1013 : m_rep () |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
9368
diff
changeset
|
1014 { |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
9368
diff
changeset
|
1015 double scalar; |
28638
98192ec1621f
replace Range with range<double>
John W. Eaton <jwe@octave.org>
parents:
28633
diff
changeset
|
1016 octave::range<double> range; |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
9368
diff
changeset
|
1017 NDArray array; |
9894
83bd7f34f9da
improve idx_vector->octave_value conversion
Jaroslav Hajek <highegg@gmail.com>
parents:
9879
diff
changeset
|
1018 boolNDArray mask; |
29569
29a1f8fd8ee6
move idx_vector classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29478
diff
changeset
|
1019 octave::idx_vector::idx_class_type idx_class; |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
9368
diff
changeset
|
1020 |
10325
8b3cfc1288e2
implement lazy index conversions
Jaroslav Hajek <highegg@gmail.com>
parents:
10315
diff
changeset
|
1021 if (lazy) |
8b3cfc1288e2
implement lazy index conversions
Jaroslav Hajek <highegg@gmail.com>
parents:
10315
diff
changeset
|
1022 { |
8b3cfc1288e2
implement lazy index conversions
Jaroslav Hajek <highegg@gmail.com>
parents:
10315
diff
changeset
|
1023 // Only make lazy indices out of ranges and index vectors. |
8b3cfc1288e2
implement lazy index conversions
Jaroslav Hajek <highegg@gmail.com>
parents:
10315
diff
changeset
|
1024 switch (idx.idx_class ()) |
8b3cfc1288e2
implement lazy index conversions
Jaroslav Hajek <highegg@gmail.com>
parents:
10315
diff
changeset
|
1025 { |
29569
29a1f8fd8ee6
move idx_vector classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29478
diff
changeset
|
1026 case octave::idx_vector::class_range: |
29a1f8fd8ee6
move idx_vector classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29478
diff
changeset
|
1027 case octave::idx_vector::class_vector: |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1028 m_rep = new octave_lazy_index (idx); |
10325
8b3cfc1288e2
implement lazy index conversions
Jaroslav Hajek <highegg@gmail.com>
parents:
10315
diff
changeset
|
1029 maybe_mutate (); |
8b3cfc1288e2
implement lazy index conversions
Jaroslav Hajek <highegg@gmail.com>
parents:
10315
diff
changeset
|
1030 return; |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1031 |
10325
8b3cfc1288e2
implement lazy index conversions
Jaroslav Hajek <highegg@gmail.com>
parents:
10315
diff
changeset
|
1032 default: |
8b3cfc1288e2
implement lazy index conversions
Jaroslav Hajek <highegg@gmail.com>
parents:
10315
diff
changeset
|
1033 break; |
8b3cfc1288e2
implement lazy index conversions
Jaroslav Hajek <highegg@gmail.com>
parents:
10315
diff
changeset
|
1034 } |
8b3cfc1288e2
implement lazy index conversions
Jaroslav Hajek <highegg@gmail.com>
parents:
10315
diff
changeset
|
1035 } |
8b3cfc1288e2
implement lazy index conversions
Jaroslav Hajek <highegg@gmail.com>
parents:
10315
diff
changeset
|
1036 |
9894
83bd7f34f9da
improve idx_vector->octave_value conversion
Jaroslav Hajek <highegg@gmail.com>
parents:
9879
diff
changeset
|
1037 idx.unconvert (idx_class, scalar, range, array, mask); |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
9368
diff
changeset
|
1038 |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
9368
diff
changeset
|
1039 switch (idx_class) |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
9368
diff
changeset
|
1040 { |
29569
29a1f8fd8ee6
move idx_vector classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29478
diff
changeset
|
1041 case octave::idx_vector::class_colon: |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1042 m_rep = new octave_magic_colon (); |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
9368
diff
changeset
|
1043 break; |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1044 |
29569
29a1f8fd8ee6
move idx_vector classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29478
diff
changeset
|
1045 case octave::idx_vector::class_range: |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1046 m_rep = new octave_range (range, idx); |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
9368
diff
changeset
|
1047 break; |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1048 |
29569
29a1f8fd8ee6
move idx_vector classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29478
diff
changeset
|
1049 case octave::idx_vector::class_scalar: |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1050 m_rep = new octave_scalar (scalar); |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
9368
diff
changeset
|
1051 break; |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1052 |
29569
29a1f8fd8ee6
move idx_vector classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29478
diff
changeset
|
1053 case octave::idx_vector::class_vector: |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1054 m_rep = new octave_matrix (array, idx); |
9894
83bd7f34f9da
improve idx_vector->octave_value conversion
Jaroslav Hajek <highegg@gmail.com>
parents:
9879
diff
changeset
|
1055 break; |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1056 |
29569
29a1f8fd8ee6
move idx_vector classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29478
diff
changeset
|
1057 case octave::idx_vector::class_mask: |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1058 m_rep = new octave_bool_matrix (mask, idx); |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
9368
diff
changeset
|
1059 break; |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1060 |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
9368
diff
changeset
|
1061 default: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1062 panic_impossible (); |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
9368
diff
changeset
|
1063 break; |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
9368
diff
changeset
|
1064 } |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
9368
diff
changeset
|
1065 |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
9368
diff
changeset
|
1066 // FIXME: needed? |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
9368
diff
changeset
|
1067 maybe_mutate (); |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
9368
diff
changeset
|
1068 } |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
9368
diff
changeset
|
1069 |
9725 | 1070 octave_value::octave_value (const Array<std::string>& cellstr) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1071 : m_rep (new octave_cell (cellstr)) |
9725 | 1072 { |
1073 maybe_mutate (); | |
1074 } | |
1075 | |
30835
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
1076 octave_value::octave_value (const octave::range<double>& r, bool force_range) |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
1077 : m_rep (force_range || Voptimize_range |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
1078 ? dynamic_cast<octave_base_value *> (new ov_range<double> (r)) |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
1079 : dynamic_cast<octave_base_value *> (new octave_matrix (r.array_value ()))) |
28639
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1080 { |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1081 maybe_mutate (); |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1082 } |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1083 |
30835
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
1084 // For now, disable all but range<double>. |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
1085 |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
1086 #if 0 |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
1087 |
28639
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1088 octave_value::octave_value (const octave::range<float>& r, bool force_range) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1089 : m_rep (force_range || Voptimize_range |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1090 ? dynamic_cast<octave_base_value *> (new ov_range<float> (r)) |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1091 : dynamic_cast<octave_base_value *> (new octave_float_matrix (r.array_value ()))) |
28639
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1092 { |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1093 maybe_mutate (); |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1094 } |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1095 |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1096 octave_value::octave_value (const octave::range<octave_int8>& r, |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1097 bool force_range) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1098 : m_rep (force_range || Voptimize_range |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1099 ? dynamic_cast<octave_base_value *> (new ov_range<octave_int8> (r)) |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1100 : dynamic_cast<octave_base_value *> (new octave_int8_matrix (r.array_value ()))) |
28639
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1101 { |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1102 maybe_mutate (); |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1103 } |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1104 |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1105 octave_value::octave_value (const octave::range<octave_int16>& r, |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1106 bool force_range) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1107 : m_rep (force_range || Voptimize_range |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1108 ? dynamic_cast<octave_base_value *> (new ov_range<octave_int16> (r)) |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1109 : dynamic_cast<octave_base_value *> (new octave_int16_matrix (r.array_value ()))) |
28639
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1110 { |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1111 maybe_mutate (); |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1112 } |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1113 |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1114 octave_value::octave_value (const octave::range<octave_int32>& r, |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1115 bool force_range) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1116 : m_rep (force_range || Voptimize_range |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1117 ? dynamic_cast<octave_base_value *> (new ov_range<octave_int32> (r)) |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1118 : dynamic_cast<octave_base_value *> (new octave_int32_matrix (r.array_value ()))) |
28639
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1119 { |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1120 maybe_mutate (); |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1121 } |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1122 |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1123 octave_value::octave_value (const octave::range<octave_int64>& r, |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1124 bool force_range) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1125 : m_rep (force_range || Voptimize_range |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1126 ? dynamic_cast<octave_base_value *> (new ov_range<octave_int64> (r)) |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1127 : dynamic_cast<octave_base_value *> (new octave_int64_matrix (r.array_value ()))) |
28639
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1128 { |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1129 maybe_mutate (); |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1130 } |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1131 |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1132 octave_value::octave_value (const octave::range<octave_uint8>& r, |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1133 bool force_range) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1134 : m_rep (force_range || Voptimize_range |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1135 ? dynamic_cast<octave_base_value *> (new ov_range<octave_uint8> (r)) |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1136 : dynamic_cast<octave_base_value *> (new octave_uint8_matrix (r.array_value ()))) |
28639
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1137 { |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1138 maybe_mutate (); |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1139 } |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1140 |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1141 octave_value::octave_value (const octave::range<octave_uint16>& r, |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1142 bool force_range) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1143 : m_rep (force_range || Voptimize_range |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1144 ? dynamic_cast<octave_base_value *> (new ov_range<octave_uint16> (r)) |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1145 : dynamic_cast<octave_base_value *> (new octave_uint16_matrix (r.array_value ()))) |
28639
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1146 { |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1147 maybe_mutate (); |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1148 } |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1149 |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1150 octave_value::octave_value (const octave::range<octave_uint32>& r, |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1151 bool force_range) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1152 : m_rep (force_range || Voptimize_range |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1153 ? dynamic_cast<octave_base_value *> (new ov_range<octave_uint32> (r)) |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1154 : dynamic_cast<octave_base_value *> (new octave_uint32_matrix (r.array_value ()))) |
28639
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1155 { |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1156 maybe_mutate (); |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1157 } |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1158 |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1159 octave_value::octave_value (const octave::range<octave_uint64>& r, |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
1160 bool force_range) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1161 : m_rep (force_range || Voptimize_range |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1162 ? dynamic_cast<octave_base_value *> (new ov_range<octave_uint64> (r)) |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1163 : dynamic_cast<octave_base_value *> (new octave_uint64_matrix (r.array_value ()))) |
2423 | 1164 { |
1165 maybe_mutate (); | |
1166 } | |
2376 | 1167 |
30835
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
1168 octave_value::octave_value (const octave::range<char>& r, char type, |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
1169 bool /*force_range*/) |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
1170 #if 0 |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
1171 : m_rep (force_range || optimize_range |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
1172 ? dynamic_cast<octave_base_value *> (new octave_char_range (r, type)) |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
1173 : dynamic_cast<octave_base_value *> (type == '"' |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
1174 ? new octave_char_matrix_dq_str (r.array_value ()) |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
1175 : new octave_char_matrix_sq_str (r.array_value ()))) |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
1176 #else |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
1177 : m_rep (type == '"' |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
1178 ? new octave_char_matrix_dq_str (r.array_value ()) |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
1179 : new octave_char_matrix_sq_str (r.array_value ())) |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
1180 #endif |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
1181 { |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
1182 maybe_mutate (); |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
1183 } |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
1184 |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
1185 #endif |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
1186 |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10687
diff
changeset
|
1187 octave_value::octave_value (const octave_map& m) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1188 : m_rep (new octave_struct (m)) |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10687
diff
changeset
|
1189 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10687
diff
changeset
|
1190 maybe_mutate (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10687
diff
changeset
|
1191 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10687
diff
changeset
|
1192 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10687
diff
changeset
|
1193 octave_value::octave_value (const octave_scalar_map& m) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1194 : m_rep (new octave_scalar_struct (m)) |
22417
48c00363dc74
maint: Use '{ }' for empty function bodies in C++.
Rik <rik@octave.org>
parents:
22390
diff
changeset
|
1195 { } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10687
diff
changeset
|
1196 |
23678
dcba41788495
new struct/map constructors
John W. Eaton <jwe@octave.org>
parents:
23614
diff
changeset
|
1197 octave_value::octave_value (const std::map<std::string, octave_value>& m) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1198 : m_rep (new octave_scalar_struct (m)) |
23678
dcba41788495
new struct/map constructors
John W. Eaton <jwe@octave.org>
parents:
23614
diff
changeset
|
1199 { } |
dcba41788495
new struct/map constructors
John W. Eaton <jwe@octave.org>
parents:
23614
diff
changeset
|
1200 |
18402
4c064d3d2750
Remove Octave_map class deprecated in 3.8.
Rik <rik@octave.org>
parents:
18306
diff
changeset
|
1201 octave_value::octave_value (const octave_map& m, const std::string& id, |
4c064d3d2750
Remove Octave_map class deprecated in 3.8.
Rik <rik@octave.org>
parents:
18306
diff
changeset
|
1202 const std::list<std::string>& plist) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1203 : m_rep (new octave_class (m, id, plist)) |
2825 | 1204 { |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10687
diff
changeset
|
1205 maybe_mutate (); |
2880 | 1206 } |
1207 | |
18402
4c064d3d2750
Remove Octave_map class deprecated in 3.8.
Rik <rik@octave.org>
parents:
18306
diff
changeset
|
1208 octave_value::octave_value (const octave_scalar_map& m, const std::string& id, |
13294
7dce7e110511
make concatenation of class objects work
John W. Eaton <jwe@octave.org>
parents:
13101
diff
changeset
|
1209 const std::list<std::string>& plist) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1210 : m_rep (new octave_class (m, id, plist)) |
22417
48c00363dc74
maint: Use '{ }' for empty function bodies in C++.
Rik <rik@octave.org>
parents:
22390
diff
changeset
|
1211 { } |
7336 | 1212 |
23352
778fdffc09df
deprecate "octave_value (octave_value_list, bool)" constructor
John W. Eaton <jwe@octave.org>
parents:
23220
diff
changeset
|
1213 octave_value::octave_value (const octave_value_list& l) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1214 : m_rep (new octave_cs_list (l)) |
23352
778fdffc09df
deprecate "octave_value (octave_value_list, bool)" constructor
John W. Eaton <jwe@octave.org>
parents:
23220
diff
changeset
|
1215 { } |
778fdffc09df
deprecate "octave_value (octave_value_list, bool)" constructor
John W. Eaton <jwe@octave.org>
parents:
23220
diff
changeset
|
1216 |
2376 | 1217 octave_value::octave_value (octave_value::magic_colon) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1218 : m_rep (new octave_magic_colon ()) |
22417
48c00363dc74
maint: Use '{ }' for empty function bodies in C++.
Rik <rik@octave.org>
parents:
22390
diff
changeset
|
1219 { } |
2376 | 1220 |
9728
70925b11ba46
again allow the obsolete syntax for cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
9725
diff
changeset
|
1221 octave_value::octave_value (octave_base_value *new_rep, bool borrow) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1222 : m_rep (new_rep) |
2825 | 1223 { |
9728
70925b11ba46
again allow the obsolete syntax for cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
9725
diff
changeset
|
1224 if (borrow) |
30139
c789e728d57a
Backed out changeset 938794bc82b7
John W. Eaton <jwe@octave.org>
parents:
30133
diff
changeset
|
1225 m_rep->count++; |
2825 | 1226 } |
2376 | 1227 |
5759 | 1228 octave_base_value * |
3933 | 1229 octave_value::clone (void) const |
2880 | 1230 { |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1231 return m_rep->clone (); |
2880 | 1232 } |
1233 | |
2409 | 1234 void |
29476
c74ff452e2bb
avoid memory leaks when returning handles to nested functions
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1235 octave_value::break_closure_cycles (const std::shared_ptr<octave::stack_frame>& frame) |
c74ff452e2bb
avoid memory leaks when returning handles to nested functions
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1236 { |
c74ff452e2bb
avoid memory leaks when returning handles to nested functions
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1237 if (is_function_handle ()) |
c74ff452e2bb
avoid memory leaks when returning handles to nested functions
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1238 { |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1239 octave_fcn_handle *fhdl = m_rep->fcn_handle_value (); |
29476
c74ff452e2bb
avoid memory leaks when returning handles to nested functions
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1240 |
c74ff452e2bb
avoid memory leaks when returning handles to nested functions
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1241 if (fhdl->is_nested (frame) && ! fhdl->is_weak_nested ()) |
c74ff452e2bb
avoid memory leaks when returning handles to nested functions
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1242 *this = fhdl->make_weak_nested_handle (); |
29477
34d06c73b48d
hold references to closure frames in anon functions if needed (bug #60237)
John W. Eaton <jwe@octave.org>
parents:
29476
diff
changeset
|
1243 else if (fhdl->is_anonymous () && ! fhdl->is_weak_anonymous ()) |
34d06c73b48d
hold references to closure frames in anon functions if needed (bug #60237)
John W. Eaton <jwe@octave.org>
parents:
29476
diff
changeset
|
1244 *this = fhdl->make_weak_anonymous_handle (); |
29476
c74ff452e2bb
avoid memory leaks when returning handles to nested functions
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1245 } |
c74ff452e2bb
avoid memory leaks when returning handles to nested functions
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1246 else |
c74ff452e2bb
avoid memory leaks when returning handles to nested functions
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1247 { |
c74ff452e2bb
avoid memory leaks when returning handles to nested functions
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1248 // FIXME: Is there a efficient way to avoid calling make_unique |
c74ff452e2bb
avoid memory leaks when returning handles to nested functions
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1249 // if REP doesn't contain any nested function handles? |
c74ff452e2bb
avoid memory leaks when returning handles to nested functions
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1250 // |
c74ff452e2bb
avoid memory leaks when returning handles to nested functions
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1251 // Probably we should be asking REP to make a modified copy IFF it |
c74ff452e2bb
avoid memory leaks when returning handles to nested functions
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1252 // is needed, then replace our REP with that if a copy is made, |
c74ff452e2bb
avoid memory leaks when returning handles to nested functions
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1253 // otherwise we leave it alone. |
c74ff452e2bb
avoid memory leaks when returning handles to nested functions
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1254 |
c74ff452e2bb
avoid memory leaks when returning handles to nested functions
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1255 make_unique (); |
c74ff452e2bb
avoid memory leaks when returning handles to nested functions
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1256 |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1257 m_rep->break_closure_cycles (frame); |
29476
c74ff452e2bb
avoid memory leaks when returning handles to nested functions
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1258 } |
c74ff452e2bb
avoid memory leaks when returning handles to nested functions
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1259 } |
c74ff452e2bb
avoid memory leaks when returning handles to nested functions
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1260 |
c74ff452e2bb
avoid memory leaks when returning handles to nested functions
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1261 void |
2409 | 1262 octave_value::maybe_mutate (void) |
1263 { | |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1264 octave_base_value *tmp = m_rep->try_narrowing_conversion (); |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1265 |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1266 if (tmp && tmp != m_rep) |
2409 | 1267 { |
30139
c789e728d57a
Backed out changeset 938794bc82b7
John W. Eaton <jwe@octave.org>
parents:
30133
diff
changeset
|
1268 if (--m_rep->count == 0) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1269 delete m_rep; |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1270 |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1271 m_rep = tmp; |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1272 } |
2409 | 1273 } |
1274 | |
31605
e88a07dec498
maint: Use macros to begin/end C++ namespaces.
Rik <rik@octave.org>
parents:
31155
diff
changeset
|
1275 OCTAVE_BEGIN_NAMESPACE(octave) |
29958
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29954
diff
changeset
|
1276 |
22283
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1277 DEFUN (double, args, , |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1278 doc: /* -*- texinfo -*- |
30888
32d2b6604a9f
doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents:
30868
diff
changeset
|
1279 @deftypefn {} {@var{y} =} double (@var{x}) |
22283
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1280 Convert @var{x} to double precision type. |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1281 @seealso{single} |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1282 @end deftypefn */) |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1283 { |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1284 if (args.length () != 1) |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1285 print_usage (); |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1286 |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1287 return ovl (args(0).as_double ()); |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1288 } |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1289 |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1290 /* |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1291 %!assert (class (double (single (1))), "double") |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1292 %!assert (class (double (single (1 + i))), "double") |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1293 %!assert (class (double (int8 (1))), "double") |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1294 %!assert (class (double (uint8 (1))), "double") |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1295 %!assert (class (double (int16 (1))), "double") |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1296 %!assert (class (double (uint16 (1))), "double") |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1297 %!assert (class (double (int32 (1))), "double") |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1298 %!assert (class (double (uint32 (1))), "double") |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1299 %!assert (class (double (int64 (1))), "double") |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1300 %!assert (class (double (uint64 (1))), "double") |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1301 %!assert (class (double (true)), "double") |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1302 %!assert (class (double ("A")), "double") |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1303 %!test |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1304 %! x = sparse (logical ([1 0; 0 1])); |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1305 %! y = double (x); |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1306 %! assert (class (x), "logical"); |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1307 %! assert (class (y), "double"); |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1308 %! assert (issparse (y)); |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1309 %!test |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1310 %! x = diag (single ([1 3 2])); |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1311 %! y = double (x); |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1312 %! assert (class (x), "single"); |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1313 %! assert (class (y), "double"); |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1314 %!test |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1315 %! x = diag (single ([i 3 2])); |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1316 %! y = double (x); |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1317 %! assert (class (x), "single"); |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1318 %! assert (class (y), "double"); |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1319 */ |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1320 |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1321 DEFUN (single, args, , |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1322 doc: /* -*- texinfo -*- |
30888
32d2b6604a9f
doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents:
30868
diff
changeset
|
1323 @deftypefn {} {@var{y} =} single (@var{x}) |
22283
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1324 Convert @var{x} to single precision type. |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1325 @seealso{double} |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1326 @end deftypefn */) |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1327 { |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1328 if (args.length () != 1) |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1329 print_usage (); |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1330 |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1331 return args(0).as_single (); |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1332 |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1333 return ovl (); |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1334 } |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1335 |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1336 /* |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1337 %!assert (class (single (1)), "single") |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1338 %!assert (class (single (1 + i)), "single") |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1339 %!assert (class (single (int8 (1))), "single") |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1340 %!assert (class (single (uint8 (1))), "single") |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1341 %!assert (class (single (int16 (1))), "single") |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1342 %!assert (class (single (uint16 (1))), "single") |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1343 %!assert (class (single (int32 (1))), "single") |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1344 %!assert (class (single (uint32 (1))), "single") |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1345 %!assert (class (single (int64 (1))), "single") |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1346 %!assert (class (single (uint64 (1))), "single") |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1347 %!assert (class (single (true)), "single") |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1348 %!assert (class (single ("A")), "single") |
28930
2883b3d08b7e
maint: Remove unnecessary parentheses bracketing %!error BIST tests.
Rik <rik@octave.org>
parents:
28888
diff
changeset
|
1349 %!error single (sparse (1)) |
22283
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1350 %!test |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1351 %! x = diag ([1 3 2]); |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1352 %! y = single (x); |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1353 %! assert (class (x), "double"); |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1354 %! assert (class (y), "single"); |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1355 %!test |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1356 %! x = diag ([i 3 2]); |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1357 %! y = single (x); |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1358 %! assert (class (x), "double"); |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1359 %! assert (class (y), "single"); |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1360 */ |
564203123065
move single and double type conversion functions to ov.cc
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
1361 |
22296
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1362 DEFUN (int8, args, , |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1363 doc: /* -*- texinfo -*- |
30888
32d2b6604a9f
doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents:
30868
diff
changeset
|
1364 @deftypefn {} {@var{y} =} int8 (@var{x}) |
22296
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1365 Convert @var{x} to 8-bit integer type. |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1366 @seealso{uint8, int16, uint16, int32, uint32, int64, uint64} |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1367 @end deftypefn */) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1368 { |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1369 if (args.length () != 1) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1370 print_usage (); |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1371 |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1372 return args(0).as_int8 (); |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1373 } |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1374 |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1375 /* |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1376 %!assert (class (int8 (1)), "int8") |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1377 %!assert (int8 (1.25), int8 (1)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1378 %!assert (int8 (1.5), int8 (2)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1379 %!assert (int8 (-1.5), int8 (-2)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1380 %!assert (int8 (2^9), int8 (2^8-1)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1381 %!assert (int8 (-2^9), int8 (-2^8)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1382 */ |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1383 |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1384 DEFUN (int16, args, , |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1385 doc: /* -*- texinfo -*- |
30888
32d2b6604a9f
doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents:
30868
diff
changeset
|
1386 @deftypefn {} {@var{y} =} int16 (@var{x}) |
22296
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1387 Convert @var{x} to 16-bit integer type. |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1388 @seealso{int8, uint8, uint16, int32, uint32, int64, uint64} |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1389 @end deftypefn */) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1390 { |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1391 if (args.length () != 1) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1392 print_usage (); |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1393 |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1394 return args(0).as_int16 (); |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1395 } |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1396 |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1397 /* |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1398 %!assert (class (int16 (1)), "int16") |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1399 %!assert (int16 (1.25), int16 (1)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1400 %!assert (int16 (1.5), int16 (2)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1401 %!assert (int16 (-1.5), int16 (-2)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1402 %!assert (int16 (2^17), int16 (2^16-1)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1403 %!assert (int16 (-2^17), int16 (-2^16)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1404 */ |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1405 |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1406 DEFUN (int32, args, , |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1407 doc: /* -*- texinfo -*- |
30888
32d2b6604a9f
doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents:
30868
diff
changeset
|
1408 @deftypefn {} {@var{y} =} int32 (@var{x}) |
22296
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1409 Convert @var{x} to 32-bit integer type. |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1410 @seealso{int8, uint8, int16, uint16, uint32, int64, uint64} |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1411 @end deftypefn */) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1412 { |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1413 if (args.length () != 1) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1414 print_usage (); |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1415 |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1416 return args(0).as_int32 (); |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1417 } |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1418 |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1419 /* |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1420 %!assert (class (int32 (1)), "int32") |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1421 %!assert (int32 (1.25), int32 (1)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1422 %!assert (int32 (1.5), int32 (2)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1423 %!assert (int32 (-1.5), int32 (-2)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1424 %!assert (int32 (2^33), int32 (2^32-1)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1425 %!assert (int32 (-2^33), int32 (-2^32)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1426 */ |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1427 |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1428 DEFUN (int64, args, , |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1429 doc: /* -*- texinfo -*- |
30888
32d2b6604a9f
doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents:
30868
diff
changeset
|
1430 @deftypefn {} {@var{y} =} int64 (@var{x}) |
22296
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1431 Convert @var{x} to 64-bit integer type. |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1432 @seealso{int8, uint8, int16, uint16, int32, uint32, uint64} |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1433 @end deftypefn */) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1434 { |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1435 if (args.length () != 1) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1436 print_usage (); |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1437 |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1438 return args(0).as_int64 (); |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1439 } |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1440 |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1441 /* |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1442 %!assert (class (int64 (1)), "int64") |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1443 %!assert (int64 (1.25), int64 (1)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1444 %!assert (int64 (1.5), int64 (2)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1445 %!assert (int64 (-1.5), int64 (-2)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1446 %!assert (int64 (2^65), int64 (2^64-1)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1447 %!assert (int64 (-2^65), int64 (-2^64)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1448 */ |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1449 |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1450 DEFUN (uint8, args, , |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1451 doc: /* -*- texinfo -*- |
30888
32d2b6604a9f
doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents:
30868
diff
changeset
|
1452 @deftypefn {} {@var{y} =} uint8 (@var{x}) |
22296
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1453 Convert @var{x} to unsigned 8-bit integer type. |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1454 @seealso{int8, int16, uint16, int32, uint32, int64, uint64} |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1455 @end deftypefn */) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1456 { |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1457 if (args.length () != 1) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1458 print_usage (); |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1459 |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1460 return args(0).as_uint8 (); |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1461 } |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1462 |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1463 /* |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1464 %!assert (class (uint8 (1)), "uint8") |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1465 %!assert (uint8 (1.25), uint8 (1)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1466 %!assert (uint8 (1.5), uint8 (2)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1467 %!assert (uint8 (-1.5), uint8 (0)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1468 %!assert (uint8 (2^9), uint8 (2^8-1)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1469 %!assert (uint8 (-2^9), uint8 (0)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1470 */ |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1471 |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1472 DEFUN (uint16, args, , |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1473 doc: /* -*- texinfo -*- |
30888
32d2b6604a9f
doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents:
30868
diff
changeset
|
1474 @deftypefn {} {@var{y} =} uint16 (@var{x}) |
22296
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1475 Convert @var{x} to unsigned 16-bit integer type. |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1476 @seealso{int8, uint8, int16, int32, uint32, int64, uint64} |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1477 @end deftypefn */) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1478 { |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1479 if (args.length () != 1) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1480 print_usage (); |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1481 |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1482 return args(0).as_uint16 (); |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1483 } |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1484 |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1485 /* |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1486 %!assert (class (uint16 (1)), "uint16") |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1487 %!assert (uint16 (1.25), uint16 (1)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1488 %!assert (uint16 (1.5), uint16 (2)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1489 %!assert (uint16 (-1.5), uint16 (0)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1490 %!assert (uint16 (2^17), uint16 (2^16-1)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1491 %!assert (uint16 (-2^17), uint16 (0)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1492 */ |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1493 |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1494 DEFUN (uint32, args, , |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1495 doc: /* -*- texinfo -*- |
30888
32d2b6604a9f
doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents:
30868
diff
changeset
|
1496 @deftypefn {} {@var{y} =} uint32 (@var{x}) |
22296
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1497 Convert @var{x} to unsigned 32-bit integer type. |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1498 @seealso{int8, uint8, int16, uint16, int32, int64, uint64} |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1499 @end deftypefn */) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1500 { |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1501 if (args.length () != 1) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1502 print_usage (); |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1503 |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1504 return args(0).as_uint32 (); |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1505 } |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1506 |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1507 /* |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1508 %!assert (class (uint32 (1)), "uint32") |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1509 %!assert (uint32 (1.25), uint32 (1)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1510 %!assert (uint32 (1.5), uint32 (2)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1511 %!assert (uint32 (-1.5), uint32 (0)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1512 %!assert (uint32 (2^33), uint32 (2^32-1)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1513 %!assert (uint32 (-2^33), uint32 (0)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1514 */ |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1515 |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1516 DEFUN (uint64, args, , |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1517 doc: /* -*- texinfo -*- |
30888
32d2b6604a9f
doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents:
30868
diff
changeset
|
1518 @deftypefn {} {@var{y} =} uint64 (@var{x}) |
22296
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1519 Convert @var{x} to unsigned 64-bit integer type. |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1520 @seealso{int8, uint8, int16, uint16, int32, uint32, int64} |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1521 @end deftypefn */) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1522 { |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1523 if (args.length () != 1) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1524 print_usage (); |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1525 |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1526 return args(0).as_uint64 (); |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1527 } |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1528 |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1529 /* |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1530 %!assert (class (uint64 (1)), "uint64") |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1531 %!assert (uint64 (1.25), uint64 (1)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1532 %!assert (uint64 (1.5), uint64 (2)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1533 %!assert (uint64 (-1.5), uint64 (0)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1534 %!assert (uint64 (2^65), uint64 (2^64-1)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1535 %!assert (uint64 (-2^65), uint64 (0)) |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1536 */ |
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1537 |
31605
e88a07dec498
maint: Use macros to begin/end C++ namespaces.
Rik <rik@octave.org>
parents:
31155
diff
changeset
|
1538 OCTAVE_END_NAMESPACE(octave) |
29958
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29954
diff
changeset
|
1539 |
22296
8b18f46f6427
revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents:
22283
diff
changeset
|
1540 octave_value |
4271 | 1541 octave_value::single_subsref (const std::string& type, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
1542 const octave_value_list& idx) |
4247 | 1543 { |
1544 std::list<octave_value_list> i; | |
1545 | |
1546 i.push_back (idx); | |
1547 | |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1548 return m_rep->subsref (type, i); |
4247 | 1549 } |
1550 | |
2974 | 1551 octave_value_list |
4247 | 1552 octave_value::subsref (const std::string& type, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
1553 const std::list<octave_value_list>& idx, int nargout) |
3933 | 1554 { |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1555 return m_rep->subsref (type, idx, nargout); |
3933 | 1556 } |
1557 | |
1558 octave_value | |
4247 | 1559 octave_value::next_subsref (const std::string& type, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
1560 const std::list<octave_value_list>& idx, |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29477
diff
changeset
|
1561 std::size_t skip) |
3933 | 1562 { |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1563 if (idx.size () > skip) |
3933 | 1564 { |
4219 | 1565 std::list<octave_value_list> new_idx (idx); |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29477
diff
changeset
|
1566 for (std::size_t i = 0; i < skip; i++) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
1567 new_idx.erase (new_idx.begin ()); |
3933 | 1568 return subsref (type.substr (skip), new_idx); |
1569 } | |
1570 else | |
1571 return *this; | |
1572 } | |
1573 | |
1574 octave_value_list | |
4994 | 1575 octave_value::next_subsref (int nargout, const std::string& type, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
1576 const std::list<octave_value_list>& idx, |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29477
diff
changeset
|
1577 std::size_t skip) |
4994 | 1578 { |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1579 if (idx.size () > skip) |
4994 | 1580 { |
1581 std::list<octave_value_list> new_idx (idx); | |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29477
diff
changeset
|
1582 for (std::size_t i = 0; i < skip; i++) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
1583 new_idx.erase (new_idx.begin ()); |
4994 | 1584 return subsref (type.substr (skip), new_idx, nargout); |
1585 } | |
1586 else | |
1587 return *this; | |
1588 } | |
1589 | |
8551
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8531
diff
changeset
|
1590 octave_value |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8531
diff
changeset
|
1591 octave_value::next_subsref (bool auto_add, const std::string& type, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
1592 const std::list<octave_value_list>& idx, |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29477
diff
changeset
|
1593 std::size_t skip) |
8551
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8531
diff
changeset
|
1594 { |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1595 if (idx.size () > skip) |
8551
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8531
diff
changeset
|
1596 { |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8531
diff
changeset
|
1597 std::list<octave_value_list> new_idx (idx); |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29477
diff
changeset
|
1598 for (std::size_t i = 0; i < skip; i++) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
1599 new_idx.erase (new_idx.begin ()); |
8551
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8531
diff
changeset
|
1600 return subsref (type.substr (skip), new_idx, auto_add); |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8531
diff
changeset
|
1601 } |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8531
diff
changeset
|
1602 else |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8531
diff
changeset
|
1603 return *this; |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8531
diff
changeset
|
1604 } |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8531
diff
changeset
|
1605 |
3933 | 1606 octave_value |
4247 | 1607 octave_value::subsasgn (const std::string& type, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
1608 const std::list<octave_value_list>& idx, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
1609 const octave_value& rhs) |
3933 | 1610 { |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1611 return m_rep->subsasgn (type, idx, rhs); |
3933 | 1612 } |
1613 | |
12171
d08901c05c1b
fix bug in class assignment to undefined object with index
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
1614 octave_value |
d08901c05c1b
fix bug in class assignment to undefined object with index
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
1615 octave_value::undef_subsasgn (const std::string& type, |
d08901c05c1b
fix bug in class assignment to undefined object with index
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
1616 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:
11586
diff
changeset
|
1617 const octave_value& rhs) |
d08901c05c1b
fix bug in class assignment to undefined object with index
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
1618 { |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1619 return m_rep->undef_subsasgn (type, idx, rhs); |
12171
d08901c05c1b
fix bug in class assignment to undefined object with index
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
1620 } |
d08901c05c1b
fix bug in class assignment to undefined object with index
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
1621 |
10544
9961fc022d9d
fix assignment to non-existing variables and octave_value::assign
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
1622 octave_value& |
4247 | 1623 octave_value::assign (assign_op op, const std::string& type, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
1624 const std::list<octave_value_list>& idx, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
1625 const octave_value& rhs) |
3933 | 1626 { |
1627 make_unique (); | |
1628 | |
1629 octave_value t_rhs = rhs; | |
1630 | |
1631 if (op != op_asn_eq) | |
1632 { | |
20962
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20955
diff
changeset
|
1633 if (! is_defined ()) |
10544
9961fc022d9d
fix assignment to non-existing variables and octave_value::assign
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
1634 error ("in computed assignment A(index) OP= X, A must be defined first"); |
20962
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20955
diff
changeset
|
1635 |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20955
diff
changeset
|
1636 octave_value t = subsref (type, idx); |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20955
diff
changeset
|
1637 |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20955
diff
changeset
|
1638 binary_op binop = op_eq_to_binary_op (op); |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20955
diff
changeset
|
1639 |
28631
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
1640 t_rhs = octave::binary_op (binop, t, rhs); |
3933 | 1641 } |
1642 | |
20741
a5ab31b52ae8
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20704
diff
changeset
|
1643 *this = subsasgn (type, idx, t_rhs); |
3933 | 1644 |
10544
9961fc022d9d
fix assignment to non-existing variables and octave_value::assign
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
1645 return *this; |
3933 | 1646 } |
1647 | |
10544
9961fc022d9d
fix assignment to non-existing variables and octave_value::assign
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
1648 octave_value& |
3203 | 1649 octave_value::assign (assign_op op, const octave_value& rhs) |
2880 | 1650 { |
3533 | 1651 if (op == op_asn_eq) |
8150
283989f2da9b
make null assignment matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
8039
diff
changeset
|
1652 // Regularize a null matrix if stored into a variable. |
8523
ad3afaaa19c1
implement non-copying contiguous range indexing
Jaroslav Hajek <highegg@gmail.com>
parents:
8367
diff
changeset
|
1653 operator = (rhs.storable_value ()); |
10544
9961fc022d9d
fix assignment to non-existing variables and octave_value::assign
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
1654 else if (is_defined ()) |
3203 | 1655 { |
24540
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1656 octave::type_info::assign_op_fcn f = nullptr; |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1657 |
9546
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
9479
diff
changeset
|
1658 // Only attempt to operate in-place if this variable is unshared. |
30139
c789e728d57a
Backed out changeset 938794bc82b7
John W. Eaton <jwe@octave.org>
parents:
30133
diff
changeset
|
1659 if (m_rep->count == 1) |
9546
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
9479
diff
changeset
|
1660 { |
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
9479
diff
changeset
|
1661 int tthis = this->type_id (); |
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
9479
diff
changeset
|
1662 int trhs = rhs.type_id (); |
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
9479
diff
changeset
|
1663 |
31105
670a0d878af1
eliminate WHO arguments from interpreter-private functions
John W. Eaton <jwe@octave.org>
parents:
30888
diff
changeset
|
1664 octave::type_info& ti = octave::__get_type_info__ (); |
24540
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1665 |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1666 f = ti.lookup_assign_op (op, tthis, trhs); |
9546
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
9479
diff
changeset
|
1667 } |
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
9479
diff
changeset
|
1668 |
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
9479
diff
changeset
|
1669 if (f) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
1670 { |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1671 f (*m_rep, octave_value_list (), rhs.get_rep ()); |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20232
diff
changeset
|
1672 // Usually unnecessary, but may be needed (complex arrays). |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20232
diff
changeset
|
1673 maybe_mutate (); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
1674 } |
9546
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
9479
diff
changeset
|
1675 else |
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
9479
diff
changeset
|
1676 { |
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
9479
diff
changeset
|
1677 |
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
9479
diff
changeset
|
1678 binary_op binop = op_eq_to_binary_op (op); |
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
9479
diff
changeset
|
1679 |
28631
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
1680 octave_value t = octave::binary_op (binop, *this, rhs); |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1681 |
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1682 operator = (t); |
9546
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
9479
diff
changeset
|
1683 } |
3204 | 1684 } |
10544
9961fc022d9d
fix assignment to non-existing variables and octave_value::assign
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
1685 else |
9961fc022d9d
fix assignment to non-existing variables and octave_value::assign
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
1686 error ("in computed assignment A OP= X, A must be defined first"); |
3204 | 1687 |
3933 | 1688 return *this; |
2376 | 1689 } |
1690 | |
26078
0549d088f50e
move get_dims_str from variables.cc to octave_value class
John W. Eaton <jwe@octave.org>
parents:
25927
diff
changeset
|
1691 // FIXME: This is a bit of a kluge. We'd like to just use val.dims() |
0549d088f50e
move get_dims_str from variables.cc to octave_value class
John W. Eaton <jwe@octave.org>
parents:
25927
diff
changeset
|
1692 // and if val is an object, expect that dims will call size if it is |
0549d088f50e
move get_dims_str from variables.cc to octave_value class
John W. Eaton <jwe@octave.org>
parents:
25927
diff
changeset
|
1693 // overloaded by a user-defined method. But there are currently some |
0549d088f50e
move get_dims_str from variables.cc to octave_value class
John W. Eaton <jwe@octave.org>
parents:
25927
diff
changeset
|
1694 // unresolved const issues that prevent that solution from working. |
0549d088f50e
move get_dims_str from variables.cc to octave_value class
John W. Eaton <jwe@octave.org>
parents:
25927
diff
changeset
|
1695 |
0549d088f50e
move get_dims_str from variables.cc to octave_value class
John W. Eaton <jwe@octave.org>
parents:
25927
diff
changeset
|
1696 std::string |
0549d088f50e
move get_dims_str from variables.cc to octave_value class
John W. Eaton <jwe@octave.org>
parents:
25927
diff
changeset
|
1697 octave_value::get_dims_str (void) const |
0549d088f50e
move get_dims_str from variables.cc to octave_value class
John W. Eaton <jwe@octave.org>
parents:
25927
diff
changeset
|
1698 { |
0549d088f50e
move get_dims_str from variables.cc to octave_value class
John W. Eaton <jwe@octave.org>
parents:
25927
diff
changeset
|
1699 octave_value tmp = *this; |
0549d088f50e
move get_dims_str from variables.cc to octave_value class
John W. Eaton <jwe@octave.org>
parents:
25927
diff
changeset
|
1700 |
0549d088f50e
move get_dims_str from variables.cc to octave_value class
John W. Eaton <jwe@octave.org>
parents:
25927
diff
changeset
|
1701 Matrix sz = tmp.size (); |
0549d088f50e
move get_dims_str from variables.cc to octave_value class
John W. Eaton <jwe@octave.org>
parents:
25927
diff
changeset
|
1702 |
0549d088f50e
move get_dims_str from variables.cc to octave_value class
John W. Eaton <jwe@octave.org>
parents:
25927
diff
changeset
|
1703 dim_vector dv = dim_vector::alloc (sz.numel ()); |
0549d088f50e
move get_dims_str from variables.cc to octave_value class
John W. Eaton <jwe@octave.org>
parents:
25927
diff
changeset
|
1704 |
0549d088f50e
move get_dims_str from variables.cc to octave_value class
John W. Eaton <jwe@octave.org>
parents:
25927
diff
changeset
|
1705 for (octave_idx_type i = 0; i < dv.ndims (); i++) |
0549d088f50e
move get_dims_str from variables.cc to octave_value class
John W. Eaton <jwe@octave.org>
parents:
25927
diff
changeset
|
1706 dv(i) = sz(i); |
0549d088f50e
move get_dims_str from variables.cc to octave_value class
John W. Eaton <jwe@octave.org>
parents:
25927
diff
changeset
|
1707 |
0549d088f50e
move get_dims_str from variables.cc to octave_value class
John W. Eaton <jwe@octave.org>
parents:
25927
diff
changeset
|
1708 return dv.str (); |
0549d088f50e
move get_dims_str from variables.cc to octave_value class
John W. Eaton <jwe@octave.org>
parents:
25927
diff
changeset
|
1709 } |
0549d088f50e
move get_dims_str from variables.cc to octave_value class
John W. Eaton <jwe@octave.org>
parents:
25927
diff
changeset
|
1710 |
5275 | 1711 octave_idx_type |
4563 | 1712 octave_value::length (void) const |
1713 { | |
10654
984b8b6bee02
simplify octave_value::length
Jaroslav Hajek <highegg@gmail.com>
parents:
10614
diff
changeset
|
1714 octave_idx_type retval = 0; |
984b8b6bee02
simplify octave_value::length
Jaroslav Hajek <highegg@gmail.com>
parents:
10614
diff
changeset
|
1715 |
984b8b6bee02
simplify octave_value::length
Jaroslav Hajek <highegg@gmail.com>
parents:
10614
diff
changeset
|
1716 const dim_vector dv = dims (); |
4584 | 1717 |
21660
53728df3e4c9
maint: for clarity, call ndims() rather than length() on dimension vectors.
Rik <rik@octave.org>
parents:
21574
diff
changeset
|
1718 for (int i = 0; i < dv.ndims (); i++) |
4563 | 1719 { |
4584 | 1720 if (dv(i) == 0) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
1721 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
1722 retval = 0; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
1723 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
1724 } |
4584 | 1725 |
4563 | 1726 if (dv(i) > retval) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
1727 retval = dv(i); |
4563 | 1728 } |
1729 | |
1730 return retval; | |
1731 } | |
1732 | |
8346
8302788f09db
fix empty matrix handling in switch statement
Jaroslav Hajek <highegg@gmail.com>
parents:
8345
diff
changeset
|
1733 bool |
8302788f09db
fix empty matrix handling in switch statement
Jaroslav Hajek <highegg@gmail.com>
parents:
8345
diff
changeset
|
1734 octave_value::is_equal (const octave_value& test) const |
8302788f09db
fix empty matrix handling in switch statement
Jaroslav Hajek <highegg@gmail.com>
parents:
8345
diff
changeset
|
1735 { |
8302788f09db
fix empty matrix handling in switch statement
Jaroslav Hajek <highegg@gmail.com>
parents:
8345
diff
changeset
|
1736 bool retval = false; |
8302788f09db
fix empty matrix handling in switch statement
Jaroslav Hajek <highegg@gmail.com>
parents:
8345
diff
changeset
|
1737 |
8302788f09db
fix empty matrix handling in switch statement
Jaroslav Hajek <highegg@gmail.com>
parents:
8345
diff
changeset
|
1738 // If there is no op_eq for these types, we can't compare values. |
8302788f09db
fix empty matrix handling in switch statement
Jaroslav Hajek <highegg@gmail.com>
parents:
8345
diff
changeset
|
1739 |
8302788f09db
fix empty matrix handling in switch statement
Jaroslav Hajek <highegg@gmail.com>
parents:
8345
diff
changeset
|
1740 if (rows () == test.rows () && columns () == test.columns ()) |
8302788f09db
fix empty matrix handling in switch statement
Jaroslav Hajek <highegg@gmail.com>
parents:
8345
diff
changeset
|
1741 { |
28631
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
1742 octave_value tmp = octave::binary_op (octave_value::op_eq, *this, test); |
8346
8302788f09db
fix empty matrix handling in switch statement
Jaroslav Hajek <highegg@gmail.com>
parents:
8345
diff
changeset
|
1743 |
8302788f09db
fix empty matrix handling in switch statement
Jaroslav Hajek <highegg@gmail.com>
parents:
8345
diff
changeset
|
1744 // Empty array also means a match. |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1745 if (tmp.is_defined ()) |
21990
efce657ceb86
Provide a warning when an array is used in an if/while/until (bug #43098).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21966
diff
changeset
|
1746 { |
23577
80c42f4cca13
maint: Deprecate is_empty and replace with isempty.
Rik <rik@octave.org>
parents:
23576
diff
changeset
|
1747 if (tmp.isempty ()) |
21990
efce657ceb86
Provide a warning when an array is used in an if/while/until (bug #43098).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21966
diff
changeset
|
1748 retval = true; |
efce657ceb86
Provide a warning when an array is used in an if/while/until (bug #43098).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21966
diff
changeset
|
1749 else |
efce657ceb86
Provide a warning when an array is used in an if/while/until (bug #43098).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21966
diff
changeset
|
1750 { |
efce657ceb86
Provide a warning when an array is used in an if/while/until (bug #43098).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21966
diff
changeset
|
1751 // Reshape into a vector and call all() explicitly, |
efce657ceb86
Provide a warning when an array is used in an if/while/until (bug #43098).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21966
diff
changeset
|
1752 // to avoid Octave:array-as-logical warning. |
efce657ceb86
Provide a warning when an array is used in an if/while/until (bug #43098).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21966
diff
changeset
|
1753 tmp = tmp.reshape (dim_vector (tmp.numel (), 1)); |
efce657ceb86
Provide a warning when an array is used in an if/while/until (bug #43098).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21966
diff
changeset
|
1754 retval = tmp.all ().is_true (); |
efce657ceb86
Provide a warning when an array is used in an if/while/until (bug #43098).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21966
diff
changeset
|
1755 } |
efce657ceb86
Provide a warning when an array is used in an if/while/until (bug #43098).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21966
diff
changeset
|
1756 } |
8346
8302788f09db
fix empty matrix handling in switch statement
Jaroslav Hajek <highegg@gmail.com>
parents:
8345
diff
changeset
|
1757 } |
8302788f09db
fix empty matrix handling in switch statement
Jaroslav Hajek <highegg@gmail.com>
parents:
8345
diff
changeset
|
1758 |
8302788f09db
fix empty matrix handling in switch statement
Jaroslav Hajek <highegg@gmail.com>
parents:
8345
diff
changeset
|
1759 return retval; |
8302788f09db
fix empty matrix handling in switch statement
Jaroslav Hajek <highegg@gmail.com>
parents:
8345
diff
changeset
|
1760 } |
8302788f09db
fix empty matrix handling in switch statement
Jaroslav Hajek <highegg@gmail.com>
parents:
8345
diff
changeset
|
1761 |
8017
260294a5520f
octave_value::idx_type_value: move definition to ov.cc from ov.h
John W. Eaton <jwe@octave.org>
parents:
8011
diff
changeset
|
1762 // Define the idx_type_value function here instead of in ov.h to avoid |
260294a5520f
octave_value::idx_type_value: move definition to ov.cc from ov.h
John W. Eaton <jwe@octave.org>
parents:
8011
diff
changeset
|
1763 // needing definitions for the SIZEOF_X macros in ov.h. |
260294a5520f
octave_value::idx_type_value: move definition to ov.cc from ov.h
John W. Eaton <jwe@octave.org>
parents:
8011
diff
changeset
|
1764 |
260294a5520f
octave_value::idx_type_value: move definition to ov.cc from ov.h
John W. Eaton <jwe@octave.org>
parents:
8011
diff
changeset
|
1765 octave_idx_type |
8024
dc36eb214129
ov.cc (octave_value::idx_type_value): don't include default argument value in definition
John W. Eaton <jwe@octave.org>
parents:
8017
diff
changeset
|
1766 octave_value::idx_type_value (bool req_int, bool frc_str_conv) const |
8017
260294a5520f
octave_value::idx_type_value: move definition to ov.cc from ov.h
John W. Eaton <jwe@octave.org>
parents:
8011
diff
changeset
|
1767 { |
21229
a83e7a384ee0
create and install a subset of config.h in octave-config.h
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
1768 #if defined (OCTAVE_ENABLE_64) |
16323
e769440b39db
provide int64 extractors for octave_value class
John W. Eaton <jwe@octave.org>
parents:
16091
diff
changeset
|
1769 return int64_value (req_int, frc_str_conv); |
e769440b39db
provide int64 extractors for octave_value class
John W. Eaton <jwe@octave.org>
parents:
16091
diff
changeset
|
1770 #else |
8017
260294a5520f
octave_value::idx_type_value: move definition to ov.cc from ov.h
John W. Eaton <jwe@octave.org>
parents:
8011
diff
changeset
|
1771 return int_value (req_int, frc_str_conv); |
260294a5520f
octave_value::idx_type_value: move definition to ov.cc from ov.h
John W. Eaton <jwe@octave.org>
parents:
8011
diff
changeset
|
1772 #endif |
260294a5520f
octave_value::idx_type_value: move definition to ov.cc from ov.h
John W. Eaton <jwe@octave.org>
parents:
8011
diff
changeset
|
1773 } |
260294a5520f
octave_value::idx_type_value: move definition to ov.cc from ov.h
John W. Eaton <jwe@octave.org>
parents:
8011
diff
changeset
|
1774 |
20703
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
1775 Cell |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
1776 octave_value::cell_value (void) const |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
1777 { |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1778 return m_rep->cell_value (); |
20703
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
1779 } |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
1780 |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10687
diff
changeset
|
1781 octave_map |
2376 | 1782 octave_value::map_value (void) const |
1783 { | |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1784 return m_rep->map_value (); |
2376 | 1785 } |
1786 | |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10687
diff
changeset
|
1787 octave_scalar_map |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10687
diff
changeset
|
1788 octave_value::scalar_map_value (void) const |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10687
diff
changeset
|
1789 { |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1790 return m_rep->scalar_map_value (); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10687
diff
changeset
|
1791 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10687
diff
changeset
|
1792 |
2974 | 1793 octave_function * |
7761
5adeea5de26c
symbol table reporting functions
John W. Eaton <jwe@octave.org>
parents:
7719
diff
changeset
|
1794 octave_value::function_value (bool silent) const |
5adeea5de26c
symbol table reporting functions
John W. Eaton <jwe@octave.org>
parents:
7719
diff
changeset
|
1795 { |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1796 return m_rep->function_value (silent); |
7761
5adeea5de26c
symbol table reporting functions
John W. Eaton <jwe@octave.org>
parents:
7719
diff
changeset
|
1797 } |
5adeea5de26c
symbol table reporting functions
John W. Eaton <jwe@octave.org>
parents:
7719
diff
changeset
|
1798 |
23881
5aec653c88e7
new function for accessing classdef objects
John W. Eaton <jwe@octave.org>
parents:
23807
diff
changeset
|
1799 octave_classdef * |
5aec653c88e7
new function for accessing classdef objects
John W. Eaton <jwe@octave.org>
parents:
23807
diff
changeset
|
1800 octave_value::classdef_object_value (bool silent) const |
5aec653c88e7
new function for accessing classdef objects
John W. Eaton <jwe@octave.org>
parents:
23807
diff
changeset
|
1801 { |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1802 return m_rep->classdef_object_value (silent); |
23881
5aec653c88e7
new function for accessing classdef objects
John W. Eaton <jwe@octave.org>
parents:
23807
diff
changeset
|
1803 } |
5aec653c88e7
new function for accessing classdef objects
John W. Eaton <jwe@octave.org>
parents:
23807
diff
changeset
|
1804 |
4700 | 1805 octave_user_function * |
10075
84b0725f4b09
return class types by reference in const Array element access functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10033
diff
changeset
|
1806 octave_value::user_function_value (bool silent) const |
4700 | 1807 { |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1808 return m_rep->user_function_value (silent); |
4700 | 1809 } |
1810 | |
7719
87eda1f8faaa
octave_user_code: new base class for octave_user_script and octave_user_function
John W. Eaton <jwe@octave.org>
parents:
7651
diff
changeset
|
1811 octave_user_script * |
10075
84b0725f4b09
return class types by reference in const Array element access functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10033
diff
changeset
|
1812 octave_value::user_script_value (bool silent) const |
7719
87eda1f8faaa
octave_user_code: new base class for octave_user_script and octave_user_function
John W. Eaton <jwe@octave.org>
parents:
7651
diff
changeset
|
1813 { |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1814 return m_rep->user_script_value (silent); |
7719
87eda1f8faaa
octave_user_code: new base class for octave_user_script and octave_user_function
John W. Eaton <jwe@octave.org>
parents:
7651
diff
changeset
|
1815 } |
87eda1f8faaa
octave_user_code: new base class for octave_user_script and octave_user_function
John W. Eaton <jwe@octave.org>
parents:
7651
diff
changeset
|
1816 |
87eda1f8faaa
octave_user_code: new base class for octave_user_script and octave_user_function
John W. Eaton <jwe@octave.org>
parents:
7651
diff
changeset
|
1817 octave_user_code * |
10075
84b0725f4b09
return class types by reference in const Array element access functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10033
diff
changeset
|
1818 octave_value::user_code_value (bool silent) const |
7719
87eda1f8faaa
octave_user_code: new base class for octave_user_script and octave_user_function
John W. Eaton <jwe@octave.org>
parents:
7651
diff
changeset
|
1819 { |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1820 return m_rep->user_code_value (silent); |
7719
87eda1f8faaa
octave_user_code: new base class for octave_user_script and octave_user_function
John W. Eaton <jwe@octave.org>
parents:
7651
diff
changeset
|
1821 } |
87eda1f8faaa
octave_user_code: new base class for octave_user_script and octave_user_function
John W. Eaton <jwe@octave.org>
parents:
7651
diff
changeset
|
1822 |
4346 | 1823 octave_fcn_handle * |
10075
84b0725f4b09
return class types by reference in const Array element access functions
Jaroslav Hajek <highegg@gmail.com>
parents:
10033
diff
changeset
|
1824 octave_value::fcn_handle_value (bool silent) const |
4343 | 1825 { |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1826 return m_rep->fcn_handle_value (silent); |
4343 | 1827 } |
1828 | |
2880 | 1829 octave_value_list |
1830 octave_value::list_value (void) const | |
1831 { | |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
1832 return m_rep->list_value (); |
2880 | 1833 } |
1834 | |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1835 static dim_vector |
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1836 make_vector_dims (const dim_vector& dv, bool force_vector_conversion, |
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1837 const std::string& my_type, const std::string& wanted_type) |
3419 | 1838 { |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1839 dim_vector retval (dv); |
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1840 retval.chop_trailing_singletons (); |
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1841 octave_idx_type nel = dv.numel (); |
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1842 |
21660
53728df3e4c9
maint: for clarity, call ndims() rather than length() on dimension vectors.
Rik <rik@octave.org>
parents:
21574
diff
changeset
|
1843 if (retval.ndims () > 2 || (retval(0) != 1 && retval(1) != 1)) |
3419 | 1844 { |
20955
77f5591878bf
maint: Use '! expr' rather than '!expr' to conform to coding guidelines.
Rik <rik@octave.org>
parents:
20940
diff
changeset
|
1845 if (! force_vector_conversion) |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
21078
diff
changeset
|
1846 warn_implicit_conversion ("Octave:array-to-vector", |
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
21078
diff
changeset
|
1847 my_type.c_str (), wanted_type.c_str ()); |
10350
12884915a8e4
merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents:
10325
diff
changeset
|
1848 retval = dim_vector (nel, 1); |
3419 | 1849 } |
1850 | |
1851 return retval; | |
1852 } | |
1853 | |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1854 ColumnVector |
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1855 octave_value::column_vector_value (bool force_string_conv, |
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1856 bool frc_vec_conv) const |
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1857 { |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1858 return ColumnVector (vector_value (force_string_conv, |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1859 frc_vec_conv)); |
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1860 } |
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1861 |
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1862 ComplexColumnVector |
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1863 octave_value::complex_column_vector_value (bool force_string_conv, |
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1864 bool frc_vec_conv) const |
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1865 { |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1866 return ComplexColumnVector (complex_vector_value (force_string_conv, |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1867 frc_vec_conv)); |
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1868 } |
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1869 |
3419 | 1870 RowVector |
1871 octave_value::row_vector_value (bool force_string_conv, | |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1872 bool frc_vec_conv) const |
3419 | 1873 { |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1874 return RowVector (vector_value (force_string_conv, |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1875 frc_vec_conv)); |
3419 | 1876 } |
1877 | |
1878 ComplexRowVector | |
1879 octave_value::complex_row_vector_value (bool force_string_conv, | |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1880 bool frc_vec_conv) const |
3419 | 1881 { |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1882 return ComplexRowVector (complex_vector_value (force_string_conv, |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1883 frc_vec_conv)); |
3419 | 1884 } |
1885 | |
1886 Array<double> | |
2376 | 1887 octave_value::vector_value (bool force_string_conv, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
1888 bool force_vector_conversion) const |
2376 | 1889 { |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1890 Array<double> retval = array_value (force_string_conv); |
2376 | 1891 |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1892 return retval.reshape (make_vector_dims (retval.dims (), |
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1893 force_vector_conversion, |
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1894 type_name (), "real vector")); |
2376 | 1895 } |
1896 | |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
21129
diff
changeset
|
1897 template <typename T> |
7997
2b8952e133c9
implement checked conversions between integers
Jaroslav Hajek <highegg@gmail.com>
parents:
7892
diff
changeset
|
1898 static Array<int> |
23534
b6498c088fca
maint: Don't write '> >' for declaration of templates that use templates.
Rik <rik@octave.org>
parents:
23502
diff
changeset
|
1899 convert_to_int_array (const Array<octave_int<T>>& A) |
7997
2b8952e133c9
implement checked conversions between integers
Jaroslav Hajek <highegg@gmail.com>
parents:
7892
diff
changeset
|
1900 { |
7999 | 1901 Array<int> retval (A.dims ()); |
7997
2b8952e133c9
implement checked conversions between integers
Jaroslav Hajek <highegg@gmail.com>
parents:
7892
diff
changeset
|
1902 octave_idx_type n = A.numel (); |
2b8952e133c9
implement checked conversions between integers
Jaroslav Hajek <highegg@gmail.com>
parents:
7892
diff
changeset
|
1903 |
2b8952e133c9
implement checked conversions between integers
Jaroslav Hajek <highegg@gmail.com>
parents:
7892
diff
changeset
|
1904 for (octave_idx_type i = 0; i < n; i++) |
7999 | 1905 retval.xelem (i) = octave_int<int> (A.xelem (i)); |
8039
cd90e2842080
Add additional integer math and conversion warnings, set their default state to be off and add the intwarning function
David Bateman <dbateman@free.fr>
parents:
8024
diff
changeset
|
1906 |
7999 | 1907 return retval; |
7997
2b8952e133c9
implement checked conversions between integers
Jaroslav Hajek <highegg@gmail.com>
parents:
7892
diff
changeset
|
1908 } |
2b8952e133c9
implement checked conversions between integers
Jaroslav Hajek <highegg@gmail.com>
parents:
7892
diff
changeset
|
1909 |
4044 | 1910 Array<int> |
20743
b6408331bfa2
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20741
diff
changeset
|
1911 octave_value::int_vector_value (bool require_int, bool force_string_conv, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
1912 bool force_vector_conversion) const |
4044 | 1913 { |
1914 Array<int> retval; | |
1915 | |
23580
2230f9e10fb3
maint: Deprecate is_integer_type and replace with isinteger.
Rik <rik@octave.org>
parents:
23577
diff
changeset
|
1916 if (isinteger ()) |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1917 { |
7997
2b8952e133c9
implement checked conversions between integers
Jaroslav Hajek <highegg@gmail.com>
parents:
7892
diff
changeset
|
1918 if (is_int32_type ()) |
2b8952e133c9
implement checked conversions between integers
Jaroslav Hajek <highegg@gmail.com>
parents:
7892
diff
changeset
|
1919 retval = convert_to_int_array (int32_array_value ()); |
2b8952e133c9
implement checked conversions between integers
Jaroslav Hajek <highegg@gmail.com>
parents:
7892
diff
changeset
|
1920 else if (is_int64_type ()) |
2b8952e133c9
implement checked conversions between integers
Jaroslav Hajek <highegg@gmail.com>
parents:
7892
diff
changeset
|
1921 retval = convert_to_int_array (int64_array_value ()); |
2b8952e133c9
implement checked conversions between integers
Jaroslav Hajek <highegg@gmail.com>
parents:
7892
diff
changeset
|
1922 else if (is_int16_type ()) |
2b8952e133c9
implement checked conversions between integers
Jaroslav Hajek <highegg@gmail.com>
parents:
7892
diff
changeset
|
1923 retval = convert_to_int_array (int16_array_value ()); |
2b8952e133c9
implement checked conversions between integers
Jaroslav Hajek <highegg@gmail.com>
parents:
7892
diff
changeset
|
1924 else if (is_int8_type ()) |
2b8952e133c9
implement checked conversions between integers
Jaroslav Hajek <highegg@gmail.com>
parents:
7892
diff
changeset
|
1925 retval = convert_to_int_array (int8_array_value ()); |
2b8952e133c9
implement checked conversions between integers
Jaroslav Hajek <highegg@gmail.com>
parents:
7892
diff
changeset
|
1926 else if (is_uint32_type ()) |
2b8952e133c9
implement checked conversions between integers
Jaroslav Hajek <highegg@gmail.com>
parents:
7892
diff
changeset
|
1927 retval = convert_to_int_array (uint32_array_value ()); |
2b8952e133c9
implement checked conversions between integers
Jaroslav Hajek <highegg@gmail.com>
parents:
7892
diff
changeset
|
1928 else if (is_uint64_type ()) |
2b8952e133c9
implement checked conversions between integers
Jaroslav Hajek <highegg@gmail.com>
parents:
7892
diff
changeset
|
1929 retval = convert_to_int_array (uint64_array_value ()); |
2b8952e133c9
implement checked conversions between integers
Jaroslav Hajek <highegg@gmail.com>
parents:
7892
diff
changeset
|
1930 else if (is_uint16_type ()) |
2b8952e133c9
implement checked conversions between integers
Jaroslav Hajek <highegg@gmail.com>
parents:
7892
diff
changeset
|
1931 retval = convert_to_int_array (uint16_array_value ()); |
2b8952e133c9
implement checked conversions between integers
Jaroslav Hajek <highegg@gmail.com>
parents:
7892
diff
changeset
|
1932 else if (is_uint8_type ()) |
2b8952e133c9
implement checked conversions between integers
Jaroslav Hajek <highegg@gmail.com>
parents:
7892
diff
changeset
|
1933 retval = convert_to_int_array (uint8_array_value ()); |
2b8952e133c9
implement checked conversions between integers
Jaroslav Hajek <highegg@gmail.com>
parents:
7892
diff
changeset
|
1934 else |
2b8952e133c9
implement checked conversions between integers
Jaroslav Hajek <highegg@gmail.com>
parents:
7892
diff
changeset
|
1935 retval = array_value (force_string_conv); |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1936 } |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1937 else |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1938 { |
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1939 const NDArray a = array_value (force_string_conv); |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1940 |
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1941 if (require_int) |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1942 { |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1943 retval.resize (a.dims ()); |
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1944 for (octave_idx_type i = 0; i < a.numel (); i++) |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1945 { |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1946 double ai = a.elem (i); |
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1947 int v = static_cast<int> (ai); |
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1948 if (ai == v) |
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1949 retval.xelem (i) = v; |
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1950 else |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1951 { |
25927
d6581134daaa
Emit an error when utility matrices (zeros, ones, rand, etc.) are given a fractional dimension in a dimension vector (bug #54781).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
1952 error_with_cfn ("conversion of %g to int value failed", ai); |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1953 break; |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1954 } |
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1955 } |
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1956 } |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1957 else |
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1958 retval = Array<int> (a); |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1959 } |
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
1960 |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1961 return retval.reshape (make_vector_dims (retval.dims (), |
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1962 force_vector_conversion, |
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1963 type_name (), "integer vector")); |
4044 | 1964 } |
1965 | |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
21129
diff
changeset
|
1966 template <typename T> |
8811 | 1967 static Array<octave_idx_type> |
23534
b6498c088fca
maint: Don't write '> >' for declaration of templates that use templates.
Rik <rik@octave.org>
parents:
23502
diff
changeset
|
1968 convert_to_octave_idx_type_array (const Array<octave_int<T>>& A) |
8811 | 1969 { |
1970 Array<octave_idx_type> retval (A.dims ()); | |
1971 octave_idx_type n = A.numel (); | |
1972 | |
1973 for (octave_idx_type i = 0; i < n; i++) | |
1974 retval.xelem (i) = octave_int<octave_idx_type> (A.xelem (i)); | |
1975 | |
1976 return retval; | |
1977 } | |
1978 | |
1979 Array<octave_idx_type> | |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
9368
diff
changeset
|
1980 octave_value::octave_idx_type_vector_value (bool require_int, |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
9368
diff
changeset
|
1981 bool force_string_conv, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
1982 bool force_vector_conversion) const |
8811 | 1983 { |
1984 Array<octave_idx_type> retval; | |
1985 | |
23580
2230f9e10fb3
maint: Deprecate is_integer_type and replace with isinteger.
Rik <rik@octave.org>
parents:
23577
diff
changeset
|
1986 if (isinteger ()) |
8811 | 1987 { |
1988 if (is_int32_type ()) | |
1989 retval = convert_to_octave_idx_type_array (int32_array_value ()); | |
1990 else if (is_int64_type ()) | |
1991 retval = convert_to_octave_idx_type_array (int64_array_value ()); | |
1992 else if (is_int16_type ()) | |
1993 retval = convert_to_octave_idx_type_array (int16_array_value ()); | |
1994 else if (is_int8_type ()) | |
1995 retval = convert_to_octave_idx_type_array (int8_array_value ()); | |
1996 else if (is_uint32_type ()) | |
1997 retval = convert_to_octave_idx_type_array (uint32_array_value ()); | |
1998 else if (is_uint64_type ()) | |
1999 retval = convert_to_octave_idx_type_array (uint64_array_value ()); | |
2000 else if (is_uint16_type ()) | |
2001 retval = convert_to_octave_idx_type_array (uint16_array_value ()); | |
2002 else if (is_uint8_type ()) | |
2003 retval = convert_to_octave_idx_type_array (uint8_array_value ()); | |
2004 else | |
2005 retval = array_value (force_string_conv); | |
2006 } | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2007 else |
8811 | 2008 { |
2009 const NDArray a = array_value (force_string_conv); | |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2010 |
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2011 if (require_int) |
8811 | 2012 { |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2013 retval.resize (a.dims ()); |
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2014 for (octave_idx_type i = 0; i < a.numel (); i++) |
8811 | 2015 { |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2016 double ai = a.elem (i); |
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2017 octave_idx_type v = static_cast<octave_idx_type> (ai); |
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2018 if (ai == v) |
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2019 retval.xelem (i) = v; |
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2020 else |
8811 | 2021 { |
25927
d6581134daaa
Emit an error when utility matrices (zeros, ones, rand, etc.) are given a fractional dimension in a dimension vector (bug #54781).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
2022 error_with_cfn ("conversion of %g to octave_idx_type value failed", ai); |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2023 break; |
8811 | 2024 } |
2025 } | |
2026 } | |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2027 else |
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2028 retval = Array<octave_idx_type> (a); |
8811 | 2029 } |
2030 | |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2031 return retval.reshape (make_vector_dims (retval.dims (), |
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2032 force_vector_conversion, |
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2033 type_name (), "integer vector")); |
8811 | 2034 } |
2035 | |
3419 | 2036 Array<Complex> |
2376 | 2037 octave_value::complex_vector_value (bool force_string_conv, |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
2038 bool force_vector_conversion) const |
2376 | 2039 { |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
2040 Array<Complex> retval = complex_array_value (force_string_conv); |
2376 | 2041 |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2042 return retval.reshape (make_vector_dims (retval.dims (), |
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2043 force_vector_conversion, |
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2044 type_name (), "complex vector")); |
2376 | 2045 } |
2046 | |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2047 FloatColumnVector |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2048 octave_value::float_column_vector_value (bool force_string_conv, |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
2049 bool frc_vec_conv) const |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2050 { |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2051 return FloatColumnVector (float_vector_value (force_string_conv, |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
2052 frc_vec_conv)); |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2053 } |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2054 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2055 FloatComplexColumnVector |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2056 octave_value::float_complex_column_vector_value (bool force_string_conv, |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
2057 bool frc_vec_conv) const |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2058 { |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2059 return |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2060 FloatComplexColumnVector (float_complex_vector_value (force_string_conv, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2061 frc_vec_conv)); |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2062 } |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2063 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2064 FloatRowVector |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2065 octave_value::float_row_vector_value (bool force_string_conv, |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
2066 bool frc_vec_conv) const |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2067 { |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2068 return FloatRowVector (float_vector_value (force_string_conv, |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
2069 frc_vec_conv)); |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2070 } |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2071 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2072 FloatComplexRowVector |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2073 octave_value::float_complex_row_vector_value (bool force_string_conv, |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
2074 bool frc_vec_conv) const |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2075 { |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2076 return FloatComplexRowVector (float_complex_vector_value (force_string_conv, |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
2077 frc_vec_conv)); |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2078 } |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2079 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2080 Array<float> |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2081 octave_value::float_vector_value (bool force_string_conv, |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
2082 bool force_vector_conversion) const |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2083 { |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
2084 Array<float> retval = float_array_value (force_string_conv); |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2085 |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2086 return retval.reshape (make_vector_dims (retval.dims (), |
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2087 force_vector_conversion, |
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2088 type_name (), "real vector")); |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2089 } |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2090 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2091 Array<FloatComplex> |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2092 octave_value::float_complex_vector_value (bool force_string_conv, |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
2093 bool force_vector_conversion) const |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2094 { |
7892
7ca2735d74c2
simplify & cleanup octave_value::XXX_vector_value functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7885
diff
changeset
|
2095 Array<FloatComplex> retval = float_complex_array_value (force_string_conv); |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2096 |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2097 return retval.reshape (make_vector_dims (retval.dims (), |
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2098 force_vector_conversion, |
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2099 type_name (), "complex vector")); |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2100 } |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
2101 |
20700
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20687
diff
changeset
|
2102 // NAME can't always be "x ## FCN" because some of the original |
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20687
diff
changeset
|
2103 // value extraction functions perform implicit type conversions that we |
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20687
diff
changeset
|
2104 // wish to avoid for these functions. |
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20687
diff
changeset
|
2105 |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21990
diff
changeset
|
2106 #define XVALUE_EXTRACTOR(TYPE, NAME, FCN) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21990
diff
changeset
|
2107 TYPE \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21990
diff
changeset
|
2108 octave_value::NAME (const char *fmt, ...) const \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21990
diff
changeset
|
2109 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21990
diff
changeset
|
2110 TYPE retval; \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21990
diff
changeset
|
2111 \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21990
diff
changeset
|
2112 try \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21990
diff
changeset
|
2113 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21990
diff
changeset
|
2114 retval = FCN (); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21990
diff
changeset
|
2115 } \ |
29163
8f67ad8b3103
maint: Updating naming conventions for exceptions and use const where possible.
Rik <rik@octave.org>
parents:
28975
diff
changeset
|
2116 catch (octave::execution_exception& ee) \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21990
diff
changeset
|
2117 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21990
diff
changeset
|
2118 if (fmt) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21990
diff
changeset
|
2119 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21990
diff
changeset
|
2120 va_list args; \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21990
diff
changeset
|
2121 va_start (args, fmt); \ |
29163
8f67ad8b3103
maint: Updating naming conventions for exceptions and use const where possible.
Rik <rik@octave.org>
parents:
28975
diff
changeset
|
2122 verror (ee, fmt, args); \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21990
diff
changeset
|
2123 va_end (args); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21990
diff
changeset
|
2124 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21990
diff
changeset
|
2125 \ |
29163
8f67ad8b3103
maint: Updating naming conventions for exceptions and use const where possible.
Rik <rik@octave.org>
parents:
28975
diff
changeset
|
2126 throw ee; \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21990
diff
changeset
|
2127 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21990
diff
changeset
|
2128 \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21990
diff
changeset
|
2129 return retval; \ |
20700
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20687
diff
changeset
|
2130 } |
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20687
diff
changeset
|
2131 |
20703
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2132 XVALUE_EXTRACTOR (short int, xshort_value, short_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2133 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2134 XVALUE_EXTRACTOR (unsigned short int, xushort_value, ushort_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2135 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2136 XVALUE_EXTRACTOR (int, xint_value, int_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2137 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2138 XVALUE_EXTRACTOR (unsigned int, xuint_value, uint_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2139 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2140 XVALUE_EXTRACTOR (int, xnint_value, nint_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2141 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2142 XVALUE_EXTRACTOR (long int, xlong_value, long_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2143 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2144 XVALUE_EXTRACTOR (unsigned long int, xulong_value, ulong_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2145 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2146 XVALUE_EXTRACTOR (int64_t, xint64_value, int64_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2147 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2148 XVALUE_EXTRACTOR (uint64_t, xuint64_value, uint64_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2149 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2150 XVALUE_EXTRACTOR (octave_idx_type, xidx_type_value, idx_type_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2151 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2152 XVALUE_EXTRACTOR (double, xdouble_value, double_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2153 XVALUE_EXTRACTOR (float, xfloat_value, float_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2154 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2155 XVALUE_EXTRACTOR (double, xscalar_value, scalar_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2156 XVALUE_EXTRACTOR (float, xfloat_scalar_value, float_scalar_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2157 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2158 XVALUE_EXTRACTOR (Matrix, xmatrix_value, matrix_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2159 XVALUE_EXTRACTOR (FloatMatrix, xfloat_matrix_value, float_matrix_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2160 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2161 XVALUE_EXTRACTOR (NDArray, xarray_value, array_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2162 XVALUE_EXTRACTOR (FloatNDArray, xfloat_array_value, float_array_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2163 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2164 XVALUE_EXTRACTOR (Complex, xcomplex_value, complex_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2165 XVALUE_EXTRACTOR (FloatComplex, xfloat_complex_value, float_complex_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2166 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2167 XVALUE_EXTRACTOR (ComplexMatrix, xcomplex_matrix_value, complex_matrix_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2168 XVALUE_EXTRACTOR (FloatComplexMatrix, xfloat_complex_matrix_value, float_complex_matrix_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2169 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2170 XVALUE_EXTRACTOR (ComplexNDArray, xcomplex_array_value, complex_array_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2171 XVALUE_EXTRACTOR (FloatComplexNDArray, xfloat_complex_array_value, float_complex_array_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2172 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2173 XVALUE_EXTRACTOR (bool, xbool_value, bool_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2174 XVALUE_EXTRACTOR (boolMatrix, xbool_matrix_value, bool_matrix_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2175 XVALUE_EXTRACTOR (boolNDArray, xbool_array_value, bool_array_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2176 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2177 XVALUE_EXTRACTOR (charMatrix, xchar_matrix_value, char_matrix_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2178 XVALUE_EXTRACTOR (charNDArray, xchar_array_value, char_array_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2179 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2180 XVALUE_EXTRACTOR (SparseMatrix, xsparse_matrix_value, sparse_matrix_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2181 XVALUE_EXTRACTOR (SparseComplexMatrix, xsparse_complex_matrix_value, sparse_complex_matrix_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2182 XVALUE_EXTRACTOR (SparseBoolMatrix, xsparse_bool_matrix_value, sparse_bool_matrix_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2183 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2184 XVALUE_EXTRACTOR (DiagMatrix, xdiag_matrix_value, diag_matrix_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2185 XVALUE_EXTRACTOR (FloatDiagMatrix, xfloat_diag_matrix_value, float_diag_matrix_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2186 XVALUE_EXTRACTOR (ComplexDiagMatrix, xcomplex_diag_matrix_value, complex_diag_matrix_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2187 XVALUE_EXTRACTOR (FloatComplexDiagMatrix, xfloat_complex_diag_matrix_value, float_complex_diag_matrix_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2188 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2189 XVALUE_EXTRACTOR (PermMatrix, xperm_matrix_value, perm_matrix_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2190 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2191 XVALUE_EXTRACTOR (octave_int8, xint8_scalar_value, int8_scalar_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2192 XVALUE_EXTRACTOR (octave_int16, xint16_scalar_value, int16_scalar_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2193 XVALUE_EXTRACTOR (octave_int32, xint32_scalar_value, int32_scalar_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2194 XVALUE_EXTRACTOR (octave_int64, xint64_scalar_value, int64_scalar_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2195 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2196 XVALUE_EXTRACTOR (octave_uint8, xuint8_scalar_value, uint8_scalar_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2197 XVALUE_EXTRACTOR (octave_uint16, xuint16_scalar_value, uint16_scalar_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2198 XVALUE_EXTRACTOR (octave_uint32, xuint32_scalar_value, uint32_scalar_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2199 XVALUE_EXTRACTOR (octave_uint64, xuint64_scalar_value, uint64_scalar_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2200 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2201 XVALUE_EXTRACTOR (int8NDArray, xint8_array_value, int8_array_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2202 XVALUE_EXTRACTOR (int16NDArray, xint16_array_value, int16_array_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2203 XVALUE_EXTRACTOR (int32NDArray, xint32_array_value, int32_array_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2204 XVALUE_EXTRACTOR (int64NDArray, xint64_array_value, int64_array_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2205 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2206 XVALUE_EXTRACTOR (uint8NDArray, xuint8_array_value, uint8_array_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2207 XVALUE_EXTRACTOR (uint16NDArray, xuint16_array_value, uint16_array_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2208 XVALUE_EXTRACTOR (uint32NDArray, xuint32_array_value, uint32_array_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2209 XVALUE_EXTRACTOR (uint64NDArray, xuint64_array_value, uint64_array_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2210 |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
2211 XVALUE_EXTRACTOR (std::string, xstring_value, m_rep->xstring_value) |
20990
fc9cca99b2de
Deprecate all_strings, replace with string_vector_value.
Rik <rik@octave.org>
parents:
20978
diff
changeset
|
2212 XVALUE_EXTRACTOR (string_vector, xstring_vector_value, string_vector_value) |
20703
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2213 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2214 XVALUE_EXTRACTOR (Cell, xcell_value, cell_value) |
20700
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20687
diff
changeset
|
2215 XVALUE_EXTRACTOR (Array<std::string>, xcellstr_value, cellstr_value) |
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20687
diff
changeset
|
2216 |
30835
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
2217 XVALUE_EXTRACTOR (octave::range<double>, xrange_value, range_value) |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
2218 |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
2219 // For now, disable all but ov_range<double>. |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
2220 |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
2221 #if 0 |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
2222 |
28646
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28639
diff
changeset
|
2223 XVALUE_EXTRACTOR (octave::range<float>, xfloat_range_value, float_range_value) |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28639
diff
changeset
|
2224 XVALUE_EXTRACTOR (octave::range<octave_int8>, xint8_range_value, int8_range_value) |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28639
diff
changeset
|
2225 XVALUE_EXTRACTOR (octave::range<octave_int16>, xint16_range_value, int16_range_value) |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28639
diff
changeset
|
2226 XVALUE_EXTRACTOR (octave::range<octave_int32>, xint32_range_value, int32_range_value) |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28639
diff
changeset
|
2227 XVALUE_EXTRACTOR (octave::range<octave_int64>, xint64_range_value, int64_range_value) |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28639
diff
changeset
|
2228 XVALUE_EXTRACTOR (octave::range<octave_uint8>, xuint8_range_value, uint8_range_value) |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28639
diff
changeset
|
2229 XVALUE_EXTRACTOR (octave::range<octave_uint16>, xuint16_range_value, uint16_range_value) |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28639
diff
changeset
|
2230 XVALUE_EXTRACTOR (octave::range<octave_uint32>, xuint32_range_value, uint32_range_value) |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28639
diff
changeset
|
2231 XVALUE_EXTRACTOR (octave::range<octave_uint64>, xuint64_range_value, uint64_range_value) |
20703
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2232 |
30835
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
2233 #endif |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
2234 |
20703
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2235 XVALUE_EXTRACTOR (octave_map, xmap_value, map_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2236 XVALUE_EXTRACTOR (octave_scalar_map, xscalar_map_value, scalar_map_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2237 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2238 XVALUE_EXTRACTOR (ColumnVector, xcolumn_vector_value, column_vector_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2239 XVALUE_EXTRACTOR (ComplexColumnVector, xcomplex_column_vector_value, complex_column_vector_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2240 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2241 XVALUE_EXTRACTOR (RowVector, xrow_vector_value, row_vector_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2242 XVALUE_EXTRACTOR (ComplexRowVector, xcomplex_row_vector_value, complex_row_vector_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2243 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2244 XVALUE_EXTRACTOR (FloatColumnVector, xfloat_column_vector_value, float_column_vector_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2245 XVALUE_EXTRACTOR (FloatComplexColumnVector, xfloat_complex_column_vector_value, float_complex_column_vector_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2246 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2247 XVALUE_EXTRACTOR (FloatRowVector, xfloat_row_vector_value, float_row_vector_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2248 XVALUE_EXTRACTOR (FloatComplexRowVector, xfloat_complex_row_vector_value, float_complex_row_vector_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2249 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2250 XVALUE_EXTRACTOR (Array<int>, xint_vector_value, int_vector_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2251 XVALUE_EXTRACTOR (Array<octave_idx_type>, xoctave_idx_type_vector_value, octave_idx_type_vector_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2252 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2253 XVALUE_EXTRACTOR (Array<double>, xvector_value, vector_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2254 XVALUE_EXTRACTOR (Array<Complex>, xcomplex_vector_value, complex_vector_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2255 |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2256 XVALUE_EXTRACTOR (Array<float>, xfloat_vector_value, float_vector_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2257 XVALUE_EXTRACTOR (Array<FloatComplex>, xfloat_complex_vector_value, float_complex_vector_value) |
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
2258 |
20741
a5ab31b52ae8
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20704
diff
changeset
|
2259 XVALUE_EXTRACTOR (octave_function *, xfunction_value, function_value) |
a5ab31b52ae8
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20704
diff
changeset
|
2260 XVALUE_EXTRACTOR (octave_user_function *, xuser_function_value, user_function_value) |
a5ab31b52ae8
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20704
diff
changeset
|
2261 XVALUE_EXTRACTOR (octave_user_script *, xuser_script_value, user_script_value) |
a5ab31b52ae8
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20704
diff
changeset
|
2262 XVALUE_EXTRACTOR (octave_user_code *, xuser_code_value, user_code_value) |
a5ab31b52ae8
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20704
diff
changeset
|
2263 XVALUE_EXTRACTOR (octave_fcn_handle *, xfcn_handle_value, fcn_handle_value) |
a5ab31b52ae8
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20704
diff
changeset
|
2264 |
a5ab31b52ae8
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20704
diff
changeset
|
2265 XVALUE_EXTRACTOR (octave_value_list, xlist_value, list_value) |
a5ab31b52ae8
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20704
diff
changeset
|
2266 |
20700
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20687
diff
changeset
|
2267 #undef XVALUE_EXTRACTOR |
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20687
diff
changeset
|
2268 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2269 octave_value |
8523
ad3afaaa19c1
implement non-copying contiguous range indexing
Jaroslav Hajek <highegg@gmail.com>
parents:
8367
diff
changeset
|
2270 octave_value::storable_value (void) const |
8150
283989f2da9b
make null assignment matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
8039
diff
changeset
|
2271 { |
8523
ad3afaaa19c1
implement non-copying contiguous range indexing
Jaroslav Hajek <highegg@gmail.com>
parents:
8367
diff
changeset
|
2272 octave_value retval = *this; |
23589
63950abd2f81
maint: Deprecate is_null_type and replace with isnull.
Rik <rik@octave.org>
parents:
23587
diff
changeset
|
2273 if (isnull ()) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
2274 retval = octave_value (m_rep->empty_clone ()); |
28588
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28519
diff
changeset
|
2275 else if (is_magic_int ()) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
2276 retval = octave_value (m_rep->double_value ()); |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
2277 else if (is_range () && ! m_rep->is_storable ()) |
29353
715344f405f0
improve handling of nan, infinite value, and empty ranges (bug #59229)
John W. Eaton <jwe@octave.org>
parents:
29163
diff
changeset
|
2278 error ("range with infinite number of elements cannot be stored"); |
8150
283989f2da9b
make null assignment matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
8039
diff
changeset
|
2279 else |
8523
ad3afaaa19c1
implement non-copying contiguous range indexing
Jaroslav Hajek <highegg@gmail.com>
parents:
8367
diff
changeset
|
2280 retval.maybe_economize (); |
ad3afaaa19c1
implement non-copying contiguous range indexing
Jaroslav Hajek <highegg@gmail.com>
parents:
8367
diff
changeset
|
2281 |
ad3afaaa19c1
implement non-copying contiguous range indexing
Jaroslav Hajek <highegg@gmail.com>
parents:
8367
diff
changeset
|
2282 return retval; |
8150
283989f2da9b
make null assignment matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
8039
diff
changeset
|
2283 } |
283989f2da9b
make null assignment matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
8039
diff
changeset
|
2284 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2285 void |
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2286 octave_value::make_storable_value (void) |
8150
283989f2da9b
make null assignment matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
8039
diff
changeset
|
2287 { |
23589
63950abd2f81
maint: Deprecate is_null_type and replace with isnull.
Rik <rik@octave.org>
parents:
23587
diff
changeset
|
2288 if (isnull ()) |
8150
283989f2da9b
make null assignment matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
8039
diff
changeset
|
2289 { |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
2290 octave_base_value *rc = m_rep->empty_clone (); |
30139
c789e728d57a
Backed out changeset 938794bc82b7
John W. Eaton <jwe@octave.org>
parents:
30133
diff
changeset
|
2291 if (--m_rep->count == 0) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
2292 delete m_rep; |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
2293 m_rep = rc; |
8150
283989f2da9b
make null assignment matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
8039
diff
changeset
|
2294 } |
28588
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28519
diff
changeset
|
2295 else if (is_magic_int ()) |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28519
diff
changeset
|
2296 { |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
2297 octave_base_value *rc = new octave_scalar (m_rep->double_value ()); |
30139
c789e728d57a
Backed out changeset 938794bc82b7
John W. Eaton <jwe@octave.org>
parents:
30133
diff
changeset
|
2298 if (--m_rep->count == 0) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
2299 delete m_rep; |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
2300 m_rep = rc; |
28588
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28519
diff
changeset
|
2301 } |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
2302 else if (is_range () && ! m_rep->is_storable ()) |
29353
715344f405f0
improve handling of nan, infinite value, and empty ranges (bug #59229)
John W. Eaton <jwe@octave.org>
parents:
29163
diff
changeset
|
2303 error ("range with infinite number of elements cannot be stored"); |
8523
ad3afaaa19c1
implement non-copying contiguous range indexing
Jaroslav Hajek <highegg@gmail.com>
parents:
8367
diff
changeset
|
2304 else |
ad3afaaa19c1
implement non-copying contiguous range indexing
Jaroslav Hajek <highegg@gmail.com>
parents:
8367
diff
changeset
|
2305 maybe_economize (); |
8150
283989f2da9b
make null assignment matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
8039
diff
changeset
|
2306 } |
283989f2da9b
make null assignment matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
8039
diff
changeset
|
2307 |
24668
d4dd741b2794
new octave_value functions for formatting output
John W. Eaton <jwe@octave.org>
parents:
24565
diff
changeset
|
2308 float_display_format |
d4dd741b2794
new octave_value functions for formatting output
John W. Eaton <jwe@octave.org>
parents:
24565
diff
changeset
|
2309 octave_value::get_edit_display_format (void) const |
d4dd741b2794
new octave_value functions for formatting output
John W. Eaton <jwe@octave.org>
parents:
24565
diff
changeset
|
2310 { |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
2311 return m_rep->get_edit_display_format (); |
24668
d4dd741b2794
new octave_value functions for formatting output
John W. Eaton <jwe@octave.org>
parents:
24565
diff
changeset
|
2312 } |
d4dd741b2794
new octave_value functions for formatting output
John W. Eaton <jwe@octave.org>
parents:
24565
diff
changeset
|
2313 |
4944 | 2314 int |
23059
b98ebcd7f11c
move some octave stream classes into octave namespace
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
2315 octave_value::write (octave::stream& os, int block_size, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
2316 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:
21730
diff
changeset
|
2317 octave::mach_info::float_format flt_fmt) const |
4944 | 2318 { |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
2319 return m_rep->write (os, block_size, output_type, skip, flt_fmt); |
4944 | 2320 } |
2321 | |
3933 | 2322 void |
2323 octave_value::print_info (std::ostream& os, const std::string& prefix) const | |
2324 { | |
2325 os << prefix << "type_name: " << type_name () << "\n" | |
30139
c789e728d57a
Backed out changeset 938794bc82b7
John W. Eaton <jwe@octave.org>
parents:
30133
diff
changeset
|
2326 << prefix << "count: " << get_count () << "\n" |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
2327 << prefix << "m_rep info: "; |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
2328 |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
2329 m_rep->print_info (os, prefix + ' '); |
3933 | 2330 } |
2331 | |
30852
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2332 bool octave_value::load_ascii (std::istream& is) |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2333 { |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2334 bool status = m_rep->load_ascii (is); |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2335 |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2336 // Force conversion of legacy objects. |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2337 if (is_legacy_object ()) |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2338 maybe_mutate (); |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2339 |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2340 return status; |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2341 } |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2342 bool octave_value::load_binary (std::istream& is, bool swap, |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2343 octave::mach_info::float_format fmt) |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2344 { |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2345 bool status = m_rep->load_binary (is, swap, fmt); |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2346 |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2347 // Force conversion of legacy objects. |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2348 if (is_legacy_object ()) |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2349 maybe_mutate (); |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2350 |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2351 return status; |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2352 } |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2353 |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2354 bool octave_value::load_hdf5 (octave_hdf5_id loc_id, const char *name) |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2355 { |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2356 bool status = m_rep->load_hdf5 (loc_id, name); |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2357 |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2358 // Force conversion of legacy objects. |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2359 if (is_legacy_object ()) |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2360 maybe_mutate (); |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2361 |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2362 return status; |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2363 } |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
2364 |
30232
a2936935c7c8
attempt to limit possible const_cast damage
John W. Eaton <jwe@octave.org>
parents:
30142
diff
changeset
|
2365 const void * |
28126
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2366 octave_value::mex_get_data (mxClassID class_id, mxComplexity complexity) const |
3203 | 2367 { |
28126
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2368 // If class_id is set to mxUNKNOWN_CLASS, return data for any type. |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2369 // Otherwise, require that REP matches the requested type and |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2370 // complexity. |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2371 |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2372 if (class_id != mxUNKNOWN_CLASS) |
3203 | 2373 { |
28126
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2374 bool type_ok = false; |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2375 |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2376 switch (class_id) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
2377 { |
28126
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2378 case mxDOUBLE_CLASS: |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2379 type_ok = is_double_type (); |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2380 break; |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2381 |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2382 case mxSINGLE_CLASS: |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2383 type_ok = is_single_type (); |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2384 break; |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2385 |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2386 case mxINT8_CLASS: |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2387 type_ok = is_int8_type (); |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2388 break; |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2389 |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2390 case mxINT16_CLASS: |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2391 type_ok = is_int16_type (); |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2392 break; |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2393 |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2394 case mxINT32_CLASS: |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2395 type_ok = is_int32_type (); |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2396 break; |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2397 |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2398 case mxINT64_CLASS: |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2399 type_ok = is_int64_type (); |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2400 break; |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2401 |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2402 case mxUINT8_CLASS: |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2403 type_ok = is_uint8_type (); |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2404 break; |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2405 |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2406 case mxUINT16_CLASS: |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2407 type_ok = is_uint16_type (); |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2408 break; |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2409 |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2410 case mxUINT32_CLASS: |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2411 type_ok = is_uint32_type (); |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2412 break; |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2413 |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2414 case mxUINT64_CLASS: |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2415 type_ok = is_uint64_type (); |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2416 break; |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2417 |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2418 default: |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2419 // We only expect to see numeric types explicitly requested. |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2420 error ("mex_get_data: unexpected type requested"); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
2421 } |
28126
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2422 |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2423 if (! type_ok) |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2424 error ("mex_get_data: type mismatch"); |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2425 |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2426 if (complexity == mxCOMPLEX && ! iscomplex ()) |
4c21f99b4ad5
handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2427 error ("mex_get_data: objectis not complex as requested"); |
3203 | 2428 } |
2429 | |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
2430 return m_rep->mex_get_data (); |
24565
dbec1e04f499
accept type_info obj as arg to binary_op, unary_op, and cat_op functions
John W. Eaton <jwe@octave.org>
parents:
24540
diff
changeset
|
2431 } |
dbec1e04f499
accept type_info obj as arg to binary_op, unary_op, and cat_op functions
John W. Eaton <jwe@octave.org>
parents:
24540
diff
changeset
|
2432 |
21102
dfcb9d74b253
Rename local gripe_XXX functions to err_XXX or warn_XXX.
Rik <rik@octave.org>
parents:
21100
diff
changeset
|
2433 OCTAVE_NORETURN static void |
dfcb9d74b253
Rename local gripe_XXX functions to err_XXX or warn_XXX.
Rik <rik@octave.org>
parents:
21100
diff
changeset
|
2434 err_unary_op_conversion_failed (const std::string& op, |
dfcb9d74b253
Rename local gripe_XXX functions to err_XXX or warn_XXX.
Rik <rik@octave.org>
parents:
21100
diff
changeset
|
2435 const std::string& tn) |
3203 | 2436 { |
15466
d174210ce1ec
use ' instead of ` in error messages, warnings and most comments
John W. Eaton <jwe@octave.org>
parents:
15428
diff
changeset
|
2437 error ("operator %s: type conversion for '%s' failed", |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
2438 op.c_str (), tn.c_str ()); |
3203 | 2439 } |
2440 | |
28631
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2441 OCTAVE_NORETURN static void |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2442 err_unary_op (const std::string& on, const std::string& tn) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2443 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2444 error ("unary operator '%s' not implemented for '%s' operands", |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2445 on.c_str (), tn.c_str ()); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2446 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2447 |
10614
d1194069e58c
optimize code handling ++,--
Jaroslav Hajek <highegg@gmail.com>
parents:
10544
diff
changeset
|
2448 octave_value& |
28631
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2449 octave_value::non_const_unary_op (unary_op op) |
3203 | 2450 { |
9607
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
2451 if (op == op_incr || op == op_decr) |
3203 | 2452 { |
21102
dfcb9d74b253
Rename local gripe_XXX functions to err_XXX or warn_XXX.
Rik <rik@octave.org>
parents:
21100
diff
changeset
|
2453 // We want the error just here, because in the other branch this should |
10614
d1194069e58c
optimize code handling ++,--
Jaroslav Hajek <highegg@gmail.com>
parents:
10544
diff
changeset
|
2454 // not happen, and if it did anyway (internal error), the message would |
d1194069e58c
optimize code handling ++,--
Jaroslav Hajek <highegg@gmail.com>
parents:
10544
diff
changeset
|
2455 // be confusing. |
d1194069e58c
optimize code handling ++,--
Jaroslav Hajek <highegg@gmail.com>
parents:
10544
diff
changeset
|
2456 if (is_undefined ()) |
d1194069e58c
optimize code handling ++,--
Jaroslav Hajek <highegg@gmail.com>
parents:
10544
diff
changeset
|
2457 { |
d1194069e58c
optimize code handling ++,--
Jaroslav Hajek <highegg@gmail.com>
parents:
10544
diff
changeset
|
2458 std::string op_str = unary_op_as_string (op); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2459 error ("in x%s or %sx, x must be defined first", |
10614
d1194069e58c
optimize code handling ++,--
Jaroslav Hajek <highegg@gmail.com>
parents:
10544
diff
changeset
|
2460 op_str.c_str (), op_str.c_str ()); |
d1194069e58c
optimize code handling ++,--
Jaroslav Hajek <highegg@gmail.com>
parents:
10544
diff
changeset
|
2461 return *this; |
d1194069e58c
optimize code handling ++,--
Jaroslav Hajek <highegg@gmail.com>
parents:
10544
diff
changeset
|
2462 } |
d1194069e58c
optimize code handling ++,--
Jaroslav Hajek <highegg@gmail.com>
parents:
10544
diff
changeset
|
2463 |
9607
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
2464 // Genuine. |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
2465 int t = type_id (); |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
2466 |
31105
670a0d878af1
eliminate WHO arguments from interpreter-private functions
John W. Eaton <jwe@octave.org>
parents:
30888
diff
changeset
|
2467 octave::type_info& ti = octave::__get_type_info__ (); |
24540
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2468 |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2469 octave::type_info::non_const_unary_op_fcn f |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2470 = ti.lookup_non_const_unary_op (op, t); |
9607
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
2471 |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
2472 if (f) |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
2473 { |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
2474 make_unique (); |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
2475 |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
2476 f (*m_rep); |
9607
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
2477 } |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
2478 else |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
2479 { |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
2480 octave_base_value::type_conv_fcn cf = numeric_conversion_function (); |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
2481 |
21118
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
2482 if (! cf) |
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
2483 err_unary_op (octave_value::unary_op_as_string (op), type_name ()); |
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
2484 |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
2485 octave_base_value *tmp = cf (*m_rep); |
21118
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
2486 |
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
2487 if (! tmp) |
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
2488 err_unary_op_conversion_failed |
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
2489 (octave_value::unary_op_as_string (op), type_name ()); |
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
2490 |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
2491 octave_base_value *old_rep = m_rep; |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
2492 m_rep = tmp; |
21118
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
2493 |
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
2494 t = type_id (); |
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
2495 |
24540
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2496 f = ti.lookup_non_const_unary_op (op, t); |
21118
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
2497 |
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
2498 if (f) |
9607
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
2499 { |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
2500 f (*m_rep); |
21118
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
2501 |
30139
c789e728d57a
Backed out changeset 938794bc82b7
John W. Eaton <jwe@octave.org>
parents:
30133
diff
changeset
|
2502 if (old_rep && --old_rep->count == 0) |
21118
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
2503 delete old_rep; |
9607
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
2504 } |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
2505 else |
21118
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
2506 { |
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
2507 if (old_rep) |
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
2508 { |
30139
c789e728d57a
Backed out changeset 938794bc82b7
John W. Eaton <jwe@octave.org>
parents:
30133
diff
changeset
|
2509 if (--m_rep->count == 0) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
2510 delete m_rep; |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
2511 |
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
2512 m_rep = old_rep; |
21118
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
2513 } |
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
2514 |
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
2515 err_unary_op (octave_value::unary_op_as_string (op), |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2516 type_name ()); |
21118
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
2517 } |
9607
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
2518 } |
3203 | 2519 } |
2520 else | |
2521 { | |
9607
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
2522 // Non-genuine. |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
2523 int t = type_id (); |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
2524 |
24540
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2525 octave::type_info::non_const_unary_op_fcn f = nullptr; |
9607
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
2526 |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
2527 // Only attempt to operate in-place if this variable is unshared. |
30139
c789e728d57a
Backed out changeset 938794bc82b7
John W. Eaton <jwe@octave.org>
parents:
30133
diff
changeset
|
2528 if (m_rep->count == 1) |
24540
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2529 { |
31105
670a0d878af1
eliminate WHO arguments from interpreter-private functions
John W. Eaton <jwe@octave.org>
parents:
30888
diff
changeset
|
2530 octave::type_info& ti = octave::__get_type_info__ (); |
24540
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2531 |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2532 f = ti.lookup_non_const_unary_op (op, t); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2533 } |
9607
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
2534 |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
2535 if (f) |
30128
5616702bffac
maint: use "m_" prefix for member variable "m_rep" in class octave_value.
Rik <rik@octave.org>
parents:
30022
diff
changeset
|
2536 f (*m_rep); |
3203 | 2537 else |
28631
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2538 *this = octave::unary_op (op, *this); |
3203 | 2539 } |
3933 | 2540 |
2541 return *this; | |
3203 | 2542 } |
2543 | |
10614
d1194069e58c
optimize code handling ++,--
Jaroslav Hajek <highegg@gmail.com>
parents:
10544
diff
changeset
|
2544 octave_value& |
28631
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2545 octave_value::non_const_unary_op (unary_op op, const std::string& type, |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2546 const std::list<octave_value_list>& idx) |
3933 | 2547 { |
2548 if (idx.empty ()) | |
28631
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2549 non_const_unary_op (op); |
3933 | 2550 else |
2551 { | |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2552 // FIXME: only do the following stuff if we can't find a |
3933 | 2553 // specific function to call to handle the op= operation for the |
2554 // types we have. | |
3205 | 2555 |
3933 | 2556 assign_op assop = unary_op_to_assign_op (op); |
2557 | |
10614
d1194069e58c
optimize code handling ++,--
Jaroslav Hajek <highegg@gmail.com>
parents:
10544
diff
changeset
|
2558 assign (assop, type, idx, 1.0); |
3933 | 2559 } |
2560 | |
10614
d1194069e58c
optimize code handling ++,--
Jaroslav Hajek <highegg@gmail.com>
parents:
10544
diff
changeset
|
2561 return *this; |
3205 | 2562 } |
2563 | |
2564 octave_value::assign_op | |
2565 octave_value::unary_op_to_assign_op (unary_op op) | |
2566 { | |
2567 switch (op) | |
2568 { | |
3533 | 2569 case op_incr: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
2570 return op_add_eq; |
3205 | 2571 |
3533 | 2572 case op_decr: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
2573 return op_sub_eq; |
3205 | 2574 |
2575 default: | |
2576 { | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
2577 std::string on = unary_op_as_string (op); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
2578 error ("operator %s: no assign operator found", on.c_str ()); |
3205 | 2579 } |
2580 } | |
2581 } | |
2582 | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2583 octave_value::binary_op |
3204 | 2584 octave_value::op_eq_to_binary_op (assign_op op) |
2585 { | |
2586 switch (op) | |
2587 { | |
3533 | 2588 case op_add_eq: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
2589 return op_add; |
3204 | 2590 |
3533 | 2591 case op_sub_eq: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
2592 return op_sub; |
3204 | 2593 |
3533 | 2594 case op_mul_eq: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
2595 return op_mul; |
3204 | 2596 |
3533 | 2597 case op_div_eq: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
2598 return op_div; |
3204 | 2599 |
3533 | 2600 case op_ldiv_eq: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
2601 return op_ldiv; |
3204 | 2602 |
4018 | 2603 case op_pow_eq: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
2604 return op_pow; |
3204 | 2605 |
3533 | 2606 case op_el_mul_eq: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
2607 return op_el_mul; |
3204 | 2608 |
3533 | 2609 case op_el_div_eq: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
2610 return op_el_div; |
3204 | 2611 |
3533 | 2612 case op_el_ldiv_eq: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
2613 return op_el_ldiv; |
3204 | 2614 |
4018 | 2615 case op_el_pow_eq: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
2616 return op_el_pow; |
4018 | 2617 |
3533 | 2618 case op_el_and_eq: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
2619 return op_el_and; |
3204 | 2620 |
3533 | 2621 case op_el_or_eq: |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
2622 return op_el_or; |
3204 | 2623 |
2624 default: | |
2625 { | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
2626 std::string on = assign_op_as_string (op); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
2627 error ("operator %s: no binary operator found", on.c_str ()); |
3204 | 2628 } |
2629 } | |
2630 } | |
2631 | |
3933 | 2632 octave_value |
2633 octave_value::empty_conv (const std::string& type, const octave_value& rhs) | |
2634 { | |
2635 if (type.length () > 0) | |
2636 { | |
2637 switch (type[0]) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
2638 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
2639 case '(': |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
2640 if (type.length () > 1 && type[1] == '.') |
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
2641 return octave_map (); |
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
2642 else |
21295
29a0e9e70879
* ov.h: Fix typo in previous change.
John W. Eaton <jwe@octave.org>
parents:
21294
diff
changeset
|
2643 return octave_value (rhs.empty_clone ()); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
2644 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
2645 case '{': |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
2646 return Cell (); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
2647 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
2648 case '.': |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
2649 return octave_scalar_map (); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
2650 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
2651 default: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
2652 panic_impossible (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10232
diff
changeset
|
2653 } |
3933 | 2654 } |
2655 else | |
21293
350caa6afadf
* ov.cc: Use consistent style for switch statements.
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
2656 return octave_value (rhs.empty_clone ()); |
3933 | 2657 } |
2658 | |
31605
e88a07dec498
maint: Use macros to begin/end C++ namespaces.
Rik <rik@octave.org>
parents:
31155
diff
changeset
|
2659 OCTAVE_BEGIN_NAMESPACE(octave) |
29960
939bef0b66e0
merge "namespace octave" and OCTAVE_NAMESPACE_BEGIN/END blocks
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
2660 |
28631
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2661 OCTAVE_NORETURN static void |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2662 err_binary_op (const std::string& on, const std::string& tn1, |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2663 const std::string& tn2) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2664 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2665 error ("binary operator '%s' not implemented for '%s' by '%s' operations", |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2666 on.c_str (), tn1.c_str (), tn2.c_str ()); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2667 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2668 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2669 OCTAVE_NORETURN static void |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2670 err_binary_op_conv (const std::string& on) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2671 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2672 error ("type conversion failed for binary operator '%s'", on.c_str ()); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2673 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2674 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2675 octave_value |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2676 binary_op (type_info& ti, octave_value::binary_op op, |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2677 const octave_value& v1, const octave_value& v2) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2678 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2679 octave_value retval; |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2680 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2681 int t1 = v1.type_id (); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2682 int t2 = v2.type_id (); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2683 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2684 if (t1 == octave_class::static_type_id () |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2685 || t2 == octave_class::static_type_id () |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2686 || t1 == octave_classdef::static_type_id () |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2687 || t2 == octave_classdef::static_type_id ()) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2688 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2689 type_info::binary_class_op_fcn f = ti.lookup_binary_class_op (op); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2690 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2691 if (! f) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2692 err_binary_op (octave_value::binary_op_as_string (op), |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2693 v1.class_name (), v2.class_name ()); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2694 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2695 retval = f (v1, v2); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2696 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2697 else |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2698 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2699 // FIXME: we need to handle overloading operators for built-in |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2700 // classes (double, char, int8, etc.) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2701 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2702 type_info::binary_op_fcn f |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2703 = ti.lookup_binary_op (op, t1, t2); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2704 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2705 if (f) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2706 retval = f (v1.get_rep (), v2.get_rep ()); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2707 else |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2708 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2709 octave_value tv1; |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2710 octave_base_value::type_conv_info cf1 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2711 = v1.numeric_conversion_function (); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2712 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2713 octave_value tv2; |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2714 octave_base_value::type_conv_info cf2 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2715 = v2.numeric_conversion_function (); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2716 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2717 // Try biased (one-sided) conversions first. |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2718 if (cf2.type_id () >= 0 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2719 && ti.lookup_binary_op (op, t1, cf2.type_id ())) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2720 cf1 = nullptr; |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2721 else if (cf1.type_id () >= 0 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2722 && ti.lookup_binary_op (op, cf1.type_id (), t2)) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2723 cf2 = nullptr; |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2724 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2725 if (cf1) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2726 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2727 octave_base_value *tmp = cf1 (v1.get_rep ()); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2728 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2729 if (! tmp) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2730 err_binary_op_conv (octave_value::binary_op_as_string (op)); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2731 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2732 tv1 = octave_value (tmp); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2733 t1 = tv1.type_id (); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2734 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2735 else |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2736 tv1 = v1; |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2737 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2738 if (cf2) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2739 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2740 octave_base_value *tmp = cf2 (v2.get_rep ()); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2741 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2742 if (! tmp) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2743 err_binary_op_conv (octave_value::binary_op_as_string (op)); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2744 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2745 tv2 = octave_value (tmp); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2746 t2 = tv2.type_id (); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2747 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2748 else |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2749 tv2 = v2; |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2750 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2751 if (cf1 || cf2) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2752 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2753 retval = binary_op (op, tv1, tv2); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2754 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2755 else |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2756 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2757 //demote double -> single and try again |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2758 cf1 = tv1.numeric_demotion_function (); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2759 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2760 cf2 = tv2.numeric_demotion_function (); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2761 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2762 // Try biased (one-sided) conversions first. |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2763 if (cf2.type_id () >= 0 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2764 && ti.lookup_binary_op (op, t1, cf2.type_id ())) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2765 cf1 = nullptr; |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2766 else if (cf1.type_id () >= 0 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2767 && ti.lookup_binary_op (op, cf1.type_id (), t2)) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2768 cf2 = nullptr; |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2769 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2770 if (cf1) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2771 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2772 octave_base_value *tmp = cf1 (tv1.get_rep ()); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2773 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2774 if (! tmp) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2775 err_binary_op_conv (octave_value::binary_op_as_string (op)); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2776 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2777 tv1 = octave_value (tmp); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2778 t1 = tv1.type_id (); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2779 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2780 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2781 if (cf2) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2782 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2783 octave_base_value *tmp = cf2 (tv2.get_rep ()); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2784 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2785 if (! tmp) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2786 err_binary_op_conv (octave_value::binary_op_as_string (op)); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2787 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2788 tv2 = octave_value (tmp); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2789 t2 = tv2.type_id (); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2790 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2791 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2792 if (! cf1 && ! cf2) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2793 err_binary_op (octave_value::binary_op_as_string (op), |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2794 v1.type_name (), v2.type_name ()); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2795 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2796 f = ti.lookup_binary_op (op, t1, t2); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2797 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2798 if (! f) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2799 err_binary_op (octave_value::binary_op_as_string (op), |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2800 v1.type_name (), v2.type_name ()); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2801 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2802 retval = f (tv1.get_rep (), tv2.get_rep ()); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2803 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2804 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2805 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2806 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2807 return retval; |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2808 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2809 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2810 octave_value |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2811 binary_op (octave_value::binary_op op, const octave_value& v1, |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2812 const octave_value& v2) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2813 { |
31105
670a0d878af1
eliminate WHO arguments from interpreter-private functions
John W. Eaton <jwe@octave.org>
parents:
30888
diff
changeset
|
2814 type_info& ti = __get_type_info__ (); |
28631
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2815 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2816 return binary_op (ti, op, v1, v2); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2817 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2818 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2819 static octave_value |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2820 decompose_binary_op (type_info& ti, octave_value::compound_binary_op op, |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2821 const octave_value& v1, const octave_value& v2) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2822 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2823 switch (op) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2824 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2825 case octave_value::op_trans_mul: |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2826 return binary_op (octave_value::op_mul, |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2827 unary_op (octave_value::op_transpose, v1), v2); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2828 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2829 case octave_value::op_mul_trans: |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2830 return binary_op (ti, octave_value::op_mul, |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2831 v1, unary_op (octave_value::op_transpose, v2)); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2832 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2833 case octave_value::op_herm_mul: |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2834 return binary_op (ti, octave_value::op_mul, |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2835 unary_op (octave_value::op_hermitian, v1), v2); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2836 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2837 case octave_value::op_mul_herm: |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2838 return binary_op (ti, octave_value::op_mul, |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2839 v1, unary_op (octave_value::op_hermitian, v2)); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2840 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2841 case octave_value::op_trans_ldiv: |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2842 return binary_op (ti, octave_value::op_ldiv, |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2843 unary_op (octave_value::op_transpose, v1), v2); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2844 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2845 case octave_value::op_herm_ldiv: |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2846 return binary_op (ti, octave_value::op_ldiv, |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2847 unary_op (octave_value::op_hermitian, v1), v2); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2848 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2849 case octave_value::op_el_not_and: |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2850 return binary_op (ti, octave_value::op_el_and, |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2851 unary_op (octave_value::op_not, v1), v2); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2852 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2853 case octave_value::op_el_not_or: |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2854 return binary_op (ti, octave_value::op_el_or, |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2855 unary_op (octave_value::op_not, v1), v2); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2856 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2857 case octave_value::op_el_and_not: |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2858 return binary_op (ti, octave_value::op_el_and, |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2859 v1, unary_op (octave_value::op_not, v2)); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2860 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2861 case octave_value::op_el_or_not: |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2862 return binary_op (ti, octave_value::op_el_or, |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2863 v1, unary_op (octave_value::op_not, v2)); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2864 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2865 default: |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2866 error ("invalid compound operator"); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2867 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2868 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2869 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2870 octave_value |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2871 binary_op (type_info& ti, octave_value::compound_binary_op op, |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2872 const octave_value& v1, const octave_value& v2) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2873 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2874 octave_value retval; |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2875 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2876 int t1 = v1.type_id (); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2877 int t2 = v2.type_id (); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2878 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2879 if (t1 == octave_class::static_type_id () |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2880 || t2 == octave_class::static_type_id () |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2881 || t1 == octave_classdef::static_type_id () |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2882 || t2 == octave_classdef::static_type_id ()) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2883 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2884 type_info::binary_class_op_fcn f = ti.lookup_binary_class_op (op); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2885 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2886 if (f) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2887 retval = f (v1, v2); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2888 else |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2889 retval = decompose_binary_op (ti, op, v1, v2); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2890 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2891 else |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2892 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2893 type_info::binary_op_fcn f = ti.lookup_binary_op (op, t1, t2); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2894 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2895 if (f) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2896 retval = f (v1.get_rep (), v2.get_rep ()); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2897 else |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2898 retval = decompose_binary_op (ti, op, v1, v2); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2899 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2900 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2901 return retval; |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2902 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2903 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2904 octave_value |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2905 binary_op (octave_value::compound_binary_op op, |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2906 const octave_value& v1, const octave_value& v2) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2907 { |
31105
670a0d878af1
eliminate WHO arguments from interpreter-private functions
John W. Eaton <jwe@octave.org>
parents:
30888
diff
changeset
|
2908 type_info& ti = __get_type_info__ (); |
28631
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2909 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2910 return binary_op (ti, op, v1, v2); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2911 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2912 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2913 OCTAVE_NORETURN static void |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2914 err_cat_op (const std::string& tn1, const std::string& tn2) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2915 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2916 error ("concatenation operator not implemented for '%s' by '%s' operations", |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2917 tn1.c_str (), tn2.c_str ()); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2918 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2919 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2920 OCTAVE_NORETURN static void |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2921 err_cat_op_conv (void) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2922 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2923 error ("type conversion failed for concatenation operator"); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2924 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2925 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2926 octave_value |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2927 cat_op (type_info& ti, const octave_value& v1, |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2928 const octave_value& v2, const Array<octave_idx_type>& ra_idx) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2929 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2930 octave_value retval; |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2931 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2932 // Can't rapid return for concatenation with an empty object here as |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2933 // something like cat(1,[],single([]) must return the correct type. |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2934 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2935 int t1 = v1.type_id (); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2936 int t2 = v2.type_id (); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2937 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2938 type_info::cat_op_fcn f = ti.lookup_cat_op (t1, t2); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2939 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2940 if (f) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2941 retval = f (v1.get_rep (), v2.get_rep (), ra_idx); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2942 else |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2943 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2944 octave_value tv1; |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2945 octave_base_value::type_conv_info cf1 = v1.numeric_conversion_function (); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2946 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2947 octave_value tv2; |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2948 octave_base_value::type_conv_info cf2 = v2.numeric_conversion_function (); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2949 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2950 // Try biased (one-sided) conversions first. |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2951 if (cf2.type_id () >= 0 && ti.lookup_cat_op (t1, cf2.type_id ())) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2952 cf1 = nullptr; |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2953 else if (cf1.type_id () >= 0 && ti.lookup_cat_op (cf1.type_id (), t2)) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2954 cf2 = nullptr; |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2955 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2956 if (cf1) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2957 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2958 octave_base_value *tmp = cf1 (v1.get_rep ()); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2959 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2960 if (! tmp) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2961 err_cat_op_conv (); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2962 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2963 tv1 = octave_value (tmp); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2964 t1 = tv1.type_id (); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2965 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2966 else |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2967 tv1 = v1; |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2968 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2969 if (cf2) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2970 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2971 octave_base_value *tmp = cf2 (v2.get_rep ()); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2972 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2973 if (! tmp) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2974 err_cat_op_conv (); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2975 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2976 tv2 = octave_value (tmp); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2977 t2 = tv2.type_id (); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2978 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2979 else |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2980 tv2 = v2; |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2981 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2982 if (! cf1 && ! cf2) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2983 err_cat_op (v1.type_name (), v2.type_name ()); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2984 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2985 retval = cat_op (ti, tv1, tv2, ra_idx); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2986 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2987 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2988 return retval; |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2989 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2990 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2991 octave_value |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2992 cat_op (const octave_value& v1, const octave_value& v2, |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2993 const Array<octave_idx_type>& ra_idx) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2994 { |
31105
670a0d878af1
eliminate WHO arguments from interpreter-private functions
John W. Eaton <jwe@octave.org>
parents:
30888
diff
changeset
|
2995 type_info& ti = __get_type_info__ (); |
28631
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2996 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2997 return cat_op (ti, v1, v2, ra_idx); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2998 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
2999 |
28633
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3000 // Unless the colon operator is used with a class or classdef object, |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3001 // then all arguments must be the same type or mixed with double |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3002 // values. |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3003 |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3004 static builtin_type_t |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3005 get_colon_op_type (builtin_type_t op1_type, builtin_type_t op2_type) |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3006 { |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3007 if (op1_type == op2_type) |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3008 return op1_type; |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3009 |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3010 if (op1_type == btyp_double) |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3011 return op2_type; |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3012 |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3013 if (op2_type == btyp_double) |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3014 return op1_type; |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3015 |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3016 return btyp_unknown; |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3017 } |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3018 |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3019 static builtin_type_t |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3020 get_colon_op_type (const octave_value& base, const octave_value& increment, |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3021 const octave_value& limit) |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3022 { |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3023 builtin_type_t typ |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3024 = get_colon_op_type (base.builtin_type (), increment.builtin_type ()); |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3025 |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3026 if (typ == btyp_unknown) |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3027 return typ; |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3028 |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3029 return get_colon_op_type (typ, limit.builtin_type ()); |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3030 } |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3031 |
30142
a4d1c080e445
fix construction of ranges with extreme integer values (bug #61132)
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
3032 // This check depends on the type of VAL either being the expected |
a4d1c080e445
fix construction of ranges with extreme integer values (bug #61132)
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
3033 // integer type or a double value. |
a4d1c080e445
fix construction of ranges with extreme integer values (bug #61132)
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
3034 |
a4d1c080e445
fix construction of ranges with extreme integer values (bug #61132)
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
3035 template <typename T> |
a4d1c080e445
fix construction of ranges with extreme integer values (bug #61132)
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
3036 static void |
a4d1c080e445
fix construction of ranges with extreme integer values (bug #61132)
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
3037 check_colon_operand (const octave_value& val, const char *op_str) |
a4d1c080e445
fix construction of ranges with extreme integer values (bug #61132)
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
3038 { |
a4d1c080e445
fix construction of ranges with extreme integer values (bug #61132)
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
3039 if (! val.is_double_type ()) |
a4d1c080e445
fix construction of ranges with extreme integer values (bug #61132)
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
3040 return; |
a4d1c080e445
fix construction of ranges with extreme integer values (bug #61132)
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
3041 |
a4d1c080e445
fix construction of ranges with extreme integer values (bug #61132)
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
3042 double dval = val.double_value (); |
a4d1c080e445
fix construction of ranges with extreme integer values (bug #61132)
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
3043 double intpart; |
30867
014030798d5e
Avoid issues when converting large integers to floating point (bug #62212).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30859
diff
changeset
|
3044 static const double out_of_range_top |
014030798d5e
Avoid issues when converting large integers to floating point (bug #62212).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30859
diff
changeset
|
3045 = static_cast<double> (std::numeric_limits<typename T::val_type>::max ()) |
014030798d5e
Avoid issues when converting large integers to floating point (bug #62212).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30859
diff
changeset
|
3046 + 1.; |
014030798d5e
Avoid issues when converting large integers to floating point (bug #62212).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30859
diff
changeset
|
3047 |
014030798d5e
Avoid issues when converting large integers to floating point (bug #62212).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30859
diff
changeset
|
3048 if (dval >= out_of_range_top |
30142
a4d1c080e445
fix construction of ranges with extreme integer values (bug #61132)
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
3049 || dval < std::numeric_limits<typename T::val_type>::min () |
a4d1c080e445
fix construction of ranges with extreme integer values (bug #61132)
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
3050 || std::modf (dval, &intpart) != 0.0) |
a4d1c080e445
fix construction of ranges with extreme integer values (bug #61132)
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
3051 error ("colon operator %s invalid (not an integer or out of range for given integer type)", op_str); |
a4d1c080e445
fix construction of ranges with extreme integer values (bug #61132)
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
3052 } |
a4d1c080e445
fix construction of ranges with extreme integer values (bug #61132)
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
3053 |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3054 // Return the difference between two unsigned integers as an unsigned |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3055 // integer of the same type. |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3056 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3057 template <typename UT, |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3058 typename std::enable_if<(std::is_integral<UT>::value |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3059 && std::is_unsigned<UT>::value), |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3060 bool>::type = true> |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3061 UT |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3062 integer_difference (UT a, UT b) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3063 { |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3064 return a > b ? a - b : b - a; |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3065 } |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3066 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3067 // Return the difference between two signed integers as an unsigned |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3068 // integer corresponding to the signed type. |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3069 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3070 template <typename ST, |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3071 typename UT = typename std::make_unsigned<ST>::type, |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3072 typename std::enable_if<(std::is_integral<ST>::value |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3073 && std::is_signed<ST>::value), |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3074 bool>::type = true> |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3075 UT |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3076 integer_difference (ST a, ST b) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3077 { |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3078 // Map to unsigned. |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3079 // Idea from https://stackoverflow.com/questions/10589559 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3080 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3081 static const UT offset |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3082 = UT (0) - static_cast<UT> (std::numeric_limits<ST>::min ()); |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3083 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3084 UT au = static_cast<UT> (a) + offset; |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3085 UT bu = static_cast<UT> (b) + offset; |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3086 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3087 return integer_difference (au, bu); |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3088 } |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3089 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3090 // Number of elements in an integer range taking care to avoid |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3091 // overflow. Base and limit are of the same type. If they are |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3092 // unsigned, then increment is also of the same type. If they are |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3093 // signed, then the type of increment is the unsigned type |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3094 // corresponding to T. Assumes that the base and limit values are |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3095 // consistent with the sign of the original increment (not an empty |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3096 // range) so we can calculate numel with the absolute value of the |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3097 // increment and the absolute difference between the base and limit |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3098 // values. |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3099 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3100 template <typename T, |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3101 typename UT = typename std::make_unsigned<T>::type, |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3102 typename std::enable_if<std::is_integral<T>::value, |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3103 bool>::type = true> |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3104 octave_idx_type |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3105 range_numel_aux (T base, UT unsigned_increment, T limit) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3106 { |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3107 // Adding one to DIFF/INCREMENT may overflow, so check whether it is |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3108 // out of range before adding. |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3109 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3110 UT nel_m1 = integer_difference (limit, base) / unsigned_increment; |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3111 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3112 // FIXME: fix error message. |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3113 if (nel_m1 > std::numeric_limits<octave_idx_type>::max () - 1) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3114 error ("too many elements for range!"); |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3115 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3116 return static_cast<octave_idx_type> (nel_m1) + 1; |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3117 } |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3118 |
30839
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3119 // Convert signed range increment to unsigned. |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3120 |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3121 template <typename ST, |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3122 typename UT = typename std::make_unsigned<ST>::type, |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3123 typename std::enable_if<(std::is_integral<ST>::value |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3124 && std::is_signed<ST>::value), |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3125 bool>::type = true> |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3126 UT |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3127 range_increment (ST increment) |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3128 { |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3129 return (increment < 0 |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3130 ? UT (0) - static_cast<UT> (increment) |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3131 : static_cast<UT> (increment)); |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3132 } |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3133 |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3134 // "Convert" unsigned range increment to unsigned. A no-op, but |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3135 // needed to provide a consistent interface for other template |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3136 // functions. |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3137 |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3138 template <typename T, |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3139 typename UT = typename std::make_unsigned<T>::type, |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3140 typename std::enable_if<(std::is_integral<UT>::value |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3141 && std::is_unsigned<UT>::value), |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3142 bool>::type = true> |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3143 UT |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3144 range_increment (UT increment) |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3145 { |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3146 return increment; |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3147 } |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3148 |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3149 // Convert double range increment to unsigned. Enable by return type. |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3150 |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3151 template <typename T, |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3152 typename UT = typename std::make_unsigned<T>::type> |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3153 typename std::enable_if<(std::is_integral<UT>::value |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3154 && std::is_unsigned<UT>::value), UT>::type |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3155 range_increment (double increment) |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3156 { |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3157 double abs_increment = std::abs (increment); |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3158 |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3159 return static_cast<UT> (abs_increment); |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3160 } |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3161 |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3162 // Number of elements in an integer range base:increment:limit. Base, |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3163 // increment, and limit are of the same signed type. |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3164 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3165 template <typename ST, |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3166 typename std::enable_if<(std::is_integral<ST>::value |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3167 && std::is_signed<ST>::value), |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3168 bool>::type = true> |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3169 octave_idx_type |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3170 range_numel (ST base, ST increment, ST limit) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3171 { |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3172 typedef typename std::make_unsigned<ST>::type UT; |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3173 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3174 if (increment == 0 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3175 || (increment > 0 && base > limit) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3176 || (increment < 0 && base < limit)) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3177 return 0; |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3178 |
30839
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3179 UT unsigned_increment = range_increment<ST> (increment); |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3180 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3181 return range_numel_aux (base, unsigned_increment, limit); |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3182 } |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3183 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3184 // Number of elements in an integer range base:increment:limit. Base, |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3185 // increment, and limit are unsigned and of the same type. |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3186 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3187 template <typename UT, |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3188 typename std::enable_if<(std::is_integral<UT>::value |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3189 && std::is_unsigned<UT>::value), |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3190 bool>::type = true> |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3191 octave_idx_type |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3192 range_numel (UT base, UT increment, UT limit) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3193 { |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3194 // Unsigned, INCREMENT is always >= 0. |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3195 if (increment == 0 || base > limit) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3196 return 0; |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3197 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3198 return range_numel_aux (base, increment, limit); |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3199 } |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3200 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3201 // Number of elements in an integer range base:increment:limit. Base |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3202 // and limit are of the same type and increment is a double value. |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3203 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3204 template <typename T, |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3205 typename UT = typename std::make_unsigned<T>::type, |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3206 typename std::enable_if<std::is_integral<T>::value, |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3207 bool>::type = true> |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3208 octave_idx_type |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3209 range_numel (T base, double increment, T limit) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3210 { |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3211 double intpart; |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3212 if (math::isnan (increment) || std::modf (increment, &intpart) != 0.0) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3213 error ("colon operator increment invalid (not an integer)"); |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3214 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3215 if (increment == 0 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3216 || (increment > 0 && base > limit) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3217 || (increment < 0 && base < limit)) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3218 return 0; |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3219 |
30867
014030798d5e
Avoid issues when converting large integers to floating point (bug #62212).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30859
diff
changeset
|
3220 static const double out_of_range_top |
014030798d5e
Avoid issues when converting large integers to floating point (bug #62212).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30859
diff
changeset
|
3221 = static_cast<double> (std::numeric_limits<UT>::max ()) + 1.; |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3222 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3223 double abs_increment = std::abs (increment); |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3224 |
30867
014030798d5e
Avoid issues when converting large integers to floating point (bug #62212).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30859
diff
changeset
|
3225 // Technically, this condition should be |
014030798d5e
Avoid issues when converting large integers to floating point (bug #62212).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30859
diff
changeset
|
3226 // `abs_increment > std::numeric_limits<UT>::max ()`. |
30859
df26decca96b
Tweak check for maximum possible increment of integer ranges (bug #62212).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30855
diff
changeset
|
3227 // But intmax('uint64') is not representable exactly as floating point |
df26decca96b
Tweak check for maximum possible increment of integer ranges (bug #62212).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30855
diff
changeset
|
3228 // number. Instead, it "rounds" up by 1 to 2^64. To account for |
df26decca96b
Tweak check for maximum possible increment of integer ranges (bug #62212).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30855
diff
changeset
|
3229 // this, use the following expression which works for all unsigned |
df26decca96b
Tweak check for maximum possible increment of integer ranges (bug #62212).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30855
diff
changeset
|
3230 // integer types. |
30867
014030798d5e
Avoid issues when converting large integers to floating point (bug #62212).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30859
diff
changeset
|
3231 if (abs_increment >= out_of_range_top) |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3232 return 1; |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3233 |
30839
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3234 UT unsigned_increment = range_increment<T> (increment); |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3235 |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3236 return range_numel_aux (base, unsigned_increment, limit); |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3237 } |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3238 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3239 // Make a range from integer values. Increment may be integer or double. |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3240 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3241 template <typename T, |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3242 typename IT, |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3243 typename std::enable_if<(std::is_integral<T>::value |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3244 && std::is_arithmetic<IT>::value), |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3245 bool>::type = true> |
28631
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3246 octave_value |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3247 make_int_range (T base, IT increment, T limit) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3248 { |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3249 octave_idx_type nel = range_numel (base, increment, limit); |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3250 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3251 // For now, we create arrays instead of range<T> for all types |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3252 // except double. |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3253 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3254 Array<octave_int<T>> result (dim_vector (1, nel)); |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3255 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3256 if (nel > 0) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3257 { |
30839
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3258 typedef typename std::make_unsigned<T>::type UT; |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3259 |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3260 UT unsigned_increment = range_increment<T> (increment); |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3261 |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3262 T val = base; |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3263 result.xelem (0) = val; |
30839
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3264 |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3265 if (limit > base) |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3266 { |
30839
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3267 for (octave_idx_type i = 1; i < nel; i++) |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3268 { |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3269 val += unsigned_increment; |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3270 result.xelem (i) = val; |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3271 } |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3272 } |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3273 else |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3274 { |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3275 for (octave_idx_type i = 1; i < nel; i++) |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3276 { |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3277 val -= unsigned_increment; |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3278 result.xelem (i) = val; |
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3279 } |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3280 } |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3281 } |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3282 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3283 return octave_value (result); |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3284 } |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3285 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3286 // Make a range from floating point values. |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3287 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3288 // FIXME: Try again to define memory efficient range classes for |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3289 // integer and floating point values? Maybe with the templates |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3290 // defined in this file we could do that in a reasonable way? |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3291 // Regardless of that, it might be good to provide special treatment |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3292 // of colon expressions in FOR loops so that we can eliminate the |
30839
1a4a3ba925c8
don't use double precision increment when computing integer range values
John W. Eaton <jwe@octave.org>
parents:
30835
diff
changeset
|
3293 // "is_for_cmd_expr / force_range" flag from the parser and the |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3294 // octave_value constructors for range objects. |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3295 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3296 // NOTE: We define this function separately for float and double so |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3297 // that we can avoid having to instantiate ov_range<float>. We DO |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3298 // instantiate range<float> but only so we can take advantage of the |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3299 // range<T> class to generate the corresponding array of float values |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3300 // and not have to duplicate that code here. |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3301 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3302 template <typename T, |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3303 typename std::enable_if<std::is_same<T, double>::value, |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3304 bool>::type = true> |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3305 octave_value |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3306 make_float_range (T base, T increment, T limit, bool is_for_cmd_expr) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3307 { |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3308 if (math::isnan (base) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3309 || math::isnan (increment) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3310 || math::isnan (limit)) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3311 return octave_value (numeric_limits<T>::NaN ()); |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3312 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3313 if (increment == 0 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3314 || (increment > 0 && base > limit) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3315 || (increment < 0 && base < limit)) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3316 return octave_value (Array<T> (dim_vector (1, 0))); |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3317 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3318 // At this point, we know that the base and limit values are |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3319 // consistent with the sign of the increment (not an empty range). |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3320 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3321 range<T> r (base, increment, limit); |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3322 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3323 if (! is_for_cmd_expr && ! r.is_storable ()) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3324 error ("range with infinite number of elements cannot be stored"); |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3325 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3326 return octave_value (r, is_for_cmd_expr); |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3327 } |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3328 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3329 template <typename T, |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3330 typename std::enable_if<std::is_same<T, float>::value, |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3331 bool>::type = true> |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3332 octave_value |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3333 make_float_range (T base, T increment, T limit, bool is_for_cmd_expr) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3334 { |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3335 if (math::isnan (base) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3336 || math::isnan (increment) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3337 || math::isnan (limit)) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3338 return octave_value (numeric_limits<T>::NaN ()); |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3339 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3340 if (increment == 0 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3341 || (increment > 0 && base > limit) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3342 || (increment < 0 && base < limit)) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3343 return octave_value (Array<T> (dim_vector (1, 0))); |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3344 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3345 // At this point, we know that the base and limit values are |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3346 // consistent with the sign of the increment (not an empty range). |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3347 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3348 range<T> r (base, increment, limit); |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3349 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3350 if (! is_for_cmd_expr && ! r.is_storable ()) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3351 error ("range with infinite number of elements cannot be stored"); |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3352 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3353 return octave_value (r.array_value ()); |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3354 } |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3355 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3356 template <typename T, |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3357 typename std::enable_if<(std::is_same<T, octave_int8>::value |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3358 || std::is_same<T, octave_uint8>::value |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3359 || std::is_same<T, octave_int16>::value |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3360 || std::is_same<T, octave_uint16>::value |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3361 || std::is_same<T, octave_int32>::value |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3362 || std::is_same<T, octave_uint32>::value |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3363 || std::is_same<T, octave_int64>::value |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3364 || std::is_same<T, octave_uint64>::value), |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3365 bool>::type = true> |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3366 octave_value |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3367 make_int_range (const octave_value& base, const octave_value& increment, |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3368 const octave_value& limit) |
28633
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3369 { |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3370 if (base.isempty () || increment.isempty () || limit.isempty ()) |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3371 return octave_value (Array<T> (dim_vector (1, 0))); |
30423
e658f400a30e
Fix possible lifetime issue (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30416
diff
changeset
|
3372 |
30142
a4d1c080e445
fix construction of ranges with extreme integer values (bug #61132)
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
3373 check_colon_operand<T> (base, "lower bound"); |
a4d1c080e445
fix construction of ranges with extreme integer values (bug #61132)
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
3374 check_colon_operand<T> (limit, "upper bound"); |
29410
65979d33f147
Emit error if integer/floating point inputs to colon operator are incompatible (bug #59899).
Rik <rik@octave.org>
parents:
29369
diff
changeset
|
3375 |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3376 typename T::val_type base_val = octave_value_extract<T> (base).value (); |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3377 typename T::val_type limit_val = octave_value_extract<T> (limit).value (); |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3378 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3379 if (increment.is_double_type ()) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3380 { |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3381 double increment_val = increment.double_value (); |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3382 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3383 return make_int_range (base_val, increment_val, limit_val); |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3384 } |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3385 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3386 check_colon_operand<T> (increment, "increment"); |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3387 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3388 typename T::val_type increment_val |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3389 = octave_value_extract<T> (increment).value (); |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3390 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3391 return make_int_range (base_val, increment_val, limit_val); |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3392 } |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3393 |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3394 template <typename T, |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3395 typename std::enable_if<std::is_floating_point<T>::value, |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3396 bool>::type = true> |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3397 octave_value |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3398 make_float_range (const octave_value& base, const octave_value& increment, |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3399 const octave_value& limit, bool is_for_cmd_expr) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3400 { |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3401 if (base.isempty () || increment.isempty () || limit.isempty ()) |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3402 return octave_value (Array<T> (dim_vector (1, 0))); |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3403 |
28638
98192ec1621f
replace Range with range<double>
John W. Eaton <jwe@octave.org>
parents:
28633
diff
changeset
|
3404 T base_val = octave_value_extract<T> (base); |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3405 T increment_val = octave_value_extract<T> (increment); |
28638
98192ec1621f
replace Range with range<double>
John W. Eaton <jwe@octave.org>
parents:
28633
diff
changeset
|
3406 T limit_val = octave_value_extract<T> (limit); |
98192ec1621f
replace Range with range<double>
John W. Eaton <jwe@octave.org>
parents:
28633
diff
changeset
|
3407 |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3408 return make_float_range (base_val, increment_val, limit_val, |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3409 is_for_cmd_expr); |
28633
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3410 } |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3411 |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3412 |
28633
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3413 octave_value |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3414 make_char_range (const octave_value& base, const octave_value& increment, |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3415 const octave_value& limit) |
28631
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3416 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3417 octave_value retval; |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3418 |
28638
98192ec1621f
replace Range with range<double>
John W. Eaton <jwe@octave.org>
parents:
28633
diff
changeset
|
3419 bool dq_str = (base.is_dq_string () || increment.is_dq_string () |
98192ec1621f
replace Range with range<double>
John W. Eaton <jwe@octave.org>
parents:
28633
diff
changeset
|
3420 || limit.is_dq_string ()); |
98192ec1621f
replace Range with range<double>
John W. Eaton <jwe@octave.org>
parents:
28633
diff
changeset
|
3421 |
98192ec1621f
replace Range with range<double>
John W. Eaton <jwe@octave.org>
parents:
28633
diff
changeset
|
3422 char type = dq_str ? '"' : '\''; |
98192ec1621f
replace Range with range<double>
John W. Eaton <jwe@octave.org>
parents:
28633
diff
changeset
|
3423 |
28633
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3424 if (base.isempty () || increment.isempty () || limit.isempty ()) |
28638
98192ec1621f
replace Range with range<double>
John W. Eaton <jwe@octave.org>
parents:
28633
diff
changeset
|
3425 retval = octave_value ("", type); |
28633
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3426 else |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3427 { |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3428 Matrix mtx_base = base.matrix_value (true); |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3429 Matrix mtx_increment = increment.matrix_value (true); |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3430 Matrix mtx_limit = limit.matrix_value (true); |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3431 |
28638
98192ec1621f
replace Range with range<double>
John W. Eaton <jwe@octave.org>
parents:
28633
diff
changeset
|
3432 range<double> tmp (mtx_base(0), mtx_increment(0), mtx_limit(0)); |
98192ec1621f
replace Range with range<double>
John W. Eaton <jwe@octave.org>
parents:
28633
diff
changeset
|
3433 |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3434 retval = octave_value (tmp); |
28633
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3435 } |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3436 |
28638
98192ec1621f
replace Range with range<double>
John W. Eaton <jwe@octave.org>
parents:
28633
diff
changeset
|
3437 return retval.convert_to_str (false, true, type); |
28633
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3438 } |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3439 |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3440 octave_value |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3441 colon_op (const octave_value& base, const octave_value& increment_arg, |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3442 const octave_value& limit, bool is_for_cmd_expr) |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3443 { |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3444 if (base.isobject () || increment_arg.isobject () || limit.isobject ()) |
28631
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3445 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3446 octave_value_list tmp1; |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3447 |
28633
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3448 if (increment_arg.is_defined ()) |
28631
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3449 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3450 tmp1(2) = limit; |
28633
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3451 tmp1(1) = increment_arg; |
28631
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3452 tmp1(0) = base; |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3453 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3454 else |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3455 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3456 tmp1(1) = limit; |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3457 tmp1(0) = base; |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3458 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3459 |
31105
670a0d878af1
eliminate WHO arguments from interpreter-private functions
John W. Eaton <jwe@octave.org>
parents:
30888
diff
changeset
|
3460 interpreter& interp = __get_interpreter__ (); |
28631
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3461 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3462 symbol_table& symtab = interp.get_symbol_table (); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3463 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3464 octave_value fcn = symtab.find_function ("colon", tmp1); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3465 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3466 if (fcn.is_defined ()) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3467 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3468 octave_value_list tmp2 = interp.feval (fcn, tmp1, 1); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3469 |
29410
65979d33f147
Emit error if integer/floating point inputs to colon operator are incompatible (bug #59899).
Rik <rik@octave.org>
parents:
29369
diff
changeset
|
3470 return tmp2(0); |
28631
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3471 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3472 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3473 |
28633
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3474 octave_value increment |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3475 = increment_arg.is_defined () ? increment_arg : octave_value (1.0); |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3476 |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3477 if (base.numel () > 1 || limit.numel () > 1 || increment.numel () > 1) |
28631
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3478 warning_with_id ("Octave:colon-nonscalar-argument", |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3479 "colon arguments should be scalars"); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3480 |
28633
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3481 if (base.iscomplex () || limit.iscomplex () || increment.iscomplex ()) |
28631
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3482 warning_with_id ("Octave:colon-complex-argument", |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3483 "imaginary part of complex colon arguments is ignored"); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3484 |
28633
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3485 // FIXME: is there a better way to do this job, maybe using type traits? |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3486 |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3487 builtin_type_t type_id = get_colon_op_type (base, increment, limit); |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3488 |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3489 // For compatibility with Matlab, don't allow the range used in |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3490 // a FOR loop expression to be converted to a Matrix. |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3491 |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3492 // For now, these functions create arrays instead of range<T> for |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3493 // all types except double. |
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3494 |
28633
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3495 switch (type_id) |
28631
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3496 { |
28633
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3497 case btyp_double: |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3498 case btyp_complex: |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3499 return make_float_range<double> (base, increment, limit, is_for_cmd_expr); |
28633
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3500 |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3501 case btyp_float: |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3502 case btyp_float_complex: |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3503 return make_float_range<float> (base, increment, limit, is_for_cmd_expr); |
28633
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3504 |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3505 case btyp_int8: |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3506 return make_int_range<octave_int8> (base, increment, limit); |
28633
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3507 |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3508 case btyp_int16: |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3509 return make_int_range<octave_int16> (base, increment, limit); |
28633
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3510 |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3511 case btyp_int32: |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3512 return make_int_range<octave_int32> (base, increment, limit); |
28633
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3513 |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3514 case btyp_int64: |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3515 return make_int_range<octave_int64> (base, increment, limit); |
28633
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3516 |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3517 case btyp_uint8: |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3518 return make_int_range<octave_uint8> (base, increment, limit); |
28633
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3519 |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3520 case btyp_uint16: |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3521 return make_int_range<octave_uint16> (base, increment, limit); |
28633
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3522 |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3523 case btyp_uint32: |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3524 return make_int_range<octave_uint32> (base, increment, limit); |
28633
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3525 |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3526 case btyp_uint64: |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3527 return make_int_range<octave_uint64> (base, increment, limit); |
28633
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3528 |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3529 case btyp_char: |
30834
f1a9e55d850c
for all but range<double>, create arrays instead of range objects
John W. Eaton <jwe@octave.org>
parents:
30564
diff
changeset
|
3530 return make_char_range (base, increment, limit); |
28633
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3531 |
29369
c75996cbe3ba
Emit more specific error when two different integer types used in range (bug #59899).
Rik <rik@octave.org>
parents:
29359
diff
changeset
|
3532 case btyp_unknown: |
c75996cbe3ba
Emit more specific error when two different integer types used in range (bug #59899).
Rik <rik@octave.org>
parents:
29359
diff
changeset
|
3533 error ("incompatible types found in range expression"); |
c75996cbe3ba
Emit more specific error when two different integer types used in range (bug #59899).
Rik <rik@octave.org>
parents:
29359
diff
changeset
|
3534 |
28633
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3535 default: |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3536 error ("invalid types found in range expression"); |
28631
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3537 } |
28633
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3538 |
c897ec8fb5d1
refactor octave_value colon_op function
John W. Eaton <jwe@octave.org>
parents:
28631
diff
changeset
|
3539 return octave_value (); |
28631
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3540 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3541 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3542 OCTAVE_NORETURN static void |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3543 err_unary_op_conv (const std::string& on) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3544 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3545 error ("type conversion failed for unary operator '%s'", on.c_str ()); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3546 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3547 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3548 octave_value |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3549 unary_op (type_info& ti, octave_value::unary_op op, |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3550 const octave_value& v) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3551 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3552 octave_value retval; |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3553 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3554 int t = v.type_id (); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3555 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3556 if (t == octave_class::static_type_id () |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3557 || t == octave_classdef::static_type_id ()) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3558 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3559 type_info::unary_class_op_fcn f = ti.lookup_unary_class_op (op); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3560 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3561 if (! f) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3562 err_unary_op (octave_value::unary_op_as_string (op), v.class_name ()); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3563 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3564 retval = f (v); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3565 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3566 else |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3567 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3568 // FIXME: we need to handle overloading operators for built-in |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3569 // classes (double, char, int8, etc.) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3570 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3571 type_info::unary_op_fcn f = ti.lookup_unary_op (op, t); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3572 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3573 if (f) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3574 retval = f (v.get_rep ()); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3575 else |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3576 { |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3577 octave_value tv; |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3578 octave_base_value::type_conv_fcn cf |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3579 = v.numeric_conversion_function (); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3580 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3581 if (! cf) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3582 err_unary_op (octave_value::unary_op_as_string (op), |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3583 v.type_name ()); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3584 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3585 octave_base_value *tmp = cf (v.get_rep ()); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3586 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3587 if (! tmp) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3588 err_unary_op_conv (octave_value::unary_op_as_string (op)); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3589 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3590 tv = octave_value (tmp); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3591 retval = unary_op (op, tv); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3592 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3593 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3594 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3595 return retval; |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3596 } |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3597 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3598 octave_value |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3599 unary_op (octave_value::unary_op op, const octave_value& v) |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3600 { |
31105
670a0d878af1
eliminate WHO arguments from interpreter-private functions
John W. Eaton <jwe@octave.org>
parents:
30888
diff
changeset
|
3601 type_info& ti = __get_type_info__ (); |
28631
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3602 |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3603 return unary_op (ti, op, v); |
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3604 } |
29960
939bef0b66e0
merge "namespace octave" and OCTAVE_NAMESPACE_BEGIN/END blocks
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
3605 |
31605
e88a07dec498
maint: Use macros to begin/end C++ namespaces.
Rik <rik@octave.org>
parents:
31155
diff
changeset
|
3606 OCTAVE_END_NAMESPACE(octave) |
28631
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
3607 |
2376 | 3608 void |
24540
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3609 install_types (octave::type_info& ti) |
2376 | 3610 { |
24540
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3611 octave_base_value::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3612 octave_cell::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3613 octave_scalar::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3614 octave_complex::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3615 octave_matrix::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3616 octave_diag_matrix::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3617 octave_complex_matrix::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3618 octave_complex_diag_matrix::register_type (ti); |
30852
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
3619 |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
3620 // Legacy range type, preserved to allow loading "constant" ranges |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
3621 // from data files. |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
3622 octave_legacy_range::register_type (ti); |
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
3623 |
30835
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
3624 ov_range<double>::register_type (ti); |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
3625 |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
3626 // For now, disable all but ov_range<double>. |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
3627 |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
3628 #if 0 |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
3629 |
28646
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28639
diff
changeset
|
3630 ov_range<float>::register_type (ti); |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28639
diff
changeset
|
3631 ov_range<octave_int8>::register_type (ti); |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28639
diff
changeset
|
3632 ov_range<octave_int16>::register_type (ti); |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28639
diff
changeset
|
3633 ov_range<octave_int32>::register_type (ti); |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28639
diff
changeset
|
3634 ov_range<octave_int64>::register_type (ti); |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28639
diff
changeset
|
3635 ov_range<octave_uint8>::register_type (ti); |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28639
diff
changeset
|
3636 ov_range<octave_uint16>::register_type (ti); |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28639
diff
changeset
|
3637 ov_range<octave_uint32>::register_type (ti); |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28639
diff
changeset
|
3638 ov_range<octave_uint64>::register_type (ti); |
30835
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
3639 |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
3640 #endif |
2989202f92f8
only allow range<FLOAT> to be instantiated
John W. Eaton <jwe@octave.org>
parents:
30834
diff
changeset
|
3641 |
24540
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3642 octave_bool::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3643 octave_bool_matrix::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3644 octave_char_matrix_str::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3645 octave_char_matrix_sq_str::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3646 octave_int8_scalar::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3647 octave_int16_scalar::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3648 octave_int32_scalar::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3649 octave_int64_scalar::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3650 octave_uint8_scalar::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3651 octave_uint16_scalar::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3652 octave_uint32_scalar::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3653 octave_uint64_scalar::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3654 octave_int8_matrix::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3655 octave_int16_matrix::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3656 octave_int32_matrix::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3657 octave_int64_matrix::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3658 octave_uint8_matrix::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3659 octave_uint16_matrix::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3660 octave_uint32_matrix::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3661 octave_uint64_matrix::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3662 octave_sparse_bool_matrix::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3663 octave_sparse_matrix::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3664 octave_sparse_complex_matrix::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3665 octave_struct::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3666 octave_scalar_struct::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3667 octave_class::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3668 octave_cs_list::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3669 octave_magic_colon::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3670 octave_builtin::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3671 octave_user_function::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3672 octave_dld_function::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3673 octave_fcn_handle::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3674 octave_float_scalar::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3675 octave_float_complex::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3676 octave_float_matrix::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3677 octave_float_diag_matrix::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3678 octave_float_complex_matrix::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3679 octave_float_complex_diag_matrix::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3680 octave_perm_matrix::register_type (ti); |
28588
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28519
diff
changeset
|
3681 octave_magic_int::register_type (ti); |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28519
diff
changeset
|
3682 octave_magic_uint::register_type (ti); |
24540
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3683 octave_null_matrix::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3684 octave_null_str::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3685 octave_null_sq_str::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3686 octave_lazy_index::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3687 octave_oncleanup::register_type (ti); |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3688 octave_java::register_type (ti); |
2376 | 3689 } |
3690 | |
31605
e88a07dec498
maint: Use macros to begin/end C++ namespaces.
Rik <rik@octave.org>
parents:
31155
diff
changeset
|
3691 OCTAVE_BEGIN_NAMESPACE(octave) |
29958
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29954
diff
changeset
|
3692 |
4791 | 3693 DEFUN (sizeof, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3694 doc: /* -*- texinfo -*- |
30888
32d2b6604a9f
doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents:
30868
diff
changeset
|
3695 @deftypefn {} {@var{sz} =} sizeof (@var{val}) |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3696 Return the size of @var{val} in bytes. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3697 @seealso{whos} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3698 @end deftypefn */) |
4791 | 3699 { |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3700 if (args.length () != 1) |
5823 | 3701 print_usage (); |
4791 | 3702 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20893
diff
changeset
|
3703 return ovl (args(0).byte_size ()); |
4791 | 3704 } |
3705 | |
13100
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3706 /* |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3707 %!assert (sizeof (uint64 (ones (3))), 72) |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3708 %!assert (sizeof (double (zeros (2,4))), 64) |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3709 %!assert (sizeof ({"foo", "bar", "baaz"}), 10) |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3710 */ |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3711 |
13932
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3712 static void |
23449
c763214a8260
maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents:
23433
diff
changeset
|
3713 decode_subscripts (const char *name, const octave_value& arg, |
13932
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3714 std::string& type_string, |
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3715 std::list<octave_value_list>& idx) |
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3716 { |
20704
571508c1ed06
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20703
diff
changeset
|
3717 const octave_map m = arg.xmap_value ("%s: second argument must be a structure with fields 'type' and 'subs'", name); |
571508c1ed06
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20703
diff
changeset
|
3718 |
20978
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3719 if (m.nfields () != 2 || ! m.contains ("type") || ! m.contains ("subs")) |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
3720 error ("%s: second argument must be a structure with fields 'type' and 'subs'", |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
3721 name); |
20978
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3722 |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3723 octave_idx_type nel = m.numel (); |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3724 |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3725 type_string = std::string (nel, '\0'); |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3726 idx = std::list<octave_value_list> (); |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3727 |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3728 if (nel == 0) |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3729 return; |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3730 |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3731 const Cell type = m.contents ("type"); |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3732 const Cell subs = m.contents ("subs"); |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3733 |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3734 for (int k = 0; k < nel; k++) |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3735 { |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3736 std::string item = type(k).xstring_value ("%s: type(%d) must be a string", name, k+1); |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3737 |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3738 if (item == "{}") |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3739 type_string[k] = '{'; |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3740 else if (item == "()") |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3741 type_string[k] = '('; |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3742 else if (item == ".") |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3743 type_string[k] = '.'; |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3744 else |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3745 error ("%s: invalid indexing type '%s'", name, item.c_str ()); |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3746 |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3747 octave_value_list idx_item; |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3748 |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3749 if (subs(k).is_string ()) |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3750 idx_item(0) = subs(k); |
23576
00e518162fda
maint: Deprecate is_cell and replace with iscell.
Rik <rik@octave.org>
parents:
23534
diff
changeset
|
3751 else if (subs(k).iscell ()) |
20978
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3752 { |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3753 Cell subs_cell = subs(k).cell_value (); |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3754 |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3755 for (int n = 0; n < subs_cell.numel (); n++) |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3756 { |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3757 if (subs_cell(n).is_string () |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3758 && subs_cell(n).string_value () == ":") |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3759 idx_item(n) = octave_value(octave_value::magic_colon_t); |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3760 else |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3761 idx_item(n) = subs_cell(n); |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3762 } |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3763 } |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3764 else |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3765 error ("%s: subs(%d) must be a string or cell array", name, k+1); |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3766 |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3767 idx.push_back (idx_item); |
a5b500efca9f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
3768 } |
13932
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3769 } |
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3770 |
6153 | 3771 DEFUN (subsref, args, nargout, |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3772 doc: /* -*- texinfo -*- |
30888
32d2b6604a9f
doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents:
30868
diff
changeset
|
3773 @deftypefn {} {@var{newval} =} subsref (@var{val}, @var{idx}) |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3774 Perform the subscripted element selection operation on @var{val} according |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3775 to the subscript specified by @var{idx}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3776 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3777 The subscript @var{idx} must be a structure array with fields @samp{type} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3778 and @samp{subs}. Valid values for @samp{type} are @qcode{"()"}, |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3779 @qcode{"@{@}"}, and @qcode{"."}. The @samp{subs} field may be either |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3780 @qcode{":"} or a cell array of index values. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3781 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3782 The following example shows how to extract the first two columns of a matrix |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3783 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3784 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3785 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3786 val = magic (3) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3787 @result{} val = [ 8 1 6 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3788 3 5 7 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3789 4 9 2 ] |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3790 idx.type = "()"; |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3791 idx.subs = @{":", 1:2@}; |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3792 subsref (val, idx) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3793 @result{} [ 8 1 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3794 3 5 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3795 4 9 ] |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3796 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3797 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3798 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3799 @noindent |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3800 Note that this is the same as writing @code{val(:, 1:2)}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3801 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3802 If @var{idx} is an empty structure array with fields @samp{type} and |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3803 @samp{subs}, return @var{val}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3804 @seealso{subsasgn, substruct} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3805 @end deftypefn */) |
6153 | 3806 { |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3807 if (args.length () != 2) |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3808 print_usage (); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3809 |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3810 std::string type; |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3811 std::list<octave_value_list> idx; |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3812 |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3813 decode_subscripts ("subsref", args(1), type, idx); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3814 |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3815 octave_value arg0 = args(0); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3816 |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3817 if (type.empty ()) |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20893
diff
changeset
|
3818 return ovl (arg0); |
6153 | 3819 else |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20893
diff
changeset
|
3820 return arg0.subsref (type, idx, nargout); |
6153 | 3821 } |
3822 | |
3823 DEFUN (subsasgn, args, , | |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3824 doc: /* -*- texinfo -*- |
30888
32d2b6604a9f
doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents:
30868
diff
changeset
|
3825 @deftypefn {} {@var{newval} =} subsasgn (@var{val}, @var{idx}, @var{rhs}) |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3826 Perform the subscripted assignment operation according to the subscript |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3827 specified by @var{idx}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3828 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3829 The subscript @var{idx} must be a structure array with fields @samp{type} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3830 and @samp{subs}. Valid values for @samp{type} are @qcode{"()"}, |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3831 @qcode{"@{@}"}, and @qcode{"."}. The @samp{subs} field may be either |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3832 @qcode{":"} or a cell array of index values. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3833 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3834 The following example shows how to set the two first columns of a 3-by-3 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3835 matrix to zero. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3836 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3837 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3838 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3839 val = magic (3); |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3840 idx.type = "()"; |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3841 idx.subs = @{":", 1:2@}; |
31150
44b9673c7b8d
correct subsasgn docstring example code (bug #33221)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30867
diff
changeset
|
3842 val = subsasgn (val, idx, 0) |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3843 @result{} [ 0 0 6 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3844 0 0 7 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3845 0 0 2 ] |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3846 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3847 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3848 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3849 Note that this is the same as writing @code{val(:, 1:2) = 0}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3850 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3851 If @var{idx} is an empty structure array with fields @samp{type} and |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3852 @samp{subs}, return @var{rhs}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3853 @seealso{subsref, substruct, optimize_subsasgn_calls} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3854 @end deftypefn */) |
6153 | 3855 { |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3856 if (args.length () != 3) |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3857 print_usage (); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3858 |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3859 std::string type; |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3860 std::list<octave_value_list> idx; |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3861 |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3862 decode_subscripts ("subsasgn", args(1), type, idx); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3863 |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3864 if (type.empty ()) |
6153 | 3865 { |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3866 // Regularize a null matrix if stored into a variable. |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20893
diff
changeset
|
3867 return ovl (args(2).storable_value ()); |
6153 | 3868 } |
3869 else | |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3870 { |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3871 octave_value arg0 = args(0); |
22390
6cbbd550aa91
allow subsasgn (x, idx, zeros(0,0)) to remove elements (bug #48867)
John W. Eaton <jwe@octave.org>
parents:
22327
diff
changeset
|
3872 octave_value arg2 = args(2); |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3873 |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3874 arg0.make_unique (); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3875 |
22390
6cbbd550aa91
allow subsasgn (x, idx, zeros(0,0)) to remove elements (bug #48867)
John W. Eaton <jwe@octave.org>
parents:
22327
diff
changeset
|
3876 bool arg2_null = arg2.is_zero_by_zero () && arg2.is_double_type (); |
6cbbd550aa91
allow subsasgn (x, idx, zeros(0,0)) to remove elements (bug #48867)
John W. Eaton <jwe@octave.org>
parents:
22327
diff
changeset
|
3877 |
6cbbd550aa91
allow subsasgn (x, idx, zeros(0,0)) to remove elements (bug #48867)
John W. Eaton <jwe@octave.org>
parents:
22327
diff
changeset
|
3878 return ovl (arg0.subsasgn (type, idx, (arg2_null |
6cbbd550aa91
allow subsasgn (x, idx, zeros(0,0)) to remove elements (bug #48867)
John W. Eaton <jwe@octave.org>
parents:
22327
diff
changeset
|
3879 ? octave_null_matrix::instance |
6cbbd550aa91
allow subsasgn (x, idx, zeros(0,0)) to remove elements (bug #48867)
John W. Eaton <jwe@octave.org>
parents:
22327
diff
changeset
|
3880 : arg2))); |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3881 } |
6153 | 3882 } |
13100
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3883 |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3884 /* |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3885 %!test |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3886 %! a = reshape ([1:25], 5,5); |
13932
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3887 %! idx1 = substruct ("()", {3, 3}); |
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3888 %! idx2 = substruct ("()", {2:2:5, 2:2:5}); |
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3889 %! idx3 = substruct ("()", {":", [1,5]}); |
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3890 %! idx4 = struct ("type", {}, "subs", {}); |
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3891 %! assert (subsref (a, idx1), 13); |
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3892 %! assert (subsref (a, idx2), [7 17; 9 19]); |
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3893 %! assert (subsref (a, idx3), [1:5; 21:25]'); |
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3894 %! assert (subsref (a, idx4), a); |
13100
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3895 %! a = subsasgn (a, idx1, 0); |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3896 %! a = subsasgn (a, idx2, 0); |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3897 %! a = subsasgn (a, idx3, 0); |
13932
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3898 %!# a = subsasgn (a, idx4, 0); |
13100
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3899 %! b = [0 6 11 16 0 |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3900 %! 0 0 12 0 0 |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3901 %! 0 8 0 18 0 |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3902 %! 0 0 14 0 0 |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3903 %! 0 10 15 20 0]; |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
3904 %! assert (a, b); |
13100
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3905 |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3906 %!test |
22390
6cbbd550aa91
allow subsasgn (x, idx, zeros(0,0)) to remove elements (bug #48867)
John W. Eaton <jwe@octave.org>
parents:
22327
diff
changeset
|
3907 %! x = 1:10; |
6cbbd550aa91
allow subsasgn (x, idx, zeros(0,0)) to remove elements (bug #48867)
John W. Eaton <jwe@octave.org>
parents:
22327
diff
changeset
|
3908 %! assert (subsasgn (x, substruct ("()", {1}), zeros (0, 0)), 2:10); |
6cbbd550aa91
allow subsasgn (x, idx, zeros(0,0)) to remove elements (bug #48867)
John W. Eaton <jwe@octave.org>
parents:
22327
diff
changeset
|
3909 |
6cbbd550aa91
allow subsasgn (x, idx, zeros(0,0)) to remove elements (bug #48867)
John W. Eaton <jwe@octave.org>
parents:
22327
diff
changeset
|
3910 %!test |
13100
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3911 %! c = num2cell (reshape ([1:25],5,5)); |
13932
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3912 %! idx1 = substruct ("{}", {3, 3}); |
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3913 %! idx2 = substruct ("()", {2:2:5, 2:2:5}); |
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3914 %! idx3 = substruct ("()", {":", [1,5]}); |
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3915 %! idx2p = substruct ("{}", {2:2:5, 2:2:5}); |
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3916 %! idx3p = substruct ("{}", {":", [1,5]}); |
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3917 %! idx4 = struct ("type", {}, "subs", {}); |
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3918 %! assert ({ subsref(c, idx1) }, {13}); |
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3919 %! assert ({ subsref(c, idx2p) }, {7 9 17 19}); |
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3920 %! assert ({ subsref(c, idx3p) }, num2cell ([1:5, 21:25])); |
14861
f7afecdd87ef
maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents:
14528
diff
changeset
|
3921 %! assert (subsref (c, idx4), c); |
13100
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3922 %! c = subsasgn (c, idx1, 0); |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3923 %! c = subsasgn (c, idx2, 0); |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3924 %! c = subsasgn (c, idx3, 0); |
13932
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3925 %!# c = subsasgn (c, idx4, 0); |
13100
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3926 %! d = {0 6 11 16 0 |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3927 %! 0 0 12 0 0 |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3928 %! 0 8 0 18 0 |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3929 %! 0 0 14 0 0 |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3930 %! 0 10 15 20 0}; |
13932
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3931 %! assert (c, d); |
13100
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3932 |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3933 %!test |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3934 %! s.a = "ohai"; |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3935 %! s.b = "dere"; |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3936 %! s.c = 42; |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3937 %! idx1 = substruct (".", "a"); |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3938 %! idx2 = substruct (".", "b"); |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3939 %! idx3 = substruct (".", "c"); |
13932
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3940 %! idx4 = struct ("type", {}, "subs", {}); |
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3941 %! assert (subsref (s, idx1), "ohai"); |
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3942 %! assert (subsref (s, idx2), "dere"); |
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3943 %! assert (subsref (s, idx3), 42); |
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3944 %! assert (subsref (s, idx4), s); |
13100
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3945 %! s = subsasgn (s, idx1, "Hello"); |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3946 %! s = subsasgn (s, idx2, "There"); |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3947 %! s = subsasgn (s, idx3, 163); |
13932
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3948 %!# s = subsasgn (s, idx4, 163); |
13100
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3949 %! t.a = "Hello"; |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3950 %! t.b = "There"; |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3951 %! t.c = 163; |
13932
6ead4dc1ca55
subsref, subsasgn: allow empty subscript structs
John W. Eaton <jwe@octave.org>
parents:
13793
diff
changeset
|
3952 %! assert (s, t); |
13100
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3953 */ |
06bf445ee778
Add 6 tests for ov.cc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12642
diff
changeset
|
3954 |
13712
f80473f24553
new functions is_sq_string and is_dq_string
John W. Eaton <jwe@octave.org>
parents:
13294
diff
changeset
|
3955 DEFUN (is_sq_string, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3956 doc: /* -*- texinfo -*- |
30559
841a10208c38
doc: Use TF for output variable in documentation for isXXX functions in libinterp/ directory.
Rik <rik@octave.org>
parents:
30424
diff
changeset
|
3957 @deftypefn {} {@var{tf} =} is_sq_string (@var{x}) |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3958 Return true if @var{x} is a single-quoted character string. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3959 @seealso{is_dq_string, ischar} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3960 @end deftypefn */) |
13712
f80473f24553
new functions is_sq_string and is_dq_string
John W. Eaton <jwe@octave.org>
parents:
13294
diff
changeset
|
3961 { |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3962 if (args.length () != 1) |
13712
f80473f24553
new functions is_sq_string and is_dq_string
John W. Eaton <jwe@octave.org>
parents:
13294
diff
changeset
|
3963 print_usage (); |
f80473f24553
new functions is_sq_string and is_dq_string
John W. Eaton <jwe@octave.org>
parents:
13294
diff
changeset
|
3964 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20893
diff
changeset
|
3965 return ovl (args(0).is_sq_string ()); |
13712
f80473f24553
new functions is_sq_string and is_dq_string
John W. Eaton <jwe@octave.org>
parents:
13294
diff
changeset
|
3966 } |
f80473f24553
new functions is_sq_string and is_dq_string
John W. Eaton <jwe@octave.org>
parents:
13294
diff
changeset
|
3967 |
f80473f24553
new functions is_sq_string and is_dq_string
John W. Eaton <jwe@octave.org>
parents:
13294
diff
changeset
|
3968 /* |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
3969 %!assert (is_sq_string ('foo'), true) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
3970 %!assert (is_sq_string ("foo"), false) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
3971 %!assert (is_sq_string (1.0), false) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
3972 %!assert (is_sq_string ({2.0}), false) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
3973 |
13712
f80473f24553
new functions is_sq_string and is_dq_string
John W. Eaton <jwe@octave.org>
parents:
13294
diff
changeset
|
3974 %!error is_sq_string () |
f80473f24553
new functions is_sq_string and is_dq_string
John W. Eaton <jwe@octave.org>
parents:
13294
diff
changeset
|
3975 %!error is_sq_string ('foo', 2) |
f80473f24553
new functions is_sq_string and is_dq_string
John W. Eaton <jwe@octave.org>
parents:
13294
diff
changeset
|
3976 */ |
f80473f24553
new functions is_sq_string and is_dq_string
John W. Eaton <jwe@octave.org>
parents:
13294
diff
changeset
|
3977 |
f80473f24553
new functions is_sq_string and is_dq_string
John W. Eaton <jwe@octave.org>
parents:
13294
diff
changeset
|
3978 DEFUN (is_dq_string, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3979 doc: /* -*- texinfo -*- |
30559
841a10208c38
doc: Use TF for output variable in documentation for isXXX functions in libinterp/ directory.
Rik <rik@octave.org>
parents:
30424
diff
changeset
|
3980 @deftypefn {} {@var{tf} =} is_dq_string (@var{x}) |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3981 Return true if @var{x} is a double-quoted character string. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3982 @seealso{is_sq_string, ischar} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
3983 @end deftypefn */) |
13712
f80473f24553
new functions is_sq_string and is_dq_string
John W. Eaton <jwe@octave.org>
parents:
13294
diff
changeset
|
3984 { |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
3985 if (args.length () != 1) |
13712
f80473f24553
new functions is_sq_string and is_dq_string
John W. Eaton <jwe@octave.org>
parents:
13294
diff
changeset
|
3986 print_usage (); |
f80473f24553
new functions is_sq_string and is_dq_string
John W. Eaton <jwe@octave.org>
parents:
13294
diff
changeset
|
3987 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20893
diff
changeset
|
3988 return ovl (args(0).is_dq_string ()); |
13712
f80473f24553
new functions is_sq_string and is_dq_string
John W. Eaton <jwe@octave.org>
parents:
13294
diff
changeset
|
3989 } |
f80473f24553
new functions is_sq_string and is_dq_string
John W. Eaton <jwe@octave.org>
parents:
13294
diff
changeset
|
3990 |
f80473f24553
new functions is_sq_string and is_dq_string
John W. Eaton <jwe@octave.org>
parents:
13294
diff
changeset
|
3991 /* |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
3992 %!assert (is_dq_string ("foo"), true) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
3993 %!assert (is_dq_string ('foo'), false) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
3994 %!assert (is_dq_string (1.0), false) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
3995 %!assert (is_dq_string ({2.0}), false) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
3996 |
13712
f80473f24553
new functions is_sq_string and is_dq_string
John W. Eaton <jwe@octave.org>
parents:
13294
diff
changeset
|
3997 %!error is_dq_string () |
f80473f24553
new functions is_sq_string and is_dq_string
John W. Eaton <jwe@octave.org>
parents:
13294
diff
changeset
|
3998 %!error is_dq_string ("foo", 2) |
f80473f24553
new functions is_sq_string and is_dq_string
John W. Eaton <jwe@octave.org>
parents:
13294
diff
changeset
|
3999 */ |
19391
385499581a5e
allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents:
18537
diff
changeset
|
4000 |
29982
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4001 DEFUN (optimize_permutation_matrix, args, nargout, |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
4002 doc: /* -*- texinfo -*- |
29982
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4003 @deftypefn {} {@var{val} =} optimize_permutation_matrix () |
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4004 @deftypefnx {} {@var{old_val} =} optimize_permutation_matrix (@var{new_val}) |
30588
ed17822e7662
doc: Always have a return value for functions which set internal variables (bug #61681)
Rik <rik@octave.org>
parents:
30565
diff
changeset
|
4005 @deftypefnx {} {@var{old_val} =} optimize_permutation_matrix (@var{new_val}, "local") |
29982
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4006 Query or set whether a special space-efficient format is used for storing |
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4007 permutation matrices. |
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4008 |
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4009 The default value is true. If this option is set to false, Octave will store |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
4010 permutation matrices as full matrices. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
4011 |
29929
a3ac00db296b
doc: disable_diagonal_matrix, disable_diagonal_matrix, and disable_range (patch #10089).
José Luis García Pallero <jgpallero@gmail.com>
parents:
29654
diff
changeset
|
4012 When called from inside a function with the @qcode{"local"} option, the setting |
a3ac00db296b
doc: disable_diagonal_matrix, disable_diagonal_matrix, and disable_range (patch #10089).
José Luis García Pallero <jgpallero@gmail.com>
parents:
29654
diff
changeset
|
4013 is changed locally for the function and any subroutines it calls. The original |
a3ac00db296b
doc: disable_diagonal_matrix, disable_diagonal_matrix, and disable_range (patch #10089).
José Luis García Pallero <jgpallero@gmail.com>
parents:
29654
diff
changeset
|
4014 setting is restored when exiting the function. |
29982
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4015 @seealso{optimize_range, optimize_diagonal_matrix} |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
4016 @end deftypefn */) |
19391
385499581a5e
allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents:
18537
diff
changeset
|
4017 { |
30001
428cccc75cc9
move most functions in variables.cc to octave namespace
John W. Eaton <jwe@octave.org>
parents:
29982
diff
changeset
|
4018 return set_internal_variable (Voptimize_permutation_matrix, args, nargout, |
428cccc75cc9
move most functions in variables.cc to octave namespace
John W. Eaton <jwe@octave.org>
parents:
29982
diff
changeset
|
4019 "optimize_permutation_matrix"); |
19391
385499581a5e
allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents:
18537
diff
changeset
|
4020 } |
385499581a5e
allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents:
18537
diff
changeset
|
4021 |
385499581a5e
allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents:
18537
diff
changeset
|
4022 /* |
385499581a5e
allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents:
18537
diff
changeset
|
4023 %!function p = __test_dpm__ (dpm) |
29982
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4024 %! optimize_permutation_matrix (dpm, "local"); |
19391
385499581a5e
allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents:
18537
diff
changeset
|
4025 %! [~, ~, p] = lu ([1,2;3,4]); |
385499581a5e
allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents:
18537
diff
changeset
|
4026 %!endfunction |
385499581a5e
allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents:
18537
diff
changeset
|
4027 |
29982
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4028 %!assert (typeinfo (__test_dpm__ (true)), "permutation matrix") |
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4029 %!assert (typeinfo (__test_dpm__ (false)), "matrix") |
19391
385499581a5e
allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents:
18537
diff
changeset
|
4030 */ |
385499581a5e
allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents:
18537
diff
changeset
|
4031 |
29982
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4032 DEFUN (optimize_diagonal_matrix, args, nargout, |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
4033 doc: /* -*- texinfo -*- |
29982
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4034 @deftypefn {} {@var{val} =} optimize_diagonal_matrix () |
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4035 @deftypefnx {} {@var{old_val} =} optimize_diagonal_matrix (@var{new_val}) |
30588
ed17822e7662
doc: Always have a return value for functions which set internal variables (bug #61681)
Rik <rik@octave.org>
parents:
30565
diff
changeset
|
4036 @deftypefnx {} {@var{old_val} =} optimize_diagonal_matrix (@var{new_val}, "local") |
29982
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4037 Query or set whether a special space-efficient format is used for storing |
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4038 diagonal matrices. |
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4039 |
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4040 The default value is true. If this option is set to false, Octave will store |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
4041 diagonal matrices as full matrices. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
4042 |
29929
a3ac00db296b
doc: disable_diagonal_matrix, disable_diagonal_matrix, and disable_range (patch #10089).
José Luis García Pallero <jgpallero@gmail.com>
parents:
29654
diff
changeset
|
4043 When called from inside a function with the @qcode{"local"} option, the setting |
30354
c980f938fdd8
doc: grammarcheck C++ files in libinterp/ directory ahead of 7.1 release.
Rik <rik@octave.org>
parents:
30232
diff
changeset
|
4044 is changed locally for the function and any subroutines it calls. The original |
29929
a3ac00db296b
doc: disable_diagonal_matrix, disable_diagonal_matrix, and disable_range (patch #10089).
José Luis García Pallero <jgpallero@gmail.com>
parents:
29654
diff
changeset
|
4045 setting is restored when exiting the function. |
29982
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4046 @seealso{optimize_range, optimize_permutation_matrix} |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
4047 @end deftypefn */) |
19391
385499581a5e
allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents:
18537
diff
changeset
|
4048 { |
30001
428cccc75cc9
move most functions in variables.cc to octave namespace
John W. Eaton <jwe@octave.org>
parents:
29982
diff
changeset
|
4049 return set_internal_variable (Voptimize_diagonal_matrix, args, nargout, |
428cccc75cc9
move most functions in variables.cc to octave namespace
John W. Eaton <jwe@octave.org>
parents:
29982
diff
changeset
|
4050 "optimize_diagonal_matrix"); |
19391
385499581a5e
allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents:
18537
diff
changeset
|
4051 } |
385499581a5e
allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents:
18537
diff
changeset
|
4052 |
385499581a5e
allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents:
18537
diff
changeset
|
4053 /* |
385499581a5e
allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents:
18537
diff
changeset
|
4054 %!function [x, xi, fx, fxi] = __test_ddm__ (ddm) |
29982
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4055 %! optimize_diagonal_matrix (ddm, "local"); |
19391
385499581a5e
allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents:
18537
diff
changeset
|
4056 %! x = eye (2); |
385499581a5e
allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents:
18537
diff
changeset
|
4057 %! xi = x*i; |
385499581a5e
allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents:
18537
diff
changeset
|
4058 %! fx = single (x); |
385499581a5e
allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents:
18537
diff
changeset
|
4059 %! fxi = single (xi); |
385499581a5e
allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents:
18537
diff
changeset
|
4060 %!endfunction |
385499581a5e
allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents:
18537
diff
changeset
|
4061 |
385499581a5e
allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents:
18537
diff
changeset
|
4062 %!shared x, xi, fx, fxi |
29982
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4063 %! [x, xi, fx, fxi] = __test_ddm__ (true); |
21317
a4faec57f4c8
maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
4064 %!assert (typeinfo (x), "diagonal matrix") |
a4faec57f4c8
maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
4065 %!assert (typeinfo (xi), "complex diagonal matrix") |
a4faec57f4c8
maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
4066 %!assert (typeinfo (fx), "float diagonal matrix") |
a4faec57f4c8
maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
4067 %!assert (typeinfo (fxi), "float complex diagonal matrix") |
19391
385499581a5e
allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents:
18537
diff
changeset
|
4068 |
385499581a5e
allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents:
18537
diff
changeset
|
4069 %!shared x, xi, fx, fxi |
29982
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4070 %! [x, xi, fx, fxi] = __test_ddm__ (false); |
21317
a4faec57f4c8
maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
4071 %!assert (typeinfo (x), "matrix") |
a4faec57f4c8
maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
4072 %!assert (typeinfo (xi), "complex matrix") |
a4faec57f4c8
maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
4073 %!assert (typeinfo (fx), "float matrix") |
a4faec57f4c8
maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
4074 %!assert (typeinfo (fxi), "float complex matrix") |
19391
385499581a5e
allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents:
18537
diff
changeset
|
4075 */ |
19394
b39cbe9f3bb0
allow ranges to be disabled
John W. Eaton <jwe@octave.org>
parents:
19391
diff
changeset
|
4076 |
29982
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4077 DEFUN (optimize_range, args, nargout, |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
4078 doc: /* -*- texinfo -*- |
29982
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4079 @deftypefn {} {@var{val} =} optimize_range () |
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4080 @deftypefnx {} {@var{old_val} =} optimize_range (@var{new_val}) |
30588
ed17822e7662
doc: Always have a return value for functions which set internal variables (bug #61681)
Rik <rik@octave.org>
parents:
30565
diff
changeset
|
4081 @deftypefnx {} {@var{old_val} =} optimize_range (@var{new_val}, "local") |
29982
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4082 Query or set whether a special space-efficient format is used for storing |
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4083 ranges. |
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4084 |
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4085 The default value is true. If this option is set to false, Octave will store |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
4086 ranges as full matrices. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
4087 |
29929
a3ac00db296b
doc: disable_diagonal_matrix, disable_diagonal_matrix, and disable_range (patch #10089).
José Luis García Pallero <jgpallero@gmail.com>
parents:
29654
diff
changeset
|
4088 When called from inside a function with the @qcode{"local"} option, the setting |
a3ac00db296b
doc: disable_diagonal_matrix, disable_diagonal_matrix, and disable_range (patch #10089).
José Luis García Pallero <jgpallero@gmail.com>
parents:
29654
diff
changeset
|
4089 is changed locally for the function and any subroutines it calls. The original |
a3ac00db296b
doc: disable_diagonal_matrix, disable_diagonal_matrix, and disable_range (patch #10089).
José Luis García Pallero <jgpallero@gmail.com>
parents:
29654
diff
changeset
|
4090 setting is restored when exiting the function. |
29982
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4091 @seealso{optimize_diagonal_matrix, optimize_permutation_matrix} |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21739
diff
changeset
|
4092 @end deftypefn */) |
19394
b39cbe9f3bb0
allow ranges to be disabled
John W. Eaton <jwe@octave.org>
parents:
19391
diff
changeset
|
4093 { |
30001
428cccc75cc9
move most functions in variables.cc to octave namespace
John W. Eaton <jwe@octave.org>
parents:
29982
diff
changeset
|
4094 return set_internal_variable (Voptimize_range, args, nargout, |
428cccc75cc9
move most functions in variables.cc to octave namespace
John W. Eaton <jwe@octave.org>
parents:
29982
diff
changeset
|
4095 "optimize_range"); |
19394
b39cbe9f3bb0
allow ranges to be disabled
John W. Eaton <jwe@octave.org>
parents:
19391
diff
changeset
|
4096 } |
b39cbe9f3bb0
allow ranges to be disabled
John W. Eaton <jwe@octave.org>
parents:
19391
diff
changeset
|
4097 |
b39cbe9f3bb0
allow ranges to be disabled
John W. Eaton <jwe@octave.org>
parents:
19391
diff
changeset
|
4098 /* |
b39cbe9f3bb0
allow ranges to be disabled
John W. Eaton <jwe@octave.org>
parents:
19391
diff
changeset
|
4099 %!function r = __test_dr__ (dr) |
29982
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4100 %! optimize_range (dr, "local"); |
19394
b39cbe9f3bb0
allow ranges to be disabled
John W. Eaton <jwe@octave.org>
parents:
19391
diff
changeset
|
4101 %! ## Constant folding will produce range for 1:13. |
b39cbe9f3bb0
allow ranges to be disabled
John W. Eaton <jwe@octave.org>
parents:
19391
diff
changeset
|
4102 %! base = 1; |
b39cbe9f3bb0
allow ranges to be disabled
John W. Eaton <jwe@octave.org>
parents:
19391
diff
changeset
|
4103 %! limit = 13; |
b39cbe9f3bb0
allow ranges to be disabled
John W. Eaton <jwe@octave.org>
parents:
19391
diff
changeset
|
4104 %! r = base:limit; |
b39cbe9f3bb0
allow ranges to be disabled
John W. Eaton <jwe@octave.org>
parents:
19391
diff
changeset
|
4105 %!endfunction |
b39cbe9f3bb0
allow ranges to be disabled
John W. Eaton <jwe@octave.org>
parents:
19391
diff
changeset
|
4106 |
30852
95725e6ad9c1
restore part of the old octave_range class as octave_legacy_range
John W. Eaton <jwe@octave.org>
parents:
30839
diff
changeset
|
4107 %!assert (typeinfo (__test_dr__ (true)), "double_range") |
29982
605275522c37
Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents:
29960
diff
changeset
|
4108 %!assert (typeinfo (__test_dr__ (false)), "matrix") |
19394
b39cbe9f3bb0
allow ranges to be disabled
John W. Eaton <jwe@octave.org>
parents:
19391
diff
changeset
|
4109 */ |
29958
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29954
diff
changeset
|
4110 |
31605
e88a07dec498
maint: Use macros to begin/end C++ namespaces.
Rik <rik@octave.org>
parents:
31155
diff
changeset
|
4111 OCTAVE_END_NAMESPACE(octave) |