Mercurial > octave
annotate libinterp/octave-value/ov-struct.cc @ 21121:f5b17eb2508b
maint: Remove unused variables.
* data.cc (Fissorted): Remove "octave_value mode_arg".
* error.cc (Ferror): Remove "octave_value_list tmp".
* gl2ps-renderer.cc (gl2ps_renderer::draw_text): Comment out "Matrix bbox".
* graphics.cc (base_properties::get_dynamic): Remove "octave_value retval".
* graphics.cc (Faddproperty): Remove "octave_value retval".
* regexp.cc (octregexprep): Remove "octave_value retval".
* sparse-xpow.cc (elem_xpow): Remove "Complex tmp".
* symtab.cc (symbol_table::fcn_info::fcn_info_rep::find_autoload):
Remove "octave_value retval".
* urlwrite.cc (__ftp_mode__): Remove "octave_value retval".
* xpow.cc (xpow (const DiagMatrix& a, double b)): Remove "octave_value retval".
* symrcm.cc (Fsymrcm): Remove "octave_value retval".
* ov-cell.cc (Fcellstr): Remove "octave_value retval".
* ov-classdef.cc (cdef_object::map_value): Remove "octave_value pvalue".
* ov-struct.cc (octave_scalar_struct::load_binary): Remove "dim_vector dv (1, 1)"
* ov-struct.cc (Fstruct): Remove "Cell fields"
ov.cc (octave_value::assign): Remove "octave_value retval".
* pt-classdef.cc (tree_classdef_body::~tree_classdef_body): Remove
"octave_value retval".
* pt-eval.cc (tree_evaluator::visit_statement_list): Comment out
"static octave_value_list empty_list".
* DASRT.cc (DASRT::integrate): Remove "DASRT_result retval".
* sparse-base-chol.cc (sparse_base_chol<>): Remove "chol_type ret".
author | Rik <rik@octave.org> |
---|---|
date | Wed, 20 Jan 2016 20:57:45 -0800 |
parents | 3ac9f47fb04b |
children | 95f8c8cdbffe |
rev | line source |
---|---|
2376 | 1 /* |
2 | |
19697
4197fc428c7d
maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents:
19598
diff
changeset
|
3 Copyright (C) 1996-2015 John W. Eaton |
2376 | 4 |
5 This file is part of Octave. | |
6 | |
7 Octave is free software; you can redistribute it and/or modify it | |
8 under the terms of the GNU General Public License as published by the | |
7016 | 9 Free Software Foundation; either version 3 of the License, or (at your |
10 option) any later version. | |
2376 | 11 |
12 Octave is distributed in the hope that it will be useful, but WITHOUT | |
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
7016 | 18 along with Octave; see the file COPYING. If not, see |
19 <http://www.gnu.org/licenses/>. | |
2376 | 20 |
21 */ | |
22 | |
23 #ifdef HAVE_CONFIG_H | |
24 #include <config.h> | |
25 #endif | |
26 | |
3503 | 27 #include <iostream> |
2376 | 28 |
3933 | 29 #include "Cell.h" |
4358 | 30 #include "defun.h" |
2376 | 31 #include "error.h" |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
21098
diff
changeset
|
32 #include "errwarn.h" |
15149
62a35ae7d6a2
use forward decls for mxArray in ov.h and ov-base.h
John W. Eaton <jwe@octave.org>
parents:
15057
diff
changeset
|
33 #include "mxarray.h" |
2979 | 34 #include "oct-lvalue.h" |
19863
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19852
diff
changeset
|
35 #include "oct-hdf5.h" |
2376 | 36 #include "ov-struct.h" |
37 #include "unwind-prot.h" | |
6811 | 38 #include "utils.h" |
2948 | 39 #include "variables.h" |
2376 | 40 |
4750 | 41 #include "Array-util.h" |
8377
25bc2d31e1bf
improve OCTAVE_LOCAL_BUFFER
Jaroslav Hajek <highegg@gmail.com>
parents:
8150
diff
changeset
|
42 #include "oct-locbuf.h" |
4750 | 43 |
4687 | 44 #include "byte-swap.h" |
20447
c6224b4e7774
maint: Rename instances of LS_ASCII to LS_TEXT for clarity.
Rik <rik@octave.org>
parents:
20232
diff
changeset
|
45 #include "ls-oct-text.h" |
4687 | 46 #include "ls-oct-binary.h" |
47 #include "ls-hdf5.h" | |
48 #include "ls-utils.h" | |
5759 | 49 #include "pr-output.h" |
4687 | 50 |
2376 | 51 |
4612 | 52 DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA(octave_struct, "struct", "struct"); |
2376 | 53 |
11474 | 54 // How many levels of structure elements should we print? |
55 static int Vstruct_levels_to_print = 2; | |
56 | |
57 // TRUE means print struct array contents, up to the number of levels | |
58 // specified by struct_levels_to_print. | |
59 static bool Vprint_struct_array_contents = false; | |
60 | |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
61 octave_base_value * |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
62 octave_struct::try_narrowing_conversion (void) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
63 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
64 octave_base_value *retval = 0; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
65 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
66 if (numel () == 1) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
67 retval = new octave_scalar_struct (map.checkelem (0)); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
68 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
69 return retval; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
70 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
71 |
4513 | 72 Cell |
8551
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
73 octave_struct::dotref (const octave_value_list& idx, bool auto_add) |
2962 | 74 { |
4513 | 75 Cell retval; |
3933 | 76 |
77 assert (idx.length () == 1); | |
2962 | 78 |
3933 | 79 std::string nm = idx(0).string_value (); |
80 | |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
81 octave_map::const_iterator p = map.seek (nm); |
2376 | 82 |
4219 | 83 if (p != map.end ()) |
3933 | 84 retval = map.contents (p); |
8551
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
85 else if (auto_add) |
20974
1edf15793cac
maint: Use is_empty rather than "numel () == 0" for clarity.
Rik <rik@octave.org>
parents:
20962
diff
changeset
|
86 retval = (is_empty ()) ? Cell (dim_vector (1, 1)) : Cell (dims ()); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
87 else |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
88 error_with_id ("Octave:invalid-indexing", |
15731
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15614
diff
changeset
|
89 "structure has no member '%s'", nm.c_str ()); |
2376 | 90 |
91 return retval; | |
92 } | |
93 | |
3933 | 94 static void |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
21098
diff
changeset
|
95 err_invalid_index_for_assignment (void) |
3933 | 96 { |
97 error ("invalid index for structure array assignment"); | |
98 } | |
99 | |
100 static void | |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
21098
diff
changeset
|
101 err_invalid_index_type (const std::string& nm, char t) |
3933 | 102 { |
103 error ("%s cannot be indexed with %c", nm.c_str (), t); | |
104 } | |
105 | |
9529
8e5009334661
partially revert e79470be3ecb
Jaroslav Hajek <highegg@gmail.com>
parents:
9522
diff
changeset
|
106 static void |
15614
f2b8f90052fd
warn instead of throwing an error for invalid structure field names
John W. Eaton <jwe@octave.org>
parents:
15613
diff
changeset
|
107 maybe_warn_invalid_field_name (const std::string& key, const char *who) |
f2b8f90052fd
warn instead of throwing an error for invalid structure field names
John W. Eaton <jwe@octave.org>
parents:
15613
diff
changeset
|
108 { |
f2b8f90052fd
warn instead of throwing an error for invalid structure field names
John W. Eaton <jwe@octave.org>
parents:
15613
diff
changeset
|
109 if (! valid_identifier (key)) |
f2b8f90052fd
warn instead of throwing an error for invalid structure field names
John W. Eaton <jwe@octave.org>
parents:
15613
diff
changeset
|
110 { |
f2b8f90052fd
warn instead of throwing an error for invalid structure field names
John W. Eaton <jwe@octave.org>
parents:
15613
diff
changeset
|
111 if (who) |
19852
e9a0bd0b125c
Rename 'matlab-incompatible' warning to 'language-extension'.
Carnë Draug <carandraug@octave.org>
parents:
19697
diff
changeset
|
112 warning_with_id ("Octave:language-extension", |
15614
f2b8f90052fd
warn instead of throwing an error for invalid structure field names
John W. Eaton <jwe@octave.org>
parents:
15613
diff
changeset
|
113 "%s: invalid structure field name '%s'", |
f2b8f90052fd
warn instead of throwing an error for invalid structure field names
John W. Eaton <jwe@octave.org>
parents:
15613
diff
changeset
|
114 who, key.c_str ()); |
f2b8f90052fd
warn instead of throwing an error for invalid structure field names
John W. Eaton <jwe@octave.org>
parents:
15613
diff
changeset
|
115 else |
19852
e9a0bd0b125c
Rename 'matlab-incompatible' warning to 'language-extension'.
Carnë Draug <carandraug@octave.org>
parents:
19697
diff
changeset
|
116 warning_with_id ("Octave:language-extension", |
15614
f2b8f90052fd
warn instead of throwing an error for invalid structure field names
John W. Eaton <jwe@octave.org>
parents:
15613
diff
changeset
|
117 "invalid structure field name '%s'", |
f2b8f90052fd
warn instead of throwing an error for invalid structure field names
John W. Eaton <jwe@octave.org>
parents:
15613
diff
changeset
|
118 key.c_str ()); |
f2b8f90052fd
warn instead of throwing an error for invalid structure field names
John W. Eaton <jwe@octave.org>
parents:
15613
diff
changeset
|
119 } |
f2b8f90052fd
warn instead of throwing an error for invalid structure field names
John W. Eaton <jwe@octave.org>
parents:
15613
diff
changeset
|
120 } |
f2b8f90052fd
warn instead of throwing an error for invalid structure field names
John W. Eaton <jwe@octave.org>
parents:
15613
diff
changeset
|
121 |
7651
443a8f5a50fd
require both subsref variants to be defined in octave_value subclasses
John W. Eaton <jwe@octave.org>
parents:
7622
diff
changeset
|
122 octave_value_list |
4247 | 123 octave_struct::subsref (const std::string& type, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
124 const std::list<octave_value_list>& idx, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
125 int nargout) |
3933 | 126 { |
7651
443a8f5a50fd
require both subsref variants to be defined in octave_value subclasses
John W. Eaton <jwe@octave.org>
parents:
7622
diff
changeset
|
127 octave_value_list retval; |
3933 | 128 |
129 int skip = 1; | |
130 | |
131 switch (type[0]) | |
132 { | |
133 case '(': | |
134 { | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
135 if (type.length () > 1 && type[1] == '.') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
136 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
137 std::list<octave_value_list>::const_iterator p = idx.begin (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
138 octave_value_list key_idx = *++p; |
3933 | 139 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
140 const Cell tmp = dotref (key_idx); |
3933 | 141 |
20561
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
142 const Cell t = tmp.index (idx.front ()); |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
143 |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
144 retval(0) = (t.numel () == 1) ? t(0) : octave_value (t, true); |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
145 |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
146 // We handled two index elements, so tell |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
147 // next_subsref to skip both of them. |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
148 |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
149 skip++; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
150 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
151 else |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
152 retval(0) = do_index_op (idx.front ()); |
3933 | 153 } |
154 break; | |
155 | |
156 case '.': | |
157 { | |
14846
460a3c6d8bf1
maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents:
14625
diff
changeset
|
158 if (map.numel () > 0) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
159 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
160 const Cell t = dotref (idx.front ()); |
3933 | 161 |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20218
diff
changeset
|
162 retval(0) = (t.numel () == 1) ? t(0) : octave_value (t, true); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
163 } |
3933 | 164 } |
165 break; | |
166 | |
167 case '{': | |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
21098
diff
changeset
|
168 err_invalid_index_type (type_name (), type[0]); |
3933 | 169 break; |
170 | |
171 default: | |
172 panic_impossible (); | |
173 } | |
174 | |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
175 // FIXME: perhaps there should be an |
4994 | 176 // octave_value_list::next_subsref member function? See also |
177 // octave_user_function::subsref. | |
178 | |
179 if (idx.size () > 1) | |
7651
443a8f5a50fd
require both subsref variants to be defined in octave_value subclasses
John W. Eaton <jwe@octave.org>
parents:
7622
diff
changeset
|
180 retval = retval(0).next_subsref (nargout, type, idx, skip); |
3933 | 181 |
182 return retval; | |
183 } | |
184 | |
8551
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
185 octave_value |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
186 octave_struct::subsref (const std::string& type, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
187 const std::list<octave_value_list>& idx, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
188 bool auto_add) |
8551
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
189 { |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
190 octave_value retval; |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
191 |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
192 int skip = 1; |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
193 |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
194 switch (type[0]) |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
195 { |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
196 case '(': |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
197 { |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
198 if (type.length () > 1 && type[1] == '.') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
199 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
200 std::list<octave_value_list>::const_iterator p = idx.begin (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
201 octave_value_list key_idx = *++p; |
8551
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
202 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
203 const Cell tmp = dotref (key_idx, auto_add); |
8551
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
204 |
20561
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
205 const Cell t = tmp.index (idx.front (), auto_add); |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
206 |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
207 retval = (t.numel () == 1) ? t(0) : octave_value (t, true); |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
208 |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
209 // We handled two index elements, so tell |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
210 // next_subsref to skip both of them. |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
211 |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
212 skip++; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
213 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
214 else |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
215 retval = do_index_op (idx.front (), auto_add); |
8551
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
216 } |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
217 break; |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
218 |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
219 case '.': |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
220 { |
14846
460a3c6d8bf1
maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents:
14625
diff
changeset
|
221 if (map.numel () > 0) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
222 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
223 const Cell t = dotref (idx.front (), auto_add); |
8551
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
224 |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20218
diff
changeset
|
225 retval = (t.numel () == 1) ? t(0) : octave_value (t, true); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
226 } |
8551
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
227 } |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
228 break; |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
229 |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
230 case '{': |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
21098
diff
changeset
|
231 err_invalid_index_type (type_name (), type[0]); |
8551
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
232 break; |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
233 |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
234 default: |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
235 panic_impossible (); |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
236 } |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
237 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
238 // FIXME: perhaps there should be an |
8551
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
239 // octave_value_list::next_subsref member function? See also |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
240 // octave_user_function::subsref. |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
241 |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
242 if (idx.size () > 1) |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
243 retval = retval.next_subsref (auto_add, type, idx, skip); |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
244 |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
245 return retval; |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
246 } |
906f976d35a8
further improve struct&cell indexing & indexed assignment
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
247 |
8031
d9987dbdf91b
octave_struct::subsref: don't resize for simple x(idx) case
John W. Eaton <jwe@octave.org>
parents:
7651
diff
changeset
|
248 /* |
d9987dbdf91b
octave_struct::subsref: don't resize for simple x(idx) case
John W. Eaton <jwe@octave.org>
parents:
7651
diff
changeset
|
249 %!test |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
250 %! x(1).a.a = 1; |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
251 %! x(2).a.a = 2; |
8031
d9987dbdf91b
octave_struct::subsref: don't resize for simple x(idx) case
John W. Eaton <jwe@octave.org>
parents:
7651
diff
changeset
|
252 %! assert (size (x), [1, 2]); |
d9987dbdf91b
octave_struct::subsref: don't resize for simple x(idx) case
John W. Eaton <jwe@octave.org>
parents:
7651
diff
changeset
|
253 %! assert (x(1).a.a, 1); |
d9987dbdf91b
octave_struct::subsref: don't resize for simple x(idx) case
John W. Eaton <jwe@octave.org>
parents:
7651
diff
changeset
|
254 %! assert (x(2).a.a, 2); |
d9987dbdf91b
octave_struct::subsref: don't resize for simple x(idx) case
John W. Eaton <jwe@octave.org>
parents:
7651
diff
changeset
|
255 */ |
d9987dbdf91b
octave_struct::subsref: don't resize for simple x(idx) case
John W. Eaton <jwe@octave.org>
parents:
7651
diff
changeset
|
256 |
3933 | 257 octave_value |
8546
3d8a914c580e
improve parser indexed assigment code
Jaroslav Hajek <highegg@gmail.com>
parents:
8523
diff
changeset
|
258 octave_struct::numeric_conv (const octave_value& val, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
259 const std::string& type) |
3933 | 260 { |
261 octave_value retval; | |
262 | |
8546
3d8a914c580e
improve parser indexed assigment code
Jaroslav Hajek <highegg@gmail.com>
parents:
8523
diff
changeset
|
263 if (type.length () > 0 && type[0] == '.' && ! val.is_map ()) |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
264 retval = octave_map (); |
3933 | 265 else |
8546
3d8a914c580e
improve parser indexed assigment code
Jaroslav Hajek <highegg@gmail.com>
parents:
8523
diff
changeset
|
266 retval = val; |
3933 | 267 |
268 return retval; | |
269 } | |
270 | |
271 octave_value | |
4247 | 272 octave_struct::subsasgn (const std::string& type, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
273 const std::list<octave_value_list>& idx, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
274 const octave_value& rhs) |
2376 | 275 { |
3933 | 276 octave_value retval; |
277 | |
278 int n = type.length (); | |
279 | |
280 octave_value t_rhs = rhs; | |
281 | |
9286
c2248cc4821a
don't crash on assignments like a() = 1
Jaroslav Hajek <highegg@gmail.com>
parents:
9190
diff
changeset
|
282 if (idx.front ().empty ()) |
20893
384ff5aa9437
2015 Code Sprint: Eliminate useless return statements after error ().
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
283 error ("missing index in indexed assignment"); |
9286
c2248cc4821a
don't crash on assignments like a() = 1
Jaroslav Hajek <highegg@gmail.com>
parents:
9190
diff
changeset
|
284 |
3933 | 285 if (n > 1 && ! (type.length () == 2 && type[0] == '(' && type[1] == '.')) |
286 { | |
287 switch (type[0]) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
288 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
289 case '(': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
290 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
291 if (type.length () > 1 && type[1] == '.') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
292 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
293 std::list<octave_value_list>::const_iterator p = idx.begin (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
294 octave_value_list t_idx = *p; |
3933 | 295 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
296 octave_value_list key_idx = *++p; |
4513 | 297 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
298 assert (key_idx.length () == 1); |
3933 | 299 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
300 std::string key = key_idx(0).string_value (); |
3933 | 301 |
15614
f2b8f90052fd
warn instead of throwing an error for invalid structure field names
John W. Eaton <jwe@octave.org>
parents:
15613
diff
changeset
|
302 maybe_warn_invalid_field_name (key, "subsasgn"); |
f2b8f90052fd
warn instead of throwing an error for invalid structure field names
John W. Eaton <jwe@octave.org>
parents:
15613
diff
changeset
|
303 |
8546
3d8a914c580e
improve parser indexed assigment code
Jaroslav Hajek <highegg@gmail.com>
parents:
8523
diff
changeset
|
304 std::list<octave_value_list> next_idx (idx); |
3d8a914c580e
improve parser indexed assigment code
Jaroslav Hajek <highegg@gmail.com>
parents:
8523
diff
changeset
|
305 |
3d8a914c580e
improve parser indexed assigment code
Jaroslav Hajek <highegg@gmail.com>
parents:
8523
diff
changeset
|
306 // We handled two index elements, so subsasgn to |
3d8a914c580e
improve parser indexed assigment code
Jaroslav Hajek <highegg@gmail.com>
parents:
8523
diff
changeset
|
307 // needs to skip both of them. |
3933 | 308 |
8546
3d8a914c580e
improve parser indexed assigment code
Jaroslav Hajek <highegg@gmail.com>
parents:
8523
diff
changeset
|
309 next_idx.erase (next_idx.begin ()); |
3d8a914c580e
improve parser indexed assigment code
Jaroslav Hajek <highegg@gmail.com>
parents:
8523
diff
changeset
|
310 next_idx.erase (next_idx.begin ()); |
8456
c1709a45b45b
optimize structure components access
Jaroslav Hajek <highegg@gmail.com>
parents:
8377
diff
changeset
|
311 |
8546
3d8a914c580e
improve parser indexed assigment code
Jaroslav Hajek <highegg@gmail.com>
parents:
8523
diff
changeset
|
312 std::string next_type = type.substr (2); |
3d8a914c580e
improve parser indexed assigment code
Jaroslav Hajek <highegg@gmail.com>
parents:
8523
diff
changeset
|
313 |
9087
961410931a4f
fix nested struct assignments
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
314 Cell tmpc (1, 1); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
315 octave_map::iterator pkey = map.seek (key); |
9087
961410931a4f
fix nested struct assignments
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
316 if (pkey != map.end ()) |
961410931a4f
fix nested struct assignments
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
317 { |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
318 map.contents (pkey).make_unique (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
319 tmpc = map.contents (pkey).index (idx.front (), true); |
9087
961410931a4f
fix nested struct assignments
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
320 } |
3933 | 321 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
322 // FIXME: better code reuse? |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
323 // cf. octave_cell::subsasgn and the case below. |
21118
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
324 if (tmpc.numel () != 1) |
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
325 err_indexed_cs_list (); |
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
326 |
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
327 octave_value& tmp = tmpc(0); |
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
328 |
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
329 bool orig_undefined = tmp.is_undefined (); |
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
330 |
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
331 if (orig_undefined || tmp.is_zero_by_zero ()) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
332 { |
21118
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
333 tmp = octave_value::empty_conv (next_type, rhs); |
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
334 tmp.make_unique (); // probably a no-op. |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
335 } |
20561
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
336 else |
21118
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
337 // optimization: ignore the copy |
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
338 // still stored inside our map. |
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
339 tmp.make_unique (1); |
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
340 |
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
341 t_rhs =(orig_undefined |
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
342 ? tmp.undef_subsasgn (next_type, next_idx, rhs) |
3ac9f47fb04b
Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
343 : tmp.subsasgn (next_type, next_idx, rhs)); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
344 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
345 else |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
21098
diff
changeset
|
346 err_invalid_index_for_assignment (); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
347 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
348 break; |
3933 | 349 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
350 case '.': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
351 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
352 octave_value_list key_idx = idx.front (); |
3933 | 353 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
354 assert (key_idx.length () == 1); |
3933 | 355 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
356 std::string key = key_idx(0).string_value (); |
3933 | 357 |
15614
f2b8f90052fd
warn instead of throwing an error for invalid structure field names
John W. Eaton <jwe@octave.org>
parents:
15613
diff
changeset
|
358 maybe_warn_invalid_field_name (key, "subsasgn"); |
f2b8f90052fd
warn instead of throwing an error for invalid structure field names
John W. Eaton <jwe@octave.org>
parents:
15613
diff
changeset
|
359 |
8546
3d8a914c580e
improve parser indexed assigment code
Jaroslav Hajek <highegg@gmail.com>
parents:
8523
diff
changeset
|
360 std::list<octave_value_list> next_idx (idx); |
3d8a914c580e
improve parser indexed assigment code
Jaroslav Hajek <highegg@gmail.com>
parents:
8523
diff
changeset
|
361 |
3d8a914c580e
improve parser indexed assigment code
Jaroslav Hajek <highegg@gmail.com>
parents:
8523
diff
changeset
|
362 next_idx.erase (next_idx.begin ()); |
3933 | 363 |
8546
3d8a914c580e
improve parser indexed assigment code
Jaroslav Hajek <highegg@gmail.com>
parents:
8523
diff
changeset
|
364 std::string next_type = type.substr (1); |
8456
c1709a45b45b
optimize structure components access
Jaroslav Hajek <highegg@gmail.com>
parents:
8377
diff
changeset
|
365 |
8580
188d38a553c7
further indexing optimization touches
Jaroslav Hajek <highegg@gmail.com>
parents:
8579
diff
changeset
|
366 Cell tmpc (1, 1); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
367 octave_map::iterator pkey = map.seek (key); |
9087
961410931a4f
fix nested struct assignments
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
368 if (pkey != map.end ()) |
961410931a4f
fix nested struct assignments
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
369 { |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
370 map.contents (pkey).make_unique (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
371 tmpc = map.contents (pkey); |
9087
961410931a4f
fix nested struct assignments
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
372 } |
3933 | 373 |
8546
3d8a914c580e
improve parser indexed assigment code
Jaroslav Hajek <highegg@gmail.com>
parents:
8523
diff
changeset
|
374 // FIXME: better code reuse? |
20561
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
375 |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
376 if (tmpc.numel () == 1) |
8546
3d8a914c580e
improve parser indexed assigment code
Jaroslav Hajek <highegg@gmail.com>
parents:
8523
diff
changeset
|
377 { |
20561
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
378 octave_value& tmp = tmpc(0); |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
379 |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
380 bool orig_undefined = tmp.is_undefined (); |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
381 |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
382 if (orig_undefined || tmp.is_zero_by_zero ()) |
8546
3d8a914c580e
improve parser indexed assigment code
Jaroslav Hajek <highegg@gmail.com>
parents:
8523
diff
changeset
|
383 { |
20561
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
384 tmp = octave_value::empty_conv (next_type, rhs); |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
385 tmp.make_unique (); // probably a no-op. |
8456
c1709a45b45b
optimize structure components access
Jaroslav Hajek <highegg@gmail.com>
parents:
8377
diff
changeset
|
386 } |
c1709a45b45b
optimize structure components access
Jaroslav Hajek <highegg@gmail.com>
parents:
8377
diff
changeset
|
387 else |
20561
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
388 // optimization: ignore the copy |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
389 // still stored inside our map. |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
390 tmp.make_unique (1); |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
391 |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
392 t_rhs = (orig_undefined |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
393 ? tmp.undef_subsasgn (next_type, next_idx, rhs) |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
394 : tmp.subsasgn (next_type, next_idx, rhs)); |
8546
3d8a914c580e
improve parser indexed assigment code
Jaroslav Hajek <highegg@gmail.com>
parents:
8523
diff
changeset
|
395 } |
20561
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
396 else |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
21098
diff
changeset
|
397 err_indexed_cs_list (); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
398 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
399 break; |
3933 | 400 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
401 case '{': |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
21098
diff
changeset
|
402 err_invalid_index_type (type_name (), type[0]); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
403 break; |
3933 | 404 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
405 default: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
406 panic_impossible (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
407 } |
3933 | 408 } |
409 | |
20740
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
410 switch (type[0]) |
3933 | 411 { |
20740
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
412 case '(': |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
413 { |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
414 if (n > 1 && type[1] == '.') |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
415 { |
20740
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
416 std::list<octave_value_list>::const_iterator p = idx.begin (); |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
417 octave_value_list key_idx = *++p; |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
418 octave_value_list idxf = idx.front (); |
9529
8e5009334661
partially revert e79470be3ecb
Jaroslav Hajek <highegg@gmail.com>
parents:
9522
diff
changeset
|
419 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
420 assert (key_idx.length () == 1); |
9529
8e5009334661
partially revert e79470be3ecb
Jaroslav Hajek <highegg@gmail.com>
parents:
9522
diff
changeset
|
421 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
422 std::string key = key_idx(0).string_value (); |
9529
8e5009334661
partially revert e79470be3ecb
Jaroslav Hajek <highegg@gmail.com>
parents:
9522
diff
changeset
|
423 |
15614
f2b8f90052fd
warn instead of throwing an error for invalid structure field names
John W. Eaton <jwe@octave.org>
parents:
15613
diff
changeset
|
424 maybe_warn_invalid_field_name (key, "subsasgn"); |
f2b8f90052fd
warn instead of throwing an error for invalid structure field names
John W. Eaton <jwe@octave.org>
parents:
15613
diff
changeset
|
425 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
426 if (t_rhs.is_cs_list ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
427 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
428 Cell tmp_cell = Cell (t_rhs.list_value ()); |
9529
8e5009334661
partially revert e79470be3ecb
Jaroslav Hajek <highegg@gmail.com>
parents:
9522
diff
changeset
|
429 |
20740
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
430 // Inquire the proper shape of the RHS. |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
431 |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
432 dim_vector didx = dims ().redim (idxf.length ()); |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
433 for (octave_idx_type k = 0; k < idxf.length (); k++) |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
434 if (! idxf(k).is_magic_colon ()) |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
435 didx(k) = idxf(k).numel (); |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
436 |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
437 if (didx.numel () == tmp_cell.numel ()) |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
438 tmp_cell = tmp_cell.reshape (didx); |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
439 |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
440 |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
441 map.assign (idxf, key, tmp_cell); |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
442 |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
443 count++; |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
444 retval = octave_value (this); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
445 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
446 else |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
447 { |
20740
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
448 const octave_map& cmap = |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
449 const_cast<const octave_map &> (map); |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
450 // cast to const reference, avoid forced key insertion. |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
451 if (idxf.all_scalars () |
21098
99d373870017
Fix assigning to trailing singletons for structs and cell (bug #39789, bug #35841)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21022
diff
changeset
|
452 || cmap.contents (key).index (idxf, true).numel () == 1) |
20740
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
453 { |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
454 map.assign (idxf, |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
455 key, Cell (t_rhs.storable_value ())); |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
456 |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
457 count++; |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
458 retval = octave_value (this); |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
459 } |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
460 else |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
21098
diff
changeset
|
461 err_nonbraced_cs_list_assignment (); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
462 } |
20740
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
463 } |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
464 else |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
465 { |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
466 if (t_rhs.is_map () || t_rhs.is_object ()) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
467 { |
20740
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
468 octave_map rhs_map = t_rhs.xmap_value ("invalid structure assignment"); |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
469 |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
470 map.assign (idx.front (), rhs_map); |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
471 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
472 count++; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
473 retval = octave_value (this); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
474 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
475 else |
20740
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
476 { |
20962
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20956
diff
changeset
|
477 if (! t_rhs.is_null_value ()) |
20740
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
478 error ("invalid structure assignment"); |
20962
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20956
diff
changeset
|
479 |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20956
diff
changeset
|
480 map.delete_elements (idx.front ()); |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20956
diff
changeset
|
481 |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20956
diff
changeset
|
482 count++; |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20956
diff
changeset
|
483 retval = octave_value (this); |
20740
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
484 } |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
485 } |
20740
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
486 } |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
487 break; |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
488 |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
489 case '.': |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
490 { |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
491 octave_value_list key_idx = idx.front (); |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
492 |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
493 assert (key_idx.length () == 1); |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
494 |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
495 std::string key = key_idx(0).string_value (); |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
496 |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
497 maybe_warn_invalid_field_name (key, "subsasgn"); |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
498 |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
499 if (t_rhs.is_cs_list ()) |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
500 { |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
501 Cell tmp_cell = Cell (t_rhs.list_value ()); |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
502 |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
503 // The shape of the RHS is irrelevant, we just want |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
504 // the number of elements to agree and to preserve the |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
505 // shape of the left hand side of the assignment. |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
506 |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
507 if (numel () == tmp_cell.numel ()) |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
508 tmp_cell = tmp_cell.reshape (dims ()); |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
509 |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
510 map.setfield (key, tmp_cell); |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
511 } |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
512 else |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
513 { |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
514 Cell tmp_cell(1, 1); |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
515 tmp_cell(0) = t_rhs.storable_value (); |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
516 map.setfield (key, tmp_cell); |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
517 } |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
518 |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
519 count++; |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
520 retval = octave_value (this); |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
521 } |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
522 break; |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
523 |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
524 case '{': |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
21098
diff
changeset
|
525 err_invalid_index_type (type_name (), type[0]); |
20740
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
526 break; |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
527 |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
528 default: |
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
529 panic_impossible (); |
3933 | 530 } |
531 | |
10754
92eb5fb58ebc
fix resize with structs
Jaroslav Hajek <highegg@gmail.com>
parents:
10753
diff
changeset
|
532 retval.maybe_mutate (); |
92eb5fb58ebc
fix resize with structs
Jaroslav Hajek <highegg@gmail.com>
parents:
10753
diff
changeset
|
533 |
3933 | 534 return retval; |
2376 | 535 } |
536 | |
7046 | 537 octave_value |
538 octave_struct::do_index_op (const octave_value_list& idx, bool resize_ok) | |
539 { | |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
540 // octave_map handles indexing itself. |
8679
280fae940bb0
optimize scalar indexing
Jaroslav Hajek <highegg@gmail.com>
parents:
8587
diff
changeset
|
541 return map.index (idx, resize_ok); |
7046 | 542 } |
543 | |
4791 | 544 size_t |
545 octave_struct::byte_size (void) const | |
546 { | |
547 // Neglect the size of the fieldnames. | |
548 | |
549 size_t retval = 0; | |
550 | |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
551 for (octave_map::const_iterator p = map.begin (); p != map.end (); p++) |
4791 | 552 { |
553 std::string key = map.key (p); | |
554 | |
555 octave_value val = octave_value (map.contents (p)); | |
556 | |
557 retval += val.byte_size (); | |
558 } | |
559 | |
560 return retval; | |
561 } | |
562 | |
2376 | 563 void |
18416
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18384
diff
changeset
|
564 octave_struct::print (std::ostream& os, bool) |
2901 | 565 { |
566 print_raw (os); | |
567 } | |
568 | |
569 void | |
3523 | 570 octave_struct::print_raw (std::ostream& os, bool) const |
2376 | 571 { |
10066
2cd940306a06
make unwind_protect frames local
Jaroslav Hajek <highegg@gmail.com>
parents:
10030
diff
changeset
|
572 unwind_protect frame; |
2376 | 573 |
10066
2cd940306a06
make unwind_protect frames local
Jaroslav Hajek <highegg@gmail.com>
parents:
10030
diff
changeset
|
574 frame.protect_var (Vstruct_levels_to_print); |
2376 | 575 |
3961 | 576 if (Vstruct_levels_to_print >= 0) |
2376 | 577 { |
11474 | 578 bool max_depth_reached = Vstruct_levels_to_print-- == 0; |
3961 | 579 |
11474 | 580 bool print_fieldnames_only |
581 = (max_depth_reached || ! Vprint_struct_array_contents); | |
2376 | 582 |
2901 | 583 increment_indent_level (); |
2376 | 584 |
11474 | 585 newline (os); |
586 indent (os); | |
587 dim_vector dv = dims (); | |
588 os << dv.str () << " struct array containing the fields:"; | |
589 newline (os); | |
3932 | 590 |
11474 | 591 increment_indent_level (); |
4604 | 592 |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
593 string_vector key_list = map.fieldnames (); |
5880 | 594 |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20218
diff
changeset
|
595 for (octave_idx_type i = 0; i < key_list.numel (); i++) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
596 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
597 std::string key = key_list[i]; |
5880 | 598 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
599 Cell val = map.contents (key); |
2376 | 600 |
11474 | 601 newline (os); |
3961 | 602 |
11474 | 603 if (print_fieldnames_only) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
604 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
605 indent (os); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
606 os << key; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
607 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
608 else |
11474 | 609 { |
610 octave_value tmp (val); | |
611 tmp.print_with_name (os, key); | |
612 } | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
613 } |
2376 | 614 |
11474 | 615 if (print_fieldnames_only) |
616 newline (os); | |
4604 | 617 |
2901 | 618 decrement_indent_level (); |
11474 | 619 decrement_indent_level (); |
2376 | 620 } |
621 else | |
2901 | 622 { |
3961 | 623 indent (os); |
624 os << "<structure>"; | |
2901 | 625 newline (os); |
626 } | |
2376 | 627 } |
628 | |
2901 | 629 bool |
3523 | 630 octave_struct::print_name_tag (std::ostream& os, const std::string& name) const |
2901 | 631 { |
3961 | 632 bool retval = false; |
633 | |
2901 | 634 indent (os); |
3961 | 635 |
636 if (Vstruct_levels_to_print < 0) | |
637 os << name << " = "; | |
638 else | |
639 { | |
640 os << name << " ="; | |
641 newline (os); | |
642 retval = true; | |
643 } | |
644 | |
645 return retval; | |
2901 | 646 } |
647 | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
648 static bool |
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
649 scalar (const dim_vector& dims) |
4744 | 650 { |
20218
b2100e1659ac
maint: Use cuddled parentheses when indexing dimension_vectors.
Rik <rik@octave.org>
parents:
20181
diff
changeset
|
651 return dims.length () == 2 && dims(0) == 1 && dims(1) == 1; |
4744 | 652 } |
653 | |
654 | |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
655 bool |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
656 octave_struct::save_ascii (std::ostream& os) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
657 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
658 octave_map m = map_value (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
659 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
660 octave_idx_type nf = m.nfields (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
661 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
662 const dim_vector dv = dims (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
663 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
664 os << "# ndims: " << dv.length () << "\n"; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
665 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
666 for (int i = 0; i < dv.length (); i++) |
20218
b2100e1659ac
maint: Use cuddled parentheses when indexing dimension_vectors.
Rik <rik@octave.org>
parents:
20181
diff
changeset
|
667 os << " " << dv(i); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
668 os << "\n"; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
669 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
670 os << "# length: " << nf << "\n"; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
671 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
672 // Iterating over the list of keys will preserve the order of the |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
673 // fields. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
674 string_vector keys = m.fieldnames (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
675 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
676 for (octave_idx_type i = 0; i < nf; i++) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
677 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
678 std::string key = keys(i); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
679 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
680 octave_value val = map.contents (key); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
681 |
20447
c6224b4e7774
maint: Rename instances of LS_ASCII to LS_TEXT for clarity.
Rik <rik@octave.org>
parents:
20232
diff
changeset
|
682 bool b = save_text_data (os, val, key, false, 0); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
683 |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
684 if (! b) |
18384
bd9d34f28b0f
Use std::ostream::fail instead of unsafe implicit bool conversion (bug #41335)
Mike Miller <mtmiller@ieee.org>
parents:
17787
diff
changeset
|
685 return ! os.fail (); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
686 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
687 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
688 return true; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
689 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
690 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
691 bool |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
692 octave_struct::load_ascii (std::istream& is) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
693 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
694 octave_idx_type len = 0; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
695 dim_vector dv (1, 1); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
696 bool success = true; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
697 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
698 // KLUGE: earlier Octave versions did not save extra dimensions with struct, |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
699 // and as a result did not preserve dimensions for empty structs. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
700 // The default dimensions were 1x1, which we want to preserve. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
701 string_vector keywords(2); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
702 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
703 keywords[0] = "ndims"; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
704 keywords[1] = "length"; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
705 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
706 std::string kw; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
707 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
708 if (extract_keyword (is, keywords, kw, len, true)) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
709 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
710 if (kw == keywords[0]) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
711 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
712 int mdims = std::max (static_cast<int> (len), 2); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
713 dv.resize (mdims); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
714 for (int i = 0; i < mdims; i++) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
715 is >> dv(i); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
716 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
717 success = extract_keyword (is, keywords[1], len); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
718 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
719 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
720 else |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
721 success = false; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
722 |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
723 if (! success || len < 0) |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
724 error ("load: failed to extract number of elements in structure"); |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
725 |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
726 if (len > 0) |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
727 { |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
728 octave_map m (dv); |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
729 |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
730 for (octave_idx_type j = 0; j < len; j++) |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
731 { |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
732 octave_value t2; |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
733 bool dummy; |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
734 |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
735 // recurse to read cell elements |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
736 std::string nm |
21017
93748bcaec17
maint: Replace emtpy 'std::string ()' calls with "".
Rik <rik@octave.org>
parents:
20979
diff
changeset
|
737 = read_text_data (is, "", dummy, t2, j); |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
738 |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
739 if (! is) |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
740 break; |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
741 |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
742 Cell tcell = t2.is_cell () ? t2.xcell_value ("load: internal error loading struct elements") : Cell (t2); |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
743 |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
744 m.setfield (nm, tcell); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
745 } |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
746 |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
747 if (! is) |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
748 error ("load: failed to load structure"); |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
749 |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
750 map = m; |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
751 } |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
752 else if (len == 0) |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
753 map = octave_map (dv); |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
754 else |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
755 panic_impossible (); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
756 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
757 return success; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
758 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
759 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
760 bool |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
761 octave_struct::save_binary (std::ostream& os, bool& save_as_floats) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
762 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
763 octave_map m = map_value (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
764 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
765 octave_idx_type nf = m.nfields (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
766 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
767 dim_vector d = dims (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
768 if (d.length () < 1) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
769 return false; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
770 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
771 // Use negative value for ndims |
14846
460a3c6d8bf1
maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents:
14625
diff
changeset
|
772 int32_t di = - d.length (); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
773 os.write (reinterpret_cast<char *> (&di), 4); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
774 for (int i = 0; i < d.length (); i++) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
775 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
776 di = d(i); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
777 os.write (reinterpret_cast<char *> (&di), 4); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
778 } |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
779 |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
780 int32_t len = nf; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
781 os.write (reinterpret_cast<char *> (&len), 4); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
782 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
783 // Iterating over the list of keys will preserve the order of the |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
784 // fields. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
785 string_vector keys = m.fieldnames (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
786 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
787 for (octave_idx_type i = 0; i < nf; i++) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
788 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
789 std::string key = keys(i); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
790 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
791 octave_value val = map.contents (key); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
792 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
793 bool b = save_binary_data (os, val, key, "", 0, save_as_floats); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
794 |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
795 if (! b) |
18384
bd9d34f28b0f
Use std::ostream::fail instead of unsafe implicit bool conversion (bug #41335)
Mike Miller <mtmiller@ieee.org>
parents:
17787
diff
changeset
|
796 return ! os.fail (); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
797 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
798 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
799 return true; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
800 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
801 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
802 bool |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
803 octave_struct::load_binary (std::istream& is, bool swap, |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
804 oct_mach_info::float_format fmt) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
805 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
806 bool success = true; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
807 int32_t len; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
808 if (! is.read (reinterpret_cast<char *> (&len), 4)) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
809 return false; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
810 if (swap) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
811 swap_bytes<4> (&len); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
812 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
813 dim_vector dv (1, 1); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
814 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
815 if (len < 0) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
816 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
817 // We have explicit dimensions. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
818 int mdims = -len; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
819 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
820 int32_t di; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
821 dv.resize (mdims); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
822 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
823 for (int i = 0; i < mdims; i++) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
824 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
825 if (! is.read (reinterpret_cast<char *> (&di), 4)) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
826 return false; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
827 if (swap) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
828 swap_bytes<4> (&di); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
829 dv(i) = di; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
830 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
831 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
832 if (! is.read (reinterpret_cast<char *> (&len), 4)) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
833 return false; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
834 if (swap) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
835 swap_bytes<4> (&len); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
836 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
837 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
838 if (len > 0) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
839 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
840 octave_map m (dv); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
841 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
842 for (octave_idx_type j = 0; j < len; j++) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
843 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
844 octave_value t2; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
845 bool dummy; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
846 std::string doc; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
847 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
848 // recurse to read cell elements |
21017
93748bcaec17
maint: Replace emtpy 'std::string ()' calls with "".
Rik <rik@octave.org>
parents:
20979
diff
changeset
|
849 std::string nm = read_binary_data (is, swap, fmt, "", |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
850 dummy, t2, doc); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
851 |
20955
77f5591878bf
maint: Use '! expr' rather than '!expr' to conform to coding guidelines.
Rik <rik@octave.org>
parents:
20952
diff
changeset
|
852 if (! is) |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
853 break; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
854 |
20700
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20681
diff
changeset
|
855 Cell tcell = t2.is_cell () ? t2.xcell_value ("load: internal error loading struct elements") : Cell (t2); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
856 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
857 m.setfield (nm, tcell); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
858 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
859 |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
860 if (! is) |
20952
072559bd31f2
maint: Eliminate useless statements after error().
Rik <rik@octave.org>
parents:
20939
diff
changeset
|
861 error ("load: failed to load structure"); |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
862 |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
863 map = m; |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
864 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
865 else if (len == 0) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
866 map = octave_map (dv); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
867 else |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
868 success = false; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
869 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
870 return success; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
871 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
872 |
19863
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19852
diff
changeset
|
873 bool |
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19852
diff
changeset
|
874 octave_struct::save_hdf5 (octave_hdf5_id loc_id, const char *name, bool save_as_floats) |
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19852
diff
changeset
|
875 { |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
876 #if defined (HAVE_HDF5) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
877 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
878 hid_t data_hid = -1; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
879 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
880 #if HAVE_HDF5_18 |
21022
ebc439187d29
avoid old-style cast warnings from HDF5 macros used in C++ sources
John W. Eaton <jwe@octave.org>
parents:
21017
diff
changeset
|
881 data_hid = H5Gcreate (loc_id, name, octave_H5P_DEFAULT, octave_H5P_DEFAULT, octave_H5P_DEFAULT); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
882 #else |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
883 data_hid = H5Gcreate (loc_id, name, 0); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
884 #endif |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
885 if (data_hid < 0) return false; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
886 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
887 // recursively add each element of the structure to this group |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
888 octave_map m = map_value (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
889 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
890 octave_idx_type nf = m.nfields (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
891 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
892 // Iterating over the list of keys will preserve the order of the |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
893 // fields. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
894 string_vector keys = m.fieldnames (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
895 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
896 for (octave_idx_type i = 0; i < nf; i++) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
897 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
898 std::string key = keys(i); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
899 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
900 octave_value val = map.contents (key); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
901 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
902 bool retval2 = add_hdf5_data (data_hid, val, key, "", false, |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
903 save_as_floats); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
904 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
905 if (! retval2) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
906 break; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
907 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
908 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
909 H5Gclose (data_hid); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
910 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
911 return true; |
19863
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19852
diff
changeset
|
912 |
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19852
diff
changeset
|
913 #else |
21102
dfcb9d74b253
Rename local gripe_XXX functions to err_XXX or warn_XXX.
Rik <rik@octave.org>
parents:
21100
diff
changeset
|
914 warn_save ("hdf5"); |
19863
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19852
diff
changeset
|
915 return false; |
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19852
diff
changeset
|
916 #endif |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
917 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
918 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
919 bool |
19863
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19852
diff
changeset
|
920 octave_struct::load_hdf5 (octave_hdf5_id loc_id, const char *name) |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
921 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
922 bool retval = false; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
923 |
19863
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19852
diff
changeset
|
924 #if defined (HAVE_HDF5) |
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19852
diff
changeset
|
925 |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
926 hdf5_callback_data dsub; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
927 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
928 herr_t retval2 = 0; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
929 octave_map m (dim_vector (1, 1)); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
930 int current_item = 0; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
931 hsize_t num_obj = 0; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
932 #if HAVE_HDF5_18 |
21022
ebc439187d29
avoid old-style cast warnings from HDF5 macros used in C++ sources
John W. Eaton <jwe@octave.org>
parents:
21017
diff
changeset
|
933 hid_t group_id = H5Gopen (loc_id, name, octave_H5P_DEFAULT); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
934 #else |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
935 hid_t group_id = H5Gopen (loc_id, name); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
936 #endif |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
937 H5Gget_num_objs (group_id, &num_obj); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
938 H5Gclose (group_id); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
939 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
940 // FIXME: fields appear to be sorted alphabetically on loading. |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
941 // Why is that happening? |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
942 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
943 while (current_item < static_cast<int> (num_obj) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
944 && (retval2 = H5Giterate (loc_id, name, ¤t_item, |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
945 hdf5_read_next_data, &dsub)) > 0) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
946 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
947 octave_value t2 = dsub.tc; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
948 |
20700
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20681
diff
changeset
|
949 Cell tcell = t2.is_cell () ? t2.xcell_value ("load: internal error loading struct elements") : Cell (t2); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
950 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
951 m.setfield (dsub.name, tcell); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
952 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
953 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
954 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
955 if (retval2 >= 0) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
956 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
957 map = m; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
958 retval = true; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
959 } |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
960 |
19863
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19852
diff
changeset
|
961 #else |
21102
dfcb9d74b253
Rename local gripe_XXX functions to err_XXX or warn_XXX.
Rik <rik@octave.org>
parents:
21100
diff
changeset
|
962 warn_load ("hdf5"); |
19863
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19852
diff
changeset
|
963 #endif |
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19852
diff
changeset
|
964 |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
965 return retval; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
966 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
967 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
968 mxArray * |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
969 octave_struct::as_mxArray (void) const |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
970 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
971 int nf = nfields (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
972 string_vector kv = map_keys (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
973 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
974 OCTAVE_LOCAL_BUFFER (const char *, f, nf); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
975 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
976 for (int i = 0; i < nf; i++) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
977 f[i] = kv[i].c_str (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
978 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
979 mxArray *retval = new mxArray (dims (), nf, f); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
980 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
981 mxArray **elts = static_cast<mxArray **> (retval->get_data ()); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
982 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
983 mwSize nel = numel (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
984 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
985 mwSize ntot = nf * nel; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
986 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
987 for (int i = 0; i < nf; i++) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
988 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
989 Cell c = map.contents (kv[i]); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
990 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
991 const octave_value *p = c.data (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
992 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
993 mwIndex k = 0; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
994 for (mwIndex j = i; j < ntot; j += nf) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
995 elts[j] = new mxArray (p[k++]); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
996 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
997 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
998 return retval; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
999 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1000 |
10760
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1001 octave_value |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1002 octave_struct::fast_elem_extract (octave_idx_type n) const |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1003 { |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1004 if (n < map.numel ()) |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1005 return map.checkelem (n); |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1006 else |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1007 return octave_value (); |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1008 } |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1009 |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1010 bool |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
1011 octave_struct::fast_elem_insert (octave_idx_type n, |
10760
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1012 const octave_value& x) |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1013 { |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1014 bool retval = false; |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1015 |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1016 if (n < map.numel ()) |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1017 { |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1018 // To avoid copying the scalar struct, it just stores a pointer to |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1019 // itself. |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1020 const octave_scalar_map *sm_ptr; |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1021 void *here = reinterpret_cast<void *>(&sm_ptr); |
14846
460a3c6d8bf1
maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents:
14625
diff
changeset
|
1022 return (x.get_rep ().fast_elem_insert_self (here, btyp_struct) |
10760
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1023 && map.fast_elem_insert (n, *sm_ptr)); |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1024 } |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1025 |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1026 return retval; |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1027 } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1028 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1029 DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA(octave_scalar_struct, "scalar struct", |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1030 "struct"); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1031 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1032 octave_value |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1033 octave_scalar_struct::dotref (const octave_value_list& idx, bool auto_add) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1034 { |
15613
126285fce876
check for allowed struct field names in subsref and subsasgn
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15534
diff
changeset
|
1035 octave_value retval; |
126285fce876
check for allowed struct field names in subsref and subsasgn
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15534
diff
changeset
|
1036 |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1037 assert (idx.length () == 1); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1038 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1039 std::string nm = idx(0).string_value (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1040 |
15614
f2b8f90052fd
warn instead of throwing an error for invalid structure field names
John W. Eaton <jwe@octave.org>
parents:
15613
diff
changeset
|
1041 maybe_warn_invalid_field_name (nm, "subsref"); |
f2b8f90052fd
warn instead of throwing an error for invalid structure field names
John W. Eaton <jwe@octave.org>
parents:
15613
diff
changeset
|
1042 |
15613
126285fce876
check for allowed struct field names in subsref and subsasgn
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15534
diff
changeset
|
1043 retval = map.getfield (nm); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1044 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1045 if (! auto_add && retval.is_undefined ()) |
15731
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15614
diff
changeset
|
1046 error_with_id ("Octave:invalid-indexing", |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15614
diff
changeset
|
1047 "structure has no member '%s'", nm.c_str ()); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1048 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1049 return retval; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1050 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1051 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1052 octave_value |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1053 octave_scalar_struct::subsref (const std::string& type, |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1054 const std::list<octave_value_list>& idx) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1055 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1056 octave_value retval; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1057 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1058 if (type[0] == '.') |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1059 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1060 int skip = 1; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1061 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1062 retval = dotref (idx.front ()); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1063 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1064 if (idx.size () > 1) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1065 retval = retval.next_subsref (type, idx, skip); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1066 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1067 else |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1068 retval = to_array ().subsref (type, idx); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1069 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1070 return retval; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1071 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1072 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1073 octave_value_list |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1074 octave_scalar_struct::subsref (const std::string& type, |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1075 const std::list<octave_value_list>& idx, |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1076 int nargout) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1077 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1078 octave_value_list retval; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1079 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1080 if (type[0] == '.') |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1081 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1082 int skip = 1; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1083 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1084 retval(0) = dotref (idx.front ()); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1085 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1086 if (idx.size () > 1) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1087 retval = retval(0).next_subsref (nargout, type, idx, skip); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1088 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1089 else |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1090 retval = to_array ().subsref (type, idx, nargout); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1091 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1092 return retval; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1093 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1094 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1095 octave_value |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1096 octave_scalar_struct::subsref (const std::string& type, |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1097 const std::list<octave_value_list>& idx, |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1098 bool auto_add) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1099 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1100 octave_value retval; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1101 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1102 if (type[0] == '.') |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1103 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1104 int skip = 1; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1105 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1106 retval = dotref (idx.front (), auto_add); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1107 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1108 if (idx.size () > 1) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1109 retval = retval.next_subsref (auto_add, type, idx, skip); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1110 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1111 else |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1112 retval = to_array ().subsref (type, idx, auto_add); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1113 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1114 return retval; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1115 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1116 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1117 /* |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1118 %!test |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
1119 %! x(1).a.a = 1; |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
1120 %! x(2).a.a = 2; |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1121 %! assert (size (x), [1, 2]); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1122 %! assert (x(1).a.a, 1); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1123 %! assert (x(2).a.a, 2); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1124 */ |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1125 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1126 octave_value |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1127 octave_scalar_struct::numeric_conv (const octave_value& val, |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1128 const std::string& type) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1129 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1130 octave_value retval; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1131 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1132 if (type.length () > 0 && type[0] == '.' && ! val.is_map ()) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1133 retval = octave_map (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1134 else |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1135 retval = val; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1136 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1137 return retval; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1138 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1139 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1140 octave_value |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1141 octave_scalar_struct::subsasgn (const std::string& type, |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1142 const std::list<octave_value_list>& idx, |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1143 const octave_value& rhs) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1144 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1145 octave_value retval; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1146 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1147 if (idx.front ().empty ()) |
20893
384ff5aa9437
2015 Code Sprint: Eliminate useless return statements after error ().
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1148 error ("missing index in indexed assignment"); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1149 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1150 if (type[0] == '.') |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1151 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1152 int n = type.length (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1153 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1154 octave_value t_rhs = rhs; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1155 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1156 octave_value_list key_idx = idx.front (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1157 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1158 assert (key_idx.length () == 1); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1159 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1160 std::string key = key_idx(0).string_value (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1161 |
15614
f2b8f90052fd
warn instead of throwing an error for invalid structure field names
John W. Eaton <jwe@octave.org>
parents:
15613
diff
changeset
|
1162 maybe_warn_invalid_field_name (key, "subsasgn"); |
f2b8f90052fd
warn instead of throwing an error for invalid structure field names
John W. Eaton <jwe@octave.org>
parents:
15613
diff
changeset
|
1163 |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1164 if (n > 1) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1165 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1166 std::list<octave_value_list> next_idx (idx); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1167 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1168 next_idx.erase (next_idx.begin ()); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1169 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1170 std::string next_type = type.substr (1); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1171 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1172 octave_value tmp; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1173 octave_map::iterator pkey = map.seek (key); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1174 if (pkey != map.end ()) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1175 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1176 map.contents (pkey).make_unique (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1177 tmp = map.contents (pkey); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1178 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1179 |
20561
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
1180 bool orig_undefined = tmp.is_undefined (); |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
1181 |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
1182 if (orig_undefined || tmp.is_zero_by_zero ()) |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1183 { |
20561
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
1184 tmp = octave_value::empty_conv (next_type, rhs); |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
1185 tmp.make_unique (); // probably a no-op. |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1186 } |
20561
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
1187 else |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
1188 // optimization: ignore the copy still stored inside our map. |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
1189 tmp.make_unique (1); |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
1190 |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
1191 t_rhs = (orig_undefined |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
1192 ? tmp.undef_subsasgn (next_type, next_idx, rhs) |
c41595061186
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20447
diff
changeset
|
1193 : tmp.subsasgn (next_type, next_idx, rhs)); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1194 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1195 |
20740
bba1a5fd4d8c
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
1196 map.setfield (key, t_rhs.storable_value ()); |
10749
df1a3e0ebbff
important fixes for struct rewrite(1)
Jaroslav Hajek <highegg@gmail.com>
parents:
10747
diff
changeset
|
1197 |
df1a3e0ebbff
important fixes for struct rewrite(1)
Jaroslav Hajek <highegg@gmail.com>
parents:
10747
diff
changeset
|
1198 count++; |
df1a3e0ebbff
important fixes for struct rewrite(1)
Jaroslav Hajek <highegg@gmail.com>
parents:
10747
diff
changeset
|
1199 retval = this; |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1200 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1201 else |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1202 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1203 // Forward this case to octave_struct. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1204 octave_value tmp (new octave_struct (octave_map (map))); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1205 retval = tmp.subsasgn (type, idx, rhs); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1206 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1207 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1208 return retval; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1209 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1210 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1211 octave_value |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1212 octave_scalar_struct::do_index_op (const octave_value_list& idx, bool resize_ok) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1213 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1214 // octave_map handles indexing itself. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1215 return octave_map (map).index (idx, resize_ok); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1216 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1217 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1218 size_t |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1219 octave_scalar_struct::byte_size (void) const |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1220 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1221 // Neglect the size of the fieldnames. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1222 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1223 size_t retval = 0; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1224 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1225 for (octave_map::const_iterator p = map.begin (); p != map.end (); p++) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1226 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1227 std::string key = map.key (p); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1228 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1229 octave_value val = octave_value (map.contents (p)); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1230 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1231 retval += val.byte_size (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1232 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1233 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1234 return retval; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1235 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1236 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1237 void |
18416
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18384
diff
changeset
|
1238 octave_scalar_struct::print (std::ostream& os, bool) |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1239 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1240 print_raw (os); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1241 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1242 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1243 void |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1244 octave_scalar_struct::print_raw (std::ostream& os, bool) const |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1245 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1246 unwind_protect frame; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1247 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1248 frame.protect_var (Vstruct_levels_to_print); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1249 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1250 if (Vstruct_levels_to_print >= 0) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1251 { |
11474 | 1252 bool max_depth_reached = Vstruct_levels_to_print-- == 0; |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1253 |
11474 | 1254 bool print_fieldnames_only = max_depth_reached; |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1255 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1256 increment_indent_level (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1257 |
13112
969ed305dde5
Remove all blank lines with "format compact"
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12483
diff
changeset
|
1258 if (! Vcompact_format) |
969ed305dde5
Remove all blank lines with "format compact"
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12483
diff
changeset
|
1259 newline (os); |
969ed305dde5
Remove all blank lines with "format compact"
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12483
diff
changeset
|
1260 |
11474 | 1261 indent (os); |
1262 os << "scalar structure containing the fields:"; | |
1263 newline (os); | |
13112
969ed305dde5
Remove all blank lines with "format compact"
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12483
diff
changeset
|
1264 if (! Vcompact_format) |
969ed305dde5
Remove all blank lines with "format compact"
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
12483
diff
changeset
|
1265 newline (os); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1266 |
11474 | 1267 increment_indent_level (); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1268 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1269 string_vector key_list = map.fieldnames (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1270 |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20218
diff
changeset
|
1271 for (octave_idx_type i = 0; i < key_list.numel (); i++) |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1272 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1273 std::string key = key_list[i]; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1274 |
12143
ed129a03f93c
octave_scalar_struct::print_raw: avoid unnecessary conversion of map contents to Cell
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
1275 octave_value val = map.contents (key); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1276 |
11474 | 1277 if (print_fieldnames_only) |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1278 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1279 indent (os); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1280 os << key; |
12143
ed129a03f93c
octave_scalar_struct::print_raw: avoid unnecessary conversion of map contents to Cell
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
1281 dim_vector dv = val.dims (); |
ed129a03f93c
octave_scalar_struct::print_raw: avoid unnecessary conversion of map contents to Cell
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
1282 os << ": " << dv.str () << " " << val.type_name (); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1283 newline (os); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1284 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1285 else |
12143
ed129a03f93c
octave_scalar_struct::print_raw: avoid unnecessary conversion of map contents to Cell
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
1286 val.print_with_name (os, key); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1287 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1288 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1289 decrement_indent_level (); |
11474 | 1290 decrement_indent_level (); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1291 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1292 else |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1293 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1294 indent (os); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1295 os << "<structure>"; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1296 newline (os); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1297 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1298 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1299 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1300 bool |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1301 octave_scalar_struct::print_name_tag (std::ostream& os, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1302 const std::string& name) const |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1303 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1304 bool retval = false; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1305 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1306 indent (os); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1307 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1308 if (Vstruct_levels_to_print < 0) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1309 os << name << " = "; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1310 else |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1311 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1312 os << name << " ="; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1313 newline (os); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1314 retval = true; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1315 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1316 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1317 return retval; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1318 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1319 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1320 bool |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1321 octave_scalar_struct::save_ascii (std::ostream& os) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1322 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1323 octave_map m = map_value (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1324 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1325 octave_idx_type nf = m.nfields (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1326 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1327 const dim_vector dv = dims (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1328 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1329 os << "# ndims: " << dv.length () << "\n"; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1330 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1331 for (int i = 0; i < dv.length (); i++) |
20218
b2100e1659ac
maint: Use cuddled parentheses when indexing dimension_vectors.
Rik <rik@octave.org>
parents:
20181
diff
changeset
|
1332 os << " " << dv(i); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1333 os << "\n"; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1334 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1335 os << "# length: " << nf << "\n"; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1336 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1337 // Iterating over the list of keys will preserve the order of the |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1338 // fields. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1339 string_vector keys = m.fieldnames (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1340 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1341 for (octave_idx_type i = 0; i < nf; i++) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1342 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1343 std::string key = keys(i); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1344 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1345 octave_value val = map.contents (key); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1346 |
20447
c6224b4e7774
maint: Rename instances of LS_ASCII to LS_TEXT for clarity.
Rik <rik@octave.org>
parents:
20232
diff
changeset
|
1347 bool b = save_text_data (os, val, key, false, 0); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
1348 |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1349 if (! b) |
18384
bd9d34f28b0f
Use std::ostream::fail instead of unsafe implicit bool conversion (bug #41335)
Mike Miller <mtmiller@ieee.org>
parents:
17787
diff
changeset
|
1350 return ! os.fail (); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1351 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1352 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1353 return true; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1354 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1355 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1356 bool |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1357 octave_scalar_struct::load_ascii (std::istream& is) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1358 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1359 bool success = true; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1360 octave_idx_type len = 0; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1361 |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
1362 if (! extract_keyword (is, "length", len) || len < 0) |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
1363 error ("load: failed to extract number of elements in structure"); |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
1364 |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
1365 if (len > 0) |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1366 { |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
1367 octave_scalar_map m; |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
1368 |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
1369 for (octave_idx_type j = 0; j < len; j++) |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1370 { |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
1371 octave_value t2; |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
1372 bool dummy; |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
1373 |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
1374 // recurse to read cell elements |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
1375 std::string nm |
21017
93748bcaec17
maint: Replace emtpy 'std::string ()' calls with "".
Rik <rik@octave.org>
parents:
20979
diff
changeset
|
1376 = read_text_data (is, "", dummy, t2, j); |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
1377 |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
1378 if (! is) |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
1379 break; |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
1380 |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
1381 m.setfield (nm, t2); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1382 } |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
1383 |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
1384 if (! is) |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
1385 error ("load: failed to load structure"); |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
1386 |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
1387 map = m; |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1388 } |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
1389 else if (len == 0) |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
1390 map = octave_scalar_map (); |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1391 else |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
1392 panic_impossible (); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1393 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1394 return success; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1395 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1396 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
1397 bool |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1398 octave_scalar_struct::save_binary (std::ostream& os, bool& save_as_floats) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1399 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1400 octave_map m = map_value (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1401 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1402 octave_idx_type nf = m.nfields (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1403 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1404 int32_t len = nf; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1405 os.write (reinterpret_cast<char *> (&len), 4); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1406 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1407 // Iterating over the list of keys will preserve the order of the |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1408 // fields. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1409 string_vector keys = m.fieldnames (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1410 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1411 for (octave_idx_type i = 0; i < nf; i++) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1412 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1413 std::string key = keys(i); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1414 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1415 octave_value val = map.contents (key); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1416 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1417 bool b = save_binary_data (os, val, key, "", 0, save_as_floats); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
1418 |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1419 if (! b) |
18384
bd9d34f28b0f
Use std::ostream::fail instead of unsafe implicit bool conversion (bug #41335)
Mike Miller <mtmiller@ieee.org>
parents:
17787
diff
changeset
|
1420 return ! os.fail (); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1421 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1422 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1423 return true; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1424 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1425 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
1426 bool |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1427 octave_scalar_struct::load_binary (std::istream& is, bool swap, |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1428 oct_mach_info::float_format fmt) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1429 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1430 bool success = true; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1431 int32_t len; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1432 if (! is.read (reinterpret_cast<char *> (&len), 4)) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1433 return false; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1434 if (swap) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1435 swap_bytes<4> (&len); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1436 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1437 if (len > 0) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1438 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1439 octave_scalar_map m; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1440 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1441 for (octave_idx_type j = 0; j < len; j++) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1442 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1443 octave_value t2; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1444 bool dummy; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1445 std::string doc; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1446 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1447 // recurse to read cell elements |
21017
93748bcaec17
maint: Replace emtpy 'std::string ()' calls with "".
Rik <rik@octave.org>
parents:
20979
diff
changeset
|
1448 std::string nm = read_binary_data (is, swap, fmt, "", |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1449 dummy, t2, doc); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1450 |
20955
77f5591878bf
maint: Use '! expr' rather than '!expr' to conform to coding guidelines.
Rik <rik@octave.org>
parents:
20952
diff
changeset
|
1451 if (! is) |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1452 break; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1453 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1454 m.setfield (nm, t2); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1455 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1456 |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
1457 if (! is) |
20952
072559bd31f2
maint: Eliminate useless statements after error().
Rik <rik@octave.org>
parents:
20939
diff
changeset
|
1458 error ("load: failed to load structure"); |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
1459 |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
1460 map = m; |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1461 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1462 else if (len == 0) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1463 map = octave_scalar_map (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1464 else |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1465 success = false; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1466 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1467 return success; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1468 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1469 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1470 bool |
19863
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19852
diff
changeset
|
1471 octave_scalar_struct::save_hdf5 (octave_hdf5_id loc_id, const char *name, |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1472 bool save_as_floats) |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1473 { |
19863
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19852
diff
changeset
|
1474 #if defined (HAVE_HDF5) |
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19852
diff
changeset
|
1475 |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1476 hid_t data_hid = -1; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1477 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1478 #if HAVE_HDF5_18 |
21022
ebc439187d29
avoid old-style cast warnings from HDF5 macros used in C++ sources
John W. Eaton <jwe@octave.org>
parents:
21017
diff
changeset
|
1479 data_hid = H5Gcreate (loc_id, name, octave_H5P_DEFAULT, octave_H5P_DEFAULT, octave_H5P_DEFAULT); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1480 #else |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1481 data_hid = H5Gcreate (loc_id, name, 0); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1482 #endif |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1483 if (data_hid < 0) return false; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1484 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1485 // recursively add each element of the structure to this group |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1486 octave_scalar_map m = scalar_map_value (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1487 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1488 octave_idx_type nf = m.nfields (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1489 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1490 // Iterating over the list of keys will preserve the order of the |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1491 // fields. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1492 string_vector keys = m.fieldnames (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1493 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1494 for (octave_idx_type i = 0; i < nf; i++) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1495 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1496 std::string key = keys(i); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1497 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1498 octave_value val = map.contents (key); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1499 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
1500 bool retval2 = add_hdf5_data (data_hid, val, key, "", false, |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1501 save_as_floats); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1502 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1503 if (! retval2) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1504 break; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1505 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1506 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1507 H5Gclose (data_hid); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1508 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1509 return true; |
19863
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19852
diff
changeset
|
1510 |
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19852
diff
changeset
|
1511 #else |
21102
dfcb9d74b253
Rename local gripe_XXX functions to err_XXX or warn_XXX.
Rik <rik@octave.org>
parents:
21100
diff
changeset
|
1512 warn_save ("hdf5"); |
19863
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19852
diff
changeset
|
1513 return false; |
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19852
diff
changeset
|
1514 #endif |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1515 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1516 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
1517 bool |
19863
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19852
diff
changeset
|
1518 octave_scalar_struct::load_hdf5 (octave_hdf5_id loc_id, const char *name) |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1519 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1520 bool retval = false; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1521 |
19863
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19852
diff
changeset
|
1522 #if defined (HAVE_HDF5) |
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19852
diff
changeset
|
1523 |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1524 hdf5_callback_data dsub; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1525 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1526 herr_t retval2 = 0; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1527 octave_scalar_map m; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1528 int current_item = 0; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1529 hsize_t num_obj = 0; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1530 #if HAVE_HDF5_18 |
21022
ebc439187d29
avoid old-style cast warnings from HDF5 macros used in C++ sources
John W. Eaton <jwe@octave.org>
parents:
21017
diff
changeset
|
1531 hid_t group_id = H5Gopen (loc_id, name, octave_H5P_DEFAULT); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1532 #else |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1533 hid_t group_id = H5Gopen (loc_id, name); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1534 #endif |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1535 H5Gget_num_objs (group_id, &num_obj); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1536 H5Gclose (group_id); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1537 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1538 // FIXME: fields appear to be sorted alphabetically on loading. |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1539 // Why is that happening? |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1540 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1541 while (current_item < static_cast<int> (num_obj) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1542 && (retval2 = H5Giterate (loc_id, name, ¤t_item, |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1543 hdf5_read_next_data, &dsub)) > 0) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1544 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1545 octave_value t2 = dsub.tc; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1546 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1547 m.setfield (dsub.name, t2); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1548 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1549 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1550 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1551 if (retval2 >= 0) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1552 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1553 map = m; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1554 retval = true; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1555 } |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
1556 |
19863
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19852
diff
changeset
|
1557 #else |
21102
dfcb9d74b253
Rename local gripe_XXX functions to err_XXX or warn_XXX.
Rik <rik@octave.org>
parents:
21100
diff
changeset
|
1558 warn_load ("hdf5"); |
19863
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19852
diff
changeset
|
1559 #endif |
09ed6f7538dd
avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents:
19852
diff
changeset
|
1560 |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1561 return retval; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1562 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1563 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1564 mxArray * |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1565 octave_scalar_struct::as_mxArray (void) const |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1566 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1567 int nf = nfields (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1568 string_vector kv = map_keys (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1569 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1570 OCTAVE_LOCAL_BUFFER (const char *, f, nf); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1571 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1572 for (int i = 0; i < nf; i++) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1573 f[i] = kv[i].c_str (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1574 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1575 mxArray *retval = new mxArray (dims (), nf, f); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1576 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1577 mxArray **elts = static_cast<mxArray **> (retval->get_data ()); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1578 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1579 mwSize nel = numel (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1580 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1581 mwSize ntot = nf * nel; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1582 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1583 for (int i = 0; i < nf; i++) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1584 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1585 Cell c = map.contents (kv[i]); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1586 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1587 const octave_value *p = c.data (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1588 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1589 mwIndex k = 0; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1590 for (mwIndex j = i; j < ntot; j += nf) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1591 elts[j] = new mxArray (p[k++]); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1592 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1593 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1594 return retval; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1595 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1596 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1597 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1598 octave_value |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1599 octave_scalar_struct::to_array (void) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1600 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1601 return new octave_struct (octave_map (map)); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1602 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1603 |
10760
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1604 bool |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1605 octave_scalar_struct::fast_elem_insert_self (void *where, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1606 builtin_type_t btyp) const |
10760
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1607 { |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1608 |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1609 if (btyp == btyp_struct) |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1610 { |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1611 *(reinterpret_cast<const octave_scalar_map **>(where)) = ↦ |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1612 return true; |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1613 } |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1614 else |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1615 return false; |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10754
diff
changeset
|
1616 } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1617 |
4744 | 1618 DEFUN (struct, args, , |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1619 "-*- texinfo -*-\n\ |
20853
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20818
diff
changeset
|
1620 @deftypefn {} {@var{s} =} struct ()\n\ |
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20818
diff
changeset
|
1621 @deftypefnx {} {@var{s} =} struct (@var{field1}, @var{value1}, @var{field2}, @var{value2}, @dots{})\n\ |
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20818
diff
changeset
|
1622 @deftypefnx {} {@var{s} =} struct (@var{obj})\n\ |
4744 | 1623 \n\ |
20163
075a5e2e1ba5
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19863
diff
changeset
|
1624 Create a scalar or array structure and initialize its values.\n\ |
075a5e2e1ba5
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19863
diff
changeset
|
1625 \n\ |
075a5e2e1ba5
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19863
diff
changeset
|
1626 The @var{field1}, @var{field2}, @dots{} variables are strings specifying the\n\ |
075a5e2e1ba5
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19863
diff
changeset
|
1627 names of the fields and the @var{value1}, @var{value2}, @dots{} variables\n\ |
075a5e2e1ba5
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19863
diff
changeset
|
1628 can be of any type.\n\ |
4744 | 1629 \n\ |
20163
075a5e2e1ba5
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19863
diff
changeset
|
1630 If the values are cell arrays, create a structure array and initialize its\n\ |
075a5e2e1ba5
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19863
diff
changeset
|
1631 values. The dimensions of each cell array of values must match. Singleton\n\ |
20181
aa36fb998a4d
maint: Remove unnecessary whitespace at end of lines.
Rik <rik@octave.org>
parents:
20163
diff
changeset
|
1632 cells and non-cell values are repeated so that they fill the entire array. \n\ |
20163
075a5e2e1ba5
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19863
diff
changeset
|
1633 If the cells are empty, create an empty structure array with the specified\n\ |
075a5e2e1ba5
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19863
diff
changeset
|
1634 field names.\n\ |
9190 | 1635 \n\ |
1636 If the argument is an object, return the underlying struct.\n\ | |
15782
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1637 \n\ |
16816
12005245b645
doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents:
15782
diff
changeset
|
1638 Observe that the syntax is optimized for struct @strong{arrays}. Consider\n\ |
12005245b645
doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents:
15782
diff
changeset
|
1639 the following examples:\n\ |
15782
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1640 \n\ |
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1641 @example\n\ |
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1642 @group\n\ |
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1643 struct (\"foo\", 1)\n\ |
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1644 @result{} scalar structure containing the fields:\n\ |
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1645 foo = 1\n\ |
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1646 \n\ |
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1647 struct (\"foo\", @{@})\n\ |
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1648 @result{} 0x0 struct array containing the fields:\n\ |
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1649 foo\n\ |
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1650 \n\ |
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1651 struct (\"foo\", @{ @{@} @})\n\ |
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1652 @result{} scalar structure containing the fields:\n\ |
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1653 foo = @{@}(0x0)\n\ |
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1654 \n\ |
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1655 struct (\"foo\", @{1, 2, 3@})\n\ |
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1656 @result{} 1x3 struct array containing the fields:\n\ |
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1657 foo\n\ |
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1658 \n\ |
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1659 @end group\n\ |
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1660 @end example\n\ |
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1661 \n\ |
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1662 @noindent\n\ |
18533
ea0d4dea1a17
doc: Update documentation for functions in octave-value dir.
Rik <rik@octave.org>
parents:
18384
diff
changeset
|
1663 The first case is an ordinary scalar struct---one field, one value. The\n\ |
15782
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1664 second produces an empty struct array with one field and no values, since\n\ |
20163
075a5e2e1ba5
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19863
diff
changeset
|
1665 being passed an empty cell array of struct array values. When the value is\n\ |
15782
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1666 a cell array containing a single entry, this becomes a scalar struct with\n\ |
16816
12005245b645
doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents:
15782
diff
changeset
|
1667 that single entry as the value of the field. That single entry happens\n\ |
15782
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1668 to be an empty cell array.\n\ |
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1669 \n\ |
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1670 Finally, if the value is a non-scalar cell array, then @code{struct}\n\ |
10ed43563df5
doc: overhaul struct docstring
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15781
diff
changeset
|
1671 produces a struct @strong{array}.\n\ |
19276
1fa328da03ef
Overhaul getfield, setfield, orderfields m-files.
Rik <rik@octave.org>
parents:
18678
diff
changeset
|
1672 @seealso{cell2struct, fieldnames, getfield, setfield, rmfield, isfield, orderfields, isstruct, structfun}\n\ |
4911 | 1673 @end deftypefn") |
4744 | 1674 { |
6946 | 1675 octave_value retval; |
4744 | 1676 |
1677 int nargin = args.length (); | |
1678 | |
5444 | 1679 // struct ([]) returns an empty struct. |
1680 | |
1681 // struct (empty_matrix) returns an empty struct with the same | |
1682 // dimensions as the empty matrix. | |
1683 | |
1684 // Note that struct () creates a 1x1 struct with no fields for | |
1685 // compatibility with Matlab. | |
4744 | 1686 |
10747
58c1b5402588
fix a showstopping bug in octave_fields reference counting
Jaroslav Hajek <highegg@gmail.com>
parents:
10742
diff
changeset
|
1687 if (nargin == 1 && args(0).is_map ()) |
58c1b5402588
fix a showstopping bug in octave_fields reference counting
Jaroslav Hajek <highegg@gmail.com>
parents:
10742
diff
changeset
|
1688 return args(0); |
58c1b5402588
fix a showstopping bug in octave_fields reference counting
Jaroslav Hajek <highegg@gmail.com>
parents:
10742
diff
changeset
|
1689 |
9190 | 1690 if (nargin == 1 && args(0).is_object ()) |
1691 { | |
10747
58c1b5402588
fix a showstopping bug in octave_fields reference counting
Jaroslav Hajek <highegg@gmail.com>
parents:
10742
diff
changeset
|
1692 retval = args(0).map_value (); |
9190 | 1693 |
1694 return retval; | |
1695 } | |
1696 | |
6946 | 1697 if ((nargin == 1 || nargin == 2) |
1698 && args(0).is_empty () && args(0).is_real_matrix ()) | |
1699 { | |
1700 if (nargin == 2) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
1701 { |
20711
7b608fadc663
Make error messages more specific about the variable and problem encountered.
Rik <rik@octave.org>
parents:
20704
diff
changeset
|
1702 Array<std::string> cstr = args(1).xcellstr_value ("struct: second argument should be a cell array of field names"); |
20681
b0b37f0d7e6d
new cellstr_value function and elimination of error_state
John W. Eaton <jwe@octave.org>
parents:
20619
diff
changeset
|
1703 |
b0b37f0d7e6d
new cellstr_value function and elimination of error_state
John W. Eaton <jwe@octave.org>
parents:
20619
diff
changeset
|
1704 retval = octave_map (args(0).dims (), cstr); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
1705 } |
6946 | 1706 else |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1707 retval = octave_map (args(0).dims ()); |
6946 | 1708 |
1709 return retval; | |
1710 } | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
1711 |
4744 | 1712 // Check for "field", VALUE pairs. |
1713 | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
1714 for (int i = 0; i < nargin; i += 2) |
4744 | 1715 { |
1716 if (! args(i).is_string () || i + 1 >= nargin) | |
20893
384ff5aa9437
2015 Code Sprint: Eliminate useless return statements after error ().
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1717 error ("struct: additional arguments must occur as \"field\", VALUE pairs"); |
4744 | 1718 } |
1719 | |
1720 // Check that the dimensions of the values correspond. | |
1721 | |
1722 dim_vector dims (1, 1); | |
1723 | |
1724 int first_dimensioned_value = 0; | |
1725 | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
1726 for (int i = 1; i < nargin; i += 2) |
4744 | 1727 { |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
1728 if (args(i).is_cell ()) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
1729 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
1730 dim_vector argdims (args(i).dims ()); |
4744 | 1731 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
1732 if (! scalar (argdims)) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
1733 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
1734 if (! first_dimensioned_value) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
1735 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
1736 dims = argdims; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
1737 first_dimensioned_value = i + 1; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
1738 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
1739 else if (dims != argdims) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
1740 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
1741 error ("struct: dimensions of parameter %d do not match those of parameter %d", |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
1742 first_dimensioned_value, i+1); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
1743 return retval; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
1744 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
1745 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
1746 } |
4744 | 1747 } |
1748 | |
1749 // Create the return value. | |
1750 | |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1751 octave_map map (dims); |
4744 | 1752 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
1753 for (int i = 0; i < nargin; i+= 2) |
4744 | 1754 { |
1755 // Get key. | |
1756 | |
1757 std::string key (args(i).string_value ()); | |
1758 | |
15614
f2b8f90052fd
warn instead of throwing an error for invalid structure field names
John W. Eaton <jwe@octave.org>
parents:
15613
diff
changeset
|
1759 maybe_warn_invalid_field_name (key, "struct"); |
f2b8f90052fd
warn instead of throwing an error for invalid structure field names
John W. Eaton <jwe@octave.org>
parents:
15613
diff
changeset
|
1760 |
4744 | 1761 // Value may be v, { v }, or { v1, v2, ... } |
1762 // In the first two cases, we need to create a cell array of | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
1763 // the appropriate dimensions filled with v. In the last case, |
4744 | 1764 // the cell array has already been determined to be of the |
1765 // correct dimensions. | |
1766 | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
1767 if (args(i+1).is_cell ()) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
1768 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
1769 const Cell c (args(i+1).cell_value ()); |
4744 | 1770 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
1771 if (scalar (c.dims ())) |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1772 map.setfield (key, Cell (dims, c(0))); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
1773 else |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1774 map.setfield (key, c); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
1775 } |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
1776 else |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10691
diff
changeset
|
1777 map.setfield (key, Cell (dims, args(i+1))); |
4744 | 1778 } |
6946 | 1779 |
4744 | 1780 return octave_value (map); |
1781 } | |
1782 | |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
1783 /* |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
1784 %!shared x |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
1785 %! x(1).a=1; x(2).a=2; x(1).b=3; x(2).b=3; |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
1786 %!assert (struct ("a",1, "b",3), x(1)) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
1787 %!assert (isempty (x([]))) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
1788 %!assert (isempty (struct ("a",{}, "b",{}))) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
1789 %!assert (struct ("a",{1,2}, "b",{3,3}), x) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
1790 %!assert (struct ("a",{1,2}, "b",3), x) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
1791 %!assert (struct ("a",{1,2}, "b",{3}), x) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
1792 %!assert (struct ("b",3, "a",{1,2}), x) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
1793 %!assert (struct ("b",{3}, "a",{1,2}), x) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
1794 %!test x = struct ([]); |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
1795 %!assert (size (x), [0,0]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
1796 %!assert (isstruct (x)) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
1797 %!assert (isempty (fieldnames (x))) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
1798 %!fail ('struct ("a",{1,2},"b",{1,2,3})', 'dimensions of parameter 2 do not match those of parameter 4') |
20711
7b608fadc663
Make error messages more specific about the variable and problem encountered.
Rik <rik@octave.org>
parents:
20704
diff
changeset
|
1799 %!error <arguments must occur as "field", VALUE pairs> struct (1,2,3,4) |
7b608fadc663
Make error messages more specific about the variable and problem encountered.
Rik <rik@octave.org>
parents:
20704
diff
changeset
|
1800 %!fail ('struct ("1",2,"3")', 'struct: additional arguments must occur as "field", VALUE pairs') |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
1801 */ |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
1802 |
4358 | 1803 DEFUN (isstruct, args, , |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1804 "-*- texinfo -*-\n\ |
20853
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20818
diff
changeset
|
1805 @deftypefn {} {} isstruct (@var{x})\n\ |
11431
0d9640d755b1
Improve docstrings for all isXXX functions.
Rik <octave@nomad.inbox5.com>
parents:
11359
diff
changeset
|
1806 Return true if @var{x} is a structure or a structure array.\n\ |
0d9640d755b1
Improve docstrings for all isXXX functions.
Rik <octave@nomad.inbox5.com>
parents:
11359
diff
changeset
|
1807 @seealso{ismatrix, iscell, isa}\n\ |
4358 | 1808 @end deftypefn") |
1809 { | |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1810 if (args.length () != 1) |
5823 | 1811 print_usage (); |
4358 | 1812 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20893
diff
changeset
|
1813 return ovl (args(0).is_map ()); |
4358 | 1814 } |
1815 | |
15781
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
15731
diff
changeset
|
1816 DEFUN (__fieldnames__, args, , |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1817 "-*- texinfo -*-\n\ |
20853
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20818
diff
changeset
|
1818 @deftypefn {} {} __fieldnames__ (@var{struct})\n\ |
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20818
diff
changeset
|
1819 @deftypefnx {} {} __fieldnames__ (@var{obj})\n\ |
15781
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
15731
diff
changeset
|
1820 Internal function.\n\ |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
15731
diff
changeset
|
1821 \n\ |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
15731
diff
changeset
|
1822 Implements @code{fieldnames()} for structures and Octave objects.\n\ |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
15731
diff
changeset
|
1823 @seealso{fieldnames}\n\ |
4358 | 1824 @end deftypefn") |
1825 { | |
1826 octave_value retval; | |
1827 | |
15781
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
15731
diff
changeset
|
1828 // Input validation has already been done in fieldnames.m. |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
15731
diff
changeset
|
1829 octave_value arg = args(0); |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
15731
diff
changeset
|
1830 |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
15731
diff
changeset
|
1831 octave_map m = arg.map_value (); |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
15731
diff
changeset
|
1832 |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
15731
diff
changeset
|
1833 string_vector keys = m.fieldnames (); |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
15731
diff
changeset
|
1834 |
20974
1edf15793cac
maint: Use is_empty rather than "numel () == 0" for clarity.
Rik <rik@octave.org>
parents:
20962
diff
changeset
|
1835 if (keys.is_empty ()) |
15781
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
15731
diff
changeset
|
1836 retval = Cell (0, 1); |
4358 | 1837 else |
15781
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
15731
diff
changeset
|
1838 retval = Cell (keys); |
4358 | 1839 |
1840 return retval; | |
1841 } | |
1842 | |
1843 DEFUN (isfield, args, , | |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1844 "-*- texinfo -*-\n\ |
20853
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20818
diff
changeset
|
1845 @deftypefn {} {} isfield (@var{x}, \"@var{name}\")\n\ |
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20818
diff
changeset
|
1846 @deftypefnx {} {} isfield (@var{x}, @var{name})\n\ |
18533
ea0d4dea1a17
doc: Update documentation for functions in octave-value dir.
Rik <rik@octave.org>
parents:
18384
diff
changeset
|
1847 Return true if the @var{x} is a structure and it includes an element named\n\ |
19276
1fa328da03ef
Overhaul getfield, setfield, orderfields m-files.
Rik <rik@octave.org>
parents:
18678
diff
changeset
|
1848 @var{name}.\n\ |
1fa328da03ef
Overhaul getfield, setfield, orderfields m-files.
Rik <rik@octave.org>
parents:
18678
diff
changeset
|
1849 \n\ |
1fa328da03ef
Overhaul getfield, setfield, orderfields m-files.
Rik <rik@octave.org>
parents:
18678
diff
changeset
|
1850 If @var{name} is a cell array of strings then a logical array of equal\n\ |
1fa328da03ef
Overhaul getfield, setfield, orderfields m-files.
Rik <rik@octave.org>
parents:
18678
diff
changeset
|
1851 dimension is returned.\n\ |
18533
ea0d4dea1a17
doc: Update documentation for functions in octave-value dir.
Rik <rik@octave.org>
parents:
18384
diff
changeset
|
1852 @seealso{fieldnames}\n\ |
4358 | 1853 @end deftypefn") |
1854 { | |
20818
cef0448a6ed2
eliminate unnecessary uses of nargin
John W. Eaton <jwe@octave.org>
parents:
20807
diff
changeset
|
1855 if (args.length () != 2) |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1856 print_usage (); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1857 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20893
diff
changeset
|
1858 octave_value retval = false; |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1859 |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1860 if (args(0).is_map ()) |
4358 | 1861 { |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1862 octave_map m = args(0).map_value (); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1863 |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1864 // FIXME: should this work for all types that can do |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1865 // structure reference operations? |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1866 if (args(1).is_string ()) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
1867 { |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1868 std::string key = args(1).string_value (); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1869 |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1870 retval = m.isfield (key); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1871 } |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1872 else if (args(1).is_cell ()) |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1873 { |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1874 Cell c = args(1).cell_value (); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1875 boolNDArray bm (c.dims ()); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1876 octave_idx_type n = bm.numel (); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1877 |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1878 for (octave_idx_type i = 0; i < n; i++) |
10691
e0ba186b242b
Fisfield: Accept cell arrays as name argument.
David Grundberg <davidg@cs.umu.se>
parents:
10370
diff
changeset
|
1879 { |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1880 if (c(i).is_string ()) |
10691
e0ba186b242b
Fisfield: Accept cell arrays as name argument.
David Grundberg <davidg@cs.umu.se>
parents:
10370
diff
changeset
|
1881 { |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1882 std::string key = c(i).string_value (); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1883 |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1884 bm(i) = m.isfield (key); |
10691
e0ba186b242b
Fisfield: Accept cell arrays as name argument.
David Grundberg <davidg@cs.umu.se>
parents:
10370
diff
changeset
|
1885 } |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1886 else |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1887 bm(i) = false; |
10691
e0ba186b242b
Fisfield: Accept cell arrays as name argument.
David Grundberg <davidg@cs.umu.se>
parents:
10370
diff
changeset
|
1888 } |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1889 |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1890 retval = bm; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10258
diff
changeset
|
1891 } |
4358 | 1892 } |
1893 | |
1894 return retval; | |
1895 } | |
1896 | |
18538
fcd87f68af4f
Deprecate nfields and replace with numfields.
Rik <rik@octave.org>
parents:
18537
diff
changeset
|
1897 DEFUN (numfields, args, , |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1898 "-*- texinfo -*-\n\ |
20853
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20818
diff
changeset
|
1899 @deftypefn {} {} numfields (@var{s})\n\ |
9784 | 1900 Return the number of fields of the structure @var{s}.\n\ |
18533
ea0d4dea1a17
doc: Update documentation for functions in octave-value dir.
Rik <rik@octave.org>
parents:
18384
diff
changeset
|
1901 @seealso{fieldnames}\n\ |
9784 | 1902 @end deftypefn") |
1903 { | |
20818
cef0448a6ed2
eliminate unnecessary uses of nargin
John W. Eaton <jwe@octave.org>
parents:
20807
diff
changeset
|
1904 if (args.length () != 1) |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1905 print_usage (); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1906 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20893
diff
changeset
|
1907 if (! args(0).is_map ()) |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1908 error ("numfields: argument must be a struct"); |
9784 | 1909 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20893
diff
changeset
|
1910 return ovl (static_cast<double> (args(0).nfields ())); |
9784 | 1911 } |
1912 | |
10122
9d1a14e12431
Update docs and add tests for container functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
10066
diff
changeset
|
1913 /* |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
1914 ## test isfield |
10122
9d1a14e12431
Update docs and add tests for container functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
10066
diff
changeset
|
1915 %!test |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
1916 %! x(3).d=1; x(2).a=2; x(1).b=3; x(2).c=3; |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
1917 %! assert (isfield (x, "b")); |
14861
f7afecdd87ef
maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents:
14846
diff
changeset
|
1918 %!assert (isfield (struct ("a", "1"), "a")) |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
1919 %!assert (isfield ({1}, "c"), false) |
14861
f7afecdd87ef
maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents:
14846
diff
changeset
|
1920 %!assert (isfield (struct ("a", "1"), 10), false) |
f7afecdd87ef
maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents:
14846
diff
changeset
|
1921 %!assert (isfield (struct ("a", "b"), "a "), false) |
f7afecdd87ef
maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents:
14846
diff
changeset
|
1922 %!assert (isfield (struct ("a", 1, "b", 2), {"a", "c"}), [true, false]) |
10122
9d1a14e12431
Update docs and add tests for container functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
10066
diff
changeset
|
1923 */ |
9d1a14e12431
Update docs and add tests for container functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
10066
diff
changeset
|
1924 |
4750 | 1925 DEFUN (cell2struct, args, , |
1926 "-*- texinfo -*-\n\ | |
20853
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20818
diff
changeset
|
1927 @deftypefn {} {} cell2struct (@var{cell}, @var{fields})\n\ |
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20818
diff
changeset
|
1928 @deftypefnx {} {} cell2struct (@var{cell}, @var{fields}, @var{dim})\n\ |
20163
075a5e2e1ba5
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19863
diff
changeset
|
1929 Convert @var{cell} to a structure.\n\ |
075a5e2e1ba5
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19863
diff
changeset
|
1930 \n\ |
075a5e2e1ba5
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19863
diff
changeset
|
1931 The number of fields in @var{fields} must match the number of elements in\n\ |
075a5e2e1ba5
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19863
diff
changeset
|
1932 @var{cell} along dimension @var{dim}, that is\n\ |
075a5e2e1ba5
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19863
diff
changeset
|
1933 @code{numel (@var{fields}) == size (@var{cell}, @var{dim})}. If @var{dim}\n\ |
075a5e2e1ba5
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19863
diff
changeset
|
1934 is omitted, a value of 1 is assumed.\n\ |
4750 | 1935 \n\ |
1936 @example\n\ | |
1937 @group\n\ | |
14360
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1938 A = cell2struct (@{\"Peter\", \"Hannah\", \"Robert\";\n\ |
7031 | 1939 185, 170, 168@},\n\ |
14360
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1940 @{\"Name\",\"Height\"@}, 1);\n\ |
4750 | 1941 A(1)\n\ |
14360
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1942 @result{}\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1943 @{\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1944 Name = Peter\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1945 Height = 185\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1946 @}\n\ |
4750 | 1947 \n\ |
1948 @end group\n\ | |
1949 @end example\n\ | |
18533
ea0d4dea1a17
doc: Update documentation for functions in octave-value dir.
Rik <rik@octave.org>
parents:
18384
diff
changeset
|
1950 @seealso{struct2cell, cell2mat, struct}\n\ |
4750 | 1951 @end deftypefn") |
1952 { | |
13868
87f78c11d725
cell2struct: if DIM is omitted, use a default value of 1.
John W. Eaton <jwe@octave.org>
parents:
13706
diff
changeset
|
1953 int nargin = args.length (); |
87f78c11d725
cell2struct: if DIM is omitted, use a default value of 1.
John W. Eaton <jwe@octave.org>
parents:
13706
diff
changeset
|
1954 |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1955 if (nargin < 2 || nargin > 3) |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1956 print_usage (); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1957 |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1958 if (! args(0).is_cell ()) |
20893
384ff5aa9437
2015 Code Sprint: Eliminate useless return statements after error ().
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1959 error ("cell2struct: argument CELL must be of type cell"); |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1960 |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1961 if (! (args(1).is_cellstr () || args(1).is_char_matrix ())) |
20893
384ff5aa9437
2015 Code Sprint: Eliminate useless return statements after error ().
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1962 error ("cell2struct: FIELDS must be a cell array of strings or a character matrix"); |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1963 |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1964 int dim = 0; |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1965 |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1966 if (nargin == 3) |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1967 { |
20893
384ff5aa9437
2015 Code Sprint: Eliminate useless return statements after error ().
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1968 if (! args(2).is_real_scalar ()) |
384ff5aa9437
2015 Code Sprint: Eliminate useless return statements after error ().
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1969 error ("cell2struct: DIM must be a real scalar"); |
384ff5aa9437
2015 Code Sprint: Eliminate useless return statements after error ().
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1970 |
384ff5aa9437
2015 Code Sprint: Eliminate useless return statements after error ().
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1971 dim = nargin == 2 ? 0 : args(2).int_value () - 1; |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1972 } |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1973 |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1974 if (dim < 0) |
20893
384ff5aa9437
2015 Code Sprint: Eliminate useless return statements after error ().
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1975 error ("cell2struct: DIM must be a valid dimension"); |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1976 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20893
diff
changeset
|
1977 const Cell vals = args(0).cell_value (); |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20893
diff
changeset
|
1978 const Array<std::string> fields = args(1).cellstr_value (); |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20893
diff
changeset
|
1979 |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20893
diff
changeset
|
1980 octave_idx_type ext = vals.ndims () > dim ? vals.dims ()(dim) : 1; |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1981 |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1982 if (ext != fields.numel ()) |
20893
384ff5aa9437
2015 Code Sprint: Eliminate useless return statements after error ().
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1983 error ("cell2struct: number of FIELDS does not match dimension"); |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1984 |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1985 int nd = std::max (dim+1, vals.ndims ()); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1986 // result dimensions. |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1987 dim_vector rdv = vals.dims ().redim (nd); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1988 |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1989 assert (ext == rdv(dim)); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1990 if (nd == 2) |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1991 { |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1992 rdv(0) = rdv(1-dim); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1993 rdv(1) = 1; |
4750 | 1994 } |
4751 | 1995 else |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1996 { |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1997 for (int i = dim + 1; i < nd; i++) |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1998 rdv(i-1) = rdv(i); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
1999 |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
2000 rdv.resize (nd-1); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
2001 } |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
2002 |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
2003 octave_map map (rdv); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
2004 Array<idx_vector> ia (dim_vector (nd, 1), idx_vector::colon); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
2005 |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
2006 for (octave_idx_type i = 0; i < ext; i++) |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
2007 { |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
2008 ia(dim) = i; |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
2009 map.setfield (fields(i), vals.index (ia).reshape (rdv)); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
2010 } |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
2011 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20893
diff
changeset
|
2012 return ovl (map); |
4750 | 2013 } |
2014 | |
10122
9d1a14e12431
Update docs and add tests for container functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
10066
diff
changeset
|
2015 /* |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
2016 ## test cell2struct versus struct2cell |
10122
9d1a14e12431
Update docs and add tests for container functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
10066
diff
changeset
|
2017 %!test |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
2018 %! keys = cellstr (char (floor (rand (100,10)*24+65)))'; |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
2019 %! vals = mat2cell (rand (100,1), ones (100,1), 1)'; |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
2020 %! s = struct ([keys; vals]{:}); |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
2021 %! t = cell2struct (vals, keys, 2); |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
2022 %! assert (s, t); |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
2023 %! assert (struct2cell (s), vals'); |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
2024 %! assert (fieldnames (s), keys'); |
13868
87f78c11d725
cell2struct: if DIM is omitted, use a default value of 1.
John W. Eaton <jwe@octave.org>
parents:
13706
diff
changeset
|
2025 |
87f78c11d725
cell2struct: if DIM is omitted, use a default value of 1.
John W. Eaton <jwe@octave.org>
parents:
13706
diff
changeset
|
2026 %!assert (cell2struct ({1; 2}, {"a"; "b"}), struct ("a", 1, "b", 2)); |
14624
edf9ca8a92a8
when redimensioning, always pad dim_vector objects with 1 (bug #33216)
John W. Eaton <jwe@octave.org>
parents:
14138
diff
changeset
|
2027 |
edf9ca8a92a8
when redimensioning, always pad dim_vector objects with 1 (bug #33216)
John W. Eaton <jwe@octave.org>
parents:
14138
diff
changeset
|
2028 %!assert (cell2struct ({}, {"f"}, 3), struct ("f", {})); |
10122
9d1a14e12431
Update docs and add tests for container functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
10066
diff
changeset
|
2029 */ |
9d1a14e12431
Update docs and add tests for container functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
10066
diff
changeset
|
2030 |
20807
fee9c6315762
avoid build dependency issue
John W. Eaton <jwe@octave.org>
parents:
20797
diff
changeset
|
2031 // FIXME: we should be including builtin-defun-decls.h but doing that |
fee9c6315762
avoid build dependency issue
John W. Eaton <jwe@octave.org>
parents:
20797
diff
changeset
|
2032 // currently exposes a problem with dependencies in the the build system. |
fee9c6315762
avoid build dependency issue
John W. Eaton <jwe@octave.org>
parents:
20797
diff
changeset
|
2033 extern OCTINTERP_API octave_value_list |
fee9c6315762
avoid build dependency issue
John W. Eaton <jwe@octave.org>
parents:
20797
diff
changeset
|
2034 Fcellstr (const octave_value_list& = octave_value_list (), int = 0); |
10122
9d1a14e12431
Update docs and add tests for container functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
10066
diff
changeset
|
2035 |
4817 | 2036 DEFUN (rmfield, args, , |
2037 "-*- texinfo -*-\n\ | |
20853
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20818
diff
changeset
|
2038 @deftypefn {} {@var{sout} =} rmfield (@var{s}, \"@var{f}\")\n\ |
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20818
diff
changeset
|
2039 @deftypefnx {} {@var{sout} =} rmfield (@var{s}, @var{f})\n\ |
18533
ea0d4dea1a17
doc: Update documentation for functions in octave-value dir.
Rik <rik@octave.org>
parents:
18384
diff
changeset
|
2040 Return a @emph{copy} of the structure (array) @var{s} with the field @var{f}\n\ |
19276
1fa328da03ef
Overhaul getfield, setfield, orderfields m-files.
Rik <rik@octave.org>
parents:
18678
diff
changeset
|
2041 removed.\n\ |
1fa328da03ef
Overhaul getfield, setfield, orderfields m-files.
Rik <rik@octave.org>
parents:
18678
diff
changeset
|
2042 \n\ |
1fa328da03ef
Overhaul getfield, setfield, orderfields m-files.
Rik <rik@octave.org>
parents:
18678
diff
changeset
|
2043 If @var{f} is a cell array of strings or a character array, remove each of\n\ |
1fa328da03ef
Overhaul getfield, setfield, orderfields m-files.
Rik <rik@octave.org>
parents:
18678
diff
changeset
|
2044 the named fields.\n\ |
1fa328da03ef
Overhaul getfield, setfield, orderfields m-files.
Rik <rik@octave.org>
parents:
18678
diff
changeset
|
2045 @seealso{orderfields, fieldnames, isfield}\n\ |
5642 | 2046 @end deftypefn") |
4817 | 2047 { |
20818
cef0448a6ed2
eliminate unnecessary uses of nargin
John W. Eaton <jwe@octave.org>
parents:
20807
diff
changeset
|
2048 if (args.length () != 2) |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
2049 print_usage (); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
2050 |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
2051 octave_map m = args(0).xmap_value ("rmfield: first argument must be a struct"); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
2052 |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
2053 octave_value_list fval = Fcellstr (args(1), 1); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
2054 |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
2055 Cell fcell = fval(0).cell_value (); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
2056 |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
2057 for (int i = 0; i < fcell.numel (); i++) |
4817 | 2058 { |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
2059 std::string key = fcell(i).string_value (); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
2060 |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
2061 if (! m.isfield (key)) |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
2062 error ("rmfield: structure does not contain field %s", key.c_str ()); |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
2063 |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20974
diff
changeset
|
2064 m.rmfield (key); |
4817 | 2065 } |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20747
diff
changeset
|
2066 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20893
diff
changeset
|
2067 return ovl (m); |
4817 | 2068 } |
2069 | |
10122
9d1a14e12431
Update docs and add tests for container functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
10066
diff
changeset
|
2070 /* |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
2071 ## test rmfield |
15534
360adb4a3136
doc: Update docstring form rmfield() and add another %!test.
Rik <rik@octave.org>
parents:
15467
diff
changeset
|
2072 %!shared x |
360adb4a3136
doc: Update docstring form rmfield() and add another %!test.
Rik <rik@octave.org>
parents:
15467
diff
changeset
|
2073 %! x(3).d=1; x(2).a=2; x(1).b=3; x(2).c=3; x(6).f="abc123"; |
360adb4a3136
doc: Update docstring form rmfield() and add another %!test.
Rik <rik@octave.org>
parents:
15467
diff
changeset
|
2074 %! |
10122
9d1a14e12431
Update docs and add tests for container functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
10066
diff
changeset
|
2075 %!test |
15534
360adb4a3136
doc: Update docstring form rmfield() and add another %!test.
Rik <rik@octave.org>
parents:
15467
diff
changeset
|
2076 %! y = rmfield (x, "c"); |
360adb4a3136
doc: Update docstring form rmfield() and add another %!test.
Rik <rik@octave.org>
parents:
15467
diff
changeset
|
2077 %! assert (fieldnames (y), {"d"; "a"; "b"; "f"}); |
360adb4a3136
doc: Update docstring form rmfield() and add another %!test.
Rik <rik@octave.org>
parents:
15467
diff
changeset
|
2078 %! assert (size (y), [1, 6]); |
360adb4a3136
doc: Update docstring form rmfield() and add another %!test.
Rik <rik@octave.org>
parents:
15467
diff
changeset
|
2079 %!test |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
2080 %! y = rmfield (x, {"a", "f"}); |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
2081 %! assert (fieldnames (y), {"d"; "b"; "c"}); |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
2082 %! assert (size (y), [1, 6]); |
10122
9d1a14e12431
Update docs and add tests for container functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
10066
diff
changeset
|
2083 */ |
9d1a14e12431
Update docs and add tests for container functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
10066
diff
changeset
|
2084 |
11474 | 2085 DEFUN (struct_levels_to_print, args, nargout, |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2086 "-*- texinfo -*-\n\ |
20853
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20818
diff
changeset
|
2087 @deftypefn {} {@var{val} =} struct_levels_to_print ()\n\ |
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20818
diff
changeset
|
2088 @deftypefnx {} {@var{old_val} =} struct_levels_to_print (@var{new_val})\n\ |
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20818
diff
changeset
|
2089 @deftypefnx {} {} struct_levels_to_print (@var{new_val}, \"local\")\n\ |
11474 | 2090 Query or set the internal variable that specifies the number of\n\ |
2091 structure levels to display.\n\ | |
13951
79aa00a94e9e
doc: Document "local" option for configuration variables.
Rik <octave@nomad.inbox5.com>
parents:
13868
diff
changeset
|
2092 \n\ |
17281
bc924baa2c4e
doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents:
16816
diff
changeset
|
2093 When called from inside a function with the @qcode{\"local\"} option, the\n\ |
20163
075a5e2e1ba5
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19863
diff
changeset
|
2094 variable is changed locally for the function and any subroutines it calls.\n\ |
17281
bc924baa2c4e
doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents:
16816
diff
changeset
|
2095 The original variable value is restored when exiting the function.\n\ |
18533
ea0d4dea1a17
doc: Update documentation for functions in octave-value dir.
Rik <rik@octave.org>
parents:
18384
diff
changeset
|
2096 @seealso{print_struct_array_contents}\n\ |
11474 | 2097 @end deftypefn") |
2098 { | |
15215
9020dddc925a
use std::numeric_limits for integer max and min values
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
2099 return SET_INTERNAL_VARIABLE_WITH_LIMITS (struct_levels_to_print, -1, |
9020dddc925a
use std::numeric_limits for integer max and min values
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
2100 std::numeric_limits<int>::max ()); |
11474 | 2101 } |
2102 | |
2103 DEFUN (print_struct_array_contents, args, nargout, | |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2104 "-*- texinfo -*-\n\ |
20853
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20818
diff
changeset
|
2105 @deftypefn {} {@var{val} =} print_struct_array_contents ()\n\ |
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20818
diff
changeset
|
2106 @deftypefnx {} {@var{old_val} =} print_struct_array_contents (@var{new_val})\n\ |
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20818
diff
changeset
|
2107 @deftypefnx {} {} print_struct_array_contents (@var{new_val}, \"local\")\n\ |
11474 | 2108 Query or set the internal variable that specifies whether to print struct\n\ |
18533
ea0d4dea1a17
doc: Update documentation for functions in octave-value dir.
Rik <rik@octave.org>
parents:
18384
diff
changeset
|
2109 array contents.\n\ |
ea0d4dea1a17
doc: Update documentation for functions in octave-value dir.
Rik <rik@octave.org>
parents:
18384
diff
changeset
|
2110 \n\ |
20163
075a5e2e1ba5
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19863
diff
changeset
|
2111 If true, values of struct array elements are printed. This variable does\n\ |
075a5e2e1ba5
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19863
diff
changeset
|
2112 not affect scalar structures whose elements are always printed. In both\n\ |
075a5e2e1ba5
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19863
diff
changeset
|
2113 cases, however, printing will be limited to the number of levels specified\n\ |
075a5e2e1ba5
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19863
diff
changeset
|
2114 by @var{struct_levels_to_print}.\n\ |
13951
79aa00a94e9e
doc: Document "local" option for configuration variables.
Rik <octave@nomad.inbox5.com>
parents:
13868
diff
changeset
|
2115 \n\ |
17281
bc924baa2c4e
doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents:
16816
diff
changeset
|
2116 When called from inside a function with the @qcode{\"local\"} option, the\n\ |
20163
075a5e2e1ba5
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19863
diff
changeset
|
2117 variable is changed locally for the function and any subroutines it calls.\n\ |
17281
bc924baa2c4e
doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents:
16816
diff
changeset
|
2118 The original variable value is restored when exiting the function.\n\ |
18533
ea0d4dea1a17
doc: Update documentation for functions in octave-value dir.
Rik <rik@octave.org>
parents:
18384
diff
changeset
|
2119 @seealso{struct_levels_to_print}\n\ |
11474 | 2120 @end deftypefn") |
2121 { | |
2122 return SET_INTERNAL_VARIABLE (print_struct_array_contents); | |
2123 } |