Mercurial > hg > octave-lyh
annotate libinterp/corefcn/oct-map.h @ 17335:fe6518a1d87c
Move TeX symbol decoding into the lexer (bug #39831).
* libinterp/Makefile.am (BUILT_SOURCES): Add corefcn/oct-tex-symbols.cc.
(BUILT_DISTFILES): Add corefcn/oct-tex-lexer.ll and
corefcn/oct-tex-symbols.cc.
(EXTRA_DIST): Add corefcn/oct-tex-lexer.in.ll and
corefcn/oct-tex-symbols.in.
(ULT_DIST_SRC): Filter out corefcn/oct-tex-lexer.ll from DIST_SRC and
add corefcn/oct-tex-lexer.in.ll instead.
(CLEAN_FILES): Add corefcn/oct-tex-parser.output.
* libinterp/corefcn/modules.mk (corefcn/oct-tex-lexer.ll,
corefcn/oct-tex-symbols.cc): New rules to build the TeX lexer.
(corefcn/txt-eng.cc): Add dependency on corefcn/oct-tex-symbols.cc.
* libinterp/corefcn/oct-tex-lexer.in.ll: Renamed from oct-tex.lexer.ll.
Remove COMMAND state. Remove ID regex. Replace rules for symbols with
tag @SYMBOL_RULES@.
* libinterp/corefcn/oct-tex-parser.yy (ID, CMD, identifier): Remove
tokens.
(SYM, sym): New token and value.
(symbol_element): Build from SYM.
* libinterp/corefcn/oct-tex-symbols.in: New file with supported TeX
symbols and corresponding codes (unicode and MS symbols).
* libinterp/corefcn/txt-eng.h (class text_element_symbol): Make it
inherit from text_element.
(text_element_symbol::code): Removed member.
(text_element_symbol::symbol): New member.
(text_element_symbol::text_element_symbol): Adapt constructor.
(text_element_symbol::get_symbol): New method.
(text_element_symbol::get_symbol_code): Make const.
* libinterp/corefcn/txt-eng.cc (symbol_names, symbol_codes): Remove
static variables, now auto-generated from oct-tex-symbols.in.
(oct-tex-symbols.cc): New include.
(text_element_symbol::get_symbol_code): Change implementation to simply
index into auto-generated symbol_codes array.
* libinterp/corefcn/txt-eng-ft.cc
(ft_render::visit(text_element_symbol)): Don't use
text_element_symbol::string_value(), use
text_element_symbol::get_symbol() instead.
author | Michael Goffioul <michael.goffioul@gmail.com> |
---|---|
date | Sat, 24 Aug 2013 14:27:09 -0400 |
parents | 45afabc5f7c8 |
children |
rev | line source |
---|---|
746 | 1 /* |
2 | |
14138
72c96de7a403
maint: update copyright notices for 2012
John W. Eaton <jwe@octave.org>
parents:
14004
diff
changeset
|
3 Copyright (C) 1994-2012 John W. Eaton |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
4 Copyright (C) 2010 VZLU Prague |
746 | 5 |
6 This file is part of Octave. | |
7 | |
8 Octave is free software; you can redistribute it and/or modify it | |
9 under the terms of the GNU General Public License as published by the | |
7016 | 10 Free Software Foundation; either version 3 of the License, or (at your |
11 option) any later version. | |
746 | 12 |
13 Octave is distributed in the hope that it will be useful, but WITHOUT | |
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
16 for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
7016 | 19 along with Octave; see the file COPYING. If not, see |
20 <http://www.gnu.org/licenses/>. | |
746 | 21 |
22 */ | |
23 | |
24 #if !defined (octave_oct_map_h) | |
25 #define octave_oct_map_h 1 | |
26 | |
6059 | 27 #include <algorithm> |
4219 | 28 #include <map> |
746 | 29 |
4513 | 30 #include "Cell.h" |
3931 | 31 #include "oct-obj.h" |
746 | 32 |
1755 | 33 class string_vector; |
34 | |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
35 // A class holding a map field->index. Supports reference-counting. |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
36 class OCTINTERP_API |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
37 octave_fields |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
38 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
39 class fields_rep : public std::map<std::string, octave_idx_type> |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
40 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
41 public: |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
42 fields_rep (void) : std::map<std::string, octave_idx_type> (), count (1) { } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
43 fields_rep (const fields_rep& other) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
44 : std::map<std::string, octave_idx_type> (other), count (1) { } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
45 |
12125
a21a3875ca83
implement a common class for reference counts
Jaroslav Hajek <highegg@gmail.com>
parents:
11586
diff
changeset
|
46 octave_refcount<int> count; |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
47 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
48 private: |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
49 fields_rep& operator = (const fields_rep&); // no assignment! |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
50 }; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
51 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
52 fields_rep *rep; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
53 |
11068
b0eec300d3fc
avoid SID in octave_fields
Jaroslav Hajek <highegg@gmail.com>
parents:
10766
diff
changeset
|
54 static fields_rep *nil_rep (void) |
b0eec300d3fc
avoid SID in octave_fields
Jaroslav Hajek <highegg@gmail.com>
parents:
10766
diff
changeset
|
55 { |
14004
92e45016eb48
use static storage for octave_fields nil rep instead of allocating it with new
John W. Eaton <jwe@octave.org>
parents:
13985
diff
changeset
|
56 static fields_rep nr; |
92e45016eb48
use static storage for octave_fields nil rep instead of allocating it with new
John W. Eaton <jwe@octave.org>
parents:
13985
diff
changeset
|
57 return &nr; |
11068
b0eec300d3fc
avoid SID in octave_fields
Jaroslav Hajek <highegg@gmail.com>
parents:
10766
diff
changeset
|
58 } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
59 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
60 public: |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
61 |
11068
b0eec300d3fc
avoid SID in octave_fields
Jaroslav Hajek <highegg@gmail.com>
parents:
10766
diff
changeset
|
62 octave_fields (void) : rep (nil_rep ()) { rep->count++; } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
63 octave_fields (const string_vector&); |
10766
f0304c545588
make map constructors from octave_fields public
Jaroslav Hajek <highegg@gmail.com>
parents:
10764
diff
changeset
|
64 octave_fields (const char * const *); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
65 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
66 ~octave_fields (void) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
67 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
68 if (--rep->count == 0) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
69 delete rep; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
70 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
71 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
72 void make_unique (void) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
73 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
74 if (rep->count > 1) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
75 { |
13985
43cc49c7abd1
Use thread-safe atomic reference counting (GCC and MSVC).
Michael Goffioul <michael.goffioul@gmail.com>
parents:
12155
diff
changeset
|
76 fields_rep *r = new fields_rep (*rep); |
43cc49c7abd1
Use thread-safe atomic reference counting (GCC and MSVC).
Michael Goffioul <michael.goffioul@gmail.com>
parents:
12155
diff
changeset
|
77 |
43cc49c7abd1
Use thread-safe atomic reference counting (GCC and MSVC).
Michael Goffioul <michael.goffioul@gmail.com>
parents:
12155
diff
changeset
|
78 if (--rep->count == 0) |
43cc49c7abd1
Use thread-safe atomic reference counting (GCC and MSVC).
Michael Goffioul <michael.goffioul@gmail.com>
parents:
12155
diff
changeset
|
79 delete rep; |
43cc49c7abd1
Use thread-safe atomic reference counting (GCC and MSVC).
Michael Goffioul <michael.goffioul@gmail.com>
parents:
12155
diff
changeset
|
80 |
43cc49c7abd1
Use thread-safe atomic reference counting (GCC and MSVC).
Michael Goffioul <michael.goffioul@gmail.com>
parents:
12155
diff
changeset
|
81 rep = r; |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
82 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
83 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
84 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
85 octave_fields (const octave_fields& o) : rep (o.rep) { rep->count++; } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
86 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
87 octave_fields& |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
88 operator = (const octave_fields& o) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
89 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
90 o.rep->count++; |
10747
58c1b5402588
fix a showstopping bug in octave_fields reference counting
Jaroslav Hajek <highegg@gmail.com>
parents:
10746
diff
changeset
|
91 if (--rep->count == 0) |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
92 delete rep; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
93 rep = o.rep; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
94 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
95 return *this; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
96 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
97 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
98 // constant iteration support. non-const iteration intentionally unsupported. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
99 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
100 typedef std::map<std::string, octave_idx_type>::const_iterator const_iterator; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
101 typedef const_iterator iterator; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
102 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
103 const_iterator begin (void) const { return rep->begin (); } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
104 const_iterator end (void) const { return rep->end (); } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
105 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
106 std::string key (const_iterator p) const { return p->first; } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
107 octave_idx_type index (const_iterator p) const { return p->second; } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
108 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
109 const_iterator seek (const std::string& k) const |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
110 { return rep->find (k); } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
111 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
112 // high-level methods. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
113 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
114 // number of fields. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
115 octave_idx_type nfields (void) const { return rep->size (); } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
116 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
117 // check whether a field exists. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
118 bool isfield (const std::string& name) const; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
119 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
120 // get index of field. return -1 if not exist |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
121 octave_idx_type getfield (const std::string& name) const; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
122 // get index of field. add if not exist |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
123 octave_idx_type getfield (const std::string& name); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
124 // remove field and return the index. -1 if didn't exist. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
125 octave_idx_type rmfield (const std::string& name); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
126 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
127 // order the fields of this map. creates a permutation |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
128 // used to order the fields. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
129 void orderfields (Array<octave_idx_type>& perm); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
130 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
131 // compares two instances for equality up to order of fields. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
132 // returns a permutation needed to bring the fields of *other* |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
133 // into the order of *this*. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
134 bool equal_up_to_order (const octave_fields& other, |
10760
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10757
diff
changeset
|
135 octave_idx_type* perm) const; |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10757
diff
changeset
|
136 |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10757
diff
changeset
|
137 bool equal_up_to_order (const octave_fields& other, |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
138 Array<octave_idx_type>& perm) const; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
139 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
140 bool is_same (const octave_fields& other) const |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
141 { return rep == other.rep; } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
142 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
143 // Returns the fields as a vector of strings. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
144 string_vector fieldnames (void) const; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
145 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
146 void clear (void) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
147 { |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
148 *this = octave_fields (); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
149 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
150 }; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
151 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
152 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
153 class OCTINTERP_API |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
154 octave_scalar_map |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
155 { |
10766
f0304c545588
make map constructors from octave_fields public
Jaroslav Hajek <highegg@gmail.com>
parents:
10764
diff
changeset
|
156 public: |
f0304c545588
make map constructors from octave_fields public
Jaroslav Hajek <highegg@gmail.com>
parents:
10764
diff
changeset
|
157 |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
158 octave_scalar_map (const octave_fields& k) |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
159 : xkeys (k), xvals (k.nfields ()) { } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
160 |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
161 octave_scalar_map (void) : xkeys (), xvals () { } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
162 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
163 octave_scalar_map (const string_vector& k) |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
164 : xkeys (k), xvals (k.length ()) { } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
165 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
166 octave_scalar_map (const octave_scalar_map& m) |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
167 : xkeys (m.xkeys), xvals(m.xvals) { } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
168 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
169 octave_scalar_map& operator = (const octave_scalar_map& m) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
170 { |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
171 xkeys = m.xkeys; |
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
172 xvals = m.xvals; |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
173 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
174 return *this; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
175 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
176 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
177 // iteration support. note that both const and non-const iterators are the |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
178 // same. The const/non-const distinction is made by the key & contents method. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
179 typedef octave_fields::const_iterator const_iterator; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
180 typedef const_iterator iterator; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
181 |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
182 const_iterator begin (void) const { return xkeys.begin (); } |
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
183 const_iterator end (void) const { return xkeys.end (); } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
184 |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
185 const_iterator seek (const std::string& k) const { return xkeys.seek (k); } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
186 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
187 std::string key (const_iterator p) const |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
188 { return xkeys.key (p); } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
189 octave_idx_type index (const_iterator p) const |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
190 { return xkeys.index (p); } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
191 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
192 const octave_value& contents (const_iterator p) const |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
193 { return xvals[xkeys.index (p)]; } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
194 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
195 octave_value& contents (iterator p) |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
196 { return xvals[xkeys.index (p)]; } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
197 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
198 const octave_value& contents (octave_idx_type i) const |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
199 { return xvals[i]; } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
200 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
201 octave_value& contents (octave_idx_type i) |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
202 { return xvals[i]; } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
203 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
204 // number of fields. |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
205 octave_idx_type nfields (void) const { return xkeys.nfields (); } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
206 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
207 // check whether a field exists. |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
208 bool isfield (const std::string& name) const |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
209 { return xkeys.isfield (name); } |
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
210 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
211 bool contains (const std::string& name) const |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
212 { return isfield (name); } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
213 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
214 string_vector fieldnames (void) const |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
215 { return xkeys.fieldnames (); } |
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
216 |
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
217 string_vector keys (void) const |
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
218 { return fieldnames (); } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
219 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
220 // get contents of a given field. empty value if not exist. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
221 octave_value getfield (const std::string& key) const; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
222 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
223 // set contents of a given field. add if not exist. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
224 void setfield (const std::string& key, const octave_value& val); |
10761
12dfe91e9fab
more bkw compatibility for octave_map
Jaroslav Hajek <highegg@gmail.com>
parents:
10760
diff
changeset
|
225 void assign (const std::string& k, const octave_value& val) |
11074
8a3b7e8fcbbc
graphics.cc, graphics.h.in, genprops.awk: use octave_map and octave_scalar_map instead of Octave_map
John W. Eaton <jwe@octave.org>
parents:
11068
diff
changeset
|
226 { setfield (k, val); } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
227 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
228 // remove a given field. do nothing if not exist. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
229 void rmfield (const std::string& key); |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
230 void del (const std::string& k) { rmfield (k); } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
231 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
232 // return a copy with fields ordered, optionally along with permutation. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
233 octave_scalar_map orderfields (void) const; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
234 octave_scalar_map orderfields (Array<octave_idx_type>& perm) const; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
235 octave_scalar_map orderfields (const octave_scalar_map& other, |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
236 Array<octave_idx_type>& perm) const; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
237 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
238 // aka getfield/setfield, but the latter returns a reference. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
239 octave_value contents (const std::string& k) const; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
240 octave_value& contents (const std::string& k); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
241 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
242 void clear (void) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
243 { |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
244 xkeys.clear (); |
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
245 xvals.clear (); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
246 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
247 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
248 friend class octave_map; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
249 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
250 private: |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
251 |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
252 octave_fields xkeys; |
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
253 std::vector<octave_value> xvals; |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
254 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
255 }; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
256 |
10757
1cc44f3ec814
templated extractors for maps and cells
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
257 template<> |
1cc44f3ec814
templated extractors for maps and cells
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
258 inline octave_scalar_map octave_value_extract<octave_scalar_map> (const octave_value& v) |
1cc44f3ec814
templated extractors for maps and cells
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
259 { return v.scalar_map_value (); } |
1cc44f3ec814
templated extractors for maps and cells
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
260 |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
261 class OCTINTERP_API |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
262 octave_map |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
263 { |
10766
f0304c545588
make map constructors from octave_fields public
Jaroslav Hajek <highegg@gmail.com>
parents:
10764
diff
changeset
|
264 public: |
f0304c545588
make map constructors from octave_fields public
Jaroslav Hajek <highegg@gmail.com>
parents:
10764
diff
changeset
|
265 |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
266 octave_map (const octave_fields& k) |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
267 : xkeys (k), xvals (k.nfields ()), dimensions () { } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
268 |
10753
bee1b1a2e29a
yield compatible dims from cell2struct + more fixes. build & tests OK
Jaroslav Hajek <highegg@gmail.com>
parents:
10749
diff
changeset
|
269 octave_map (const dim_vector& dv, const octave_fields& k) |
bee1b1a2e29a
yield compatible dims from cell2struct + more fixes. build & tests OK
Jaroslav Hajek <highegg@gmail.com>
parents:
10749
diff
changeset
|
270 : xkeys (k), xvals (k.nfields (), Cell (dv)), dimensions (dv) { } |
bee1b1a2e29a
yield compatible dims from cell2struct + more fixes. build & tests OK
Jaroslav Hajek <highegg@gmail.com>
parents:
10749
diff
changeset
|
271 |
10756
d808eb829d48
optimize num2cell on structs
Jaroslav Hajek <highegg@gmail.com>
parents:
10755
diff
changeset
|
272 typedef octave_scalar_map element_type; |
d808eb829d48
optimize num2cell on structs
Jaroslav Hajek <highegg@gmail.com>
parents:
10755
diff
changeset
|
273 |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
274 octave_map (void) : xkeys (), xvals (), dimensions () { } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
275 |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
276 octave_map (const dim_vector& dv) : xkeys (), xvals (), dimensions (dv) { } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
277 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
278 octave_map (const string_vector& k) |
12155
7e856c31ffae
fix octave_map (const string_vector&) constructor
John W. Eaton <jwe@octave.org>
parents:
12125
diff
changeset
|
279 : xkeys (k), xvals (k.length (), Cell (1, 1)), dimensions (1, 1) { } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
280 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
281 octave_map (const dim_vector& dv, const string_vector& k) |
10753
bee1b1a2e29a
yield compatible dims from cell2struct + more fixes. build & tests OK
Jaroslav Hajek <highegg@gmail.com>
parents:
10749
diff
changeset
|
282 : xkeys (k), xvals (k.length (), Cell (dv)), dimensions (dv) { } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
283 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
284 octave_map (const octave_map& m) |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
285 : xkeys (m.xkeys), xvals (m.xvals), dimensions (m.dimensions) { } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
286 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
287 octave_map (const octave_scalar_map& m); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
288 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
289 octave_map (const Octave_map& m); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
290 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
291 octave_map& operator = (const octave_map& m) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
292 { |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
293 xkeys = m.xkeys; |
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
294 xvals = m.xvals; |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
295 dimensions = m.dimensions; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
296 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
297 return *this; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
298 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
299 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
300 // iteration support. note that both const and non-const iterators are the |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
301 // same. The const/non-const distinction is made by the key & contents method. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
302 typedef octave_fields::const_iterator const_iterator; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
303 typedef const_iterator iterator; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
304 |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
305 const_iterator begin (void) const { return xkeys.begin (); } |
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
306 const_iterator end (void) const { return xkeys.end (); } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
307 |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
308 const_iterator seek (const std::string& k) const { return xkeys.seek (k); } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
309 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
310 std::string key (const_iterator p) const |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
311 { return xkeys.key (p); } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
312 octave_idx_type index (const_iterator p) const |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
313 { return xkeys.index (p); } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
314 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
315 const Cell& contents (const_iterator p) const |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
316 { return xvals[xkeys.index (p)]; } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
317 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
318 Cell& contents (iterator p) |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
319 { return xvals[xkeys.index (p)]; } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
320 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
321 const Cell& contents (octave_idx_type i) const |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
322 { return xvals[i]; } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
323 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
324 Cell& contents (octave_idx_type i) |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
325 { return xvals[i]; } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
326 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
327 // number of fields. |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
328 octave_idx_type nfields (void) const { return xkeys.nfields (); } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
329 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
330 // check whether a field exists. |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
331 bool isfield (const std::string& name) const |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
332 { return xkeys.isfield (name); } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
333 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
334 bool contains (const std::string& name) const |
10743
cb3ed842bd30
make the new interface more backward compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
10742
diff
changeset
|
335 { return isfield (name); } |
cb3ed842bd30
make the new interface more backward compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
10742
diff
changeset
|
336 |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
337 string_vector fieldnames (void) const |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
338 { return xkeys.fieldnames (); } |
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
339 |
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
340 string_vector keys (void) const |
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
341 { return fieldnames (); } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
342 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
343 // get contents of a given field. empty value if not exist. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
344 Cell getfield (const std::string& key) const; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
345 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
346 // set contents of a given field. add if not exist. checks for |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
347 // correct dimensions. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
348 void setfield (const std::string& key, const Cell& val); |
10761
12dfe91e9fab
more bkw compatibility for octave_map
Jaroslav Hajek <highegg@gmail.com>
parents:
10760
diff
changeset
|
349 void assign (const std::string& k, const Cell& val) |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
350 { setfield (k, val); } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
351 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
352 // remove a given field. do nothing if not exist. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
353 void rmfield (const std::string& key); |
10744
4716e2e17118
fix octave_map::extract_scalar
Jaroslav Hajek <highegg@gmail.com>
parents:
10743
diff
changeset
|
354 void del (const std::string& k) { rmfield (k); } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
355 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
356 // return a copy with fields ordered, optionally along with permutation. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
357 octave_map orderfields (void) const; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
358 octave_map orderfields (Array<octave_idx_type>& perm) const; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
359 octave_map orderfields (const octave_map& other, |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
360 Array<octave_idx_type>& perm) const; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
361 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
362 // aka getfield/setfield, but the latter returns a reference. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
363 Cell contents (const std::string& k) const; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
364 Cell& contents (const std::string& k); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
365 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
366 void clear (void) |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
367 { |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
368 xkeys.clear (); |
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
369 xvals.clear (); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
370 } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
371 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
372 // The Array-like methods. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
373 octave_idx_type numel (void) const { return dimensions.numel (); } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
374 octave_idx_type length (void) const { return numel (); } |
10764
e141bcb1befd
implement map concat optimizations for [] operator
Jaroslav Hajek <highegg@gmail.com>
parents:
10761
diff
changeset
|
375 bool is_empty (void) const { return dimensions.any_zero (); } |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
376 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
377 octave_idx_type rows (void) const { return dimensions(0); } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
378 octave_idx_type cols (void) const { return dimensions(1); } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
379 octave_idx_type columns (void) const { return dimensions(1); } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
380 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
381 // Extract a scalar substructure. |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
382 octave_scalar_map checkelem (octave_idx_type n) const; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
383 octave_scalar_map checkelem (octave_idx_type i, octave_idx_type j) const; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
384 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
385 octave_scalar_map |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
386 checkelem (const Array<octave_idx_type>& ra_idx) const; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
387 |
10755
6ba7937a6fa4
more array-like methods in octave_map
Jaroslav Hajek <highegg@gmail.com>
parents:
10753
diff
changeset
|
388 octave_scalar_map operator () (octave_idx_type n) const |
6ba7937a6fa4
more array-like methods in octave_map
Jaroslav Hajek <highegg@gmail.com>
parents:
10753
diff
changeset
|
389 { return checkelem (n); } |
6ba7937a6fa4
more array-like methods in octave_map
Jaroslav Hajek <highegg@gmail.com>
parents:
10753
diff
changeset
|
390 octave_scalar_map operator () (octave_idx_type i, octave_idx_type j) const |
6ba7937a6fa4
more array-like methods in octave_map
Jaroslav Hajek <highegg@gmail.com>
parents:
10753
diff
changeset
|
391 { return checkelem (i, j); } |
6ba7937a6fa4
more array-like methods in octave_map
Jaroslav Hajek <highegg@gmail.com>
parents:
10753
diff
changeset
|
392 |
6ba7937a6fa4
more array-like methods in octave_map
Jaroslav Hajek <highegg@gmail.com>
parents:
10753
diff
changeset
|
393 octave_scalar_map |
6ba7937a6fa4
more array-like methods in octave_map
Jaroslav Hajek <highegg@gmail.com>
parents:
10753
diff
changeset
|
394 operator () (const Array<octave_idx_type>& ra_idx) const |
6ba7937a6fa4
more array-like methods in octave_map
Jaroslav Hajek <highegg@gmail.com>
parents:
10753
diff
changeset
|
395 { return checkelem (ra_idx); } |
6ba7937a6fa4
more array-like methods in octave_map
Jaroslav Hajek <highegg@gmail.com>
parents:
10753
diff
changeset
|
396 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
397 octave_map squeeze (void) const; |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
398 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
399 octave_map permute (const Array<int>& vec, bool inv = false) const; |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
400 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
401 dim_vector dims (void) const { return dimensions; } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
402 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
403 int ndims (void) const { return dimensions.length (); } |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
404 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
405 octave_map transpose (void) const; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
406 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
407 octave_map reshape (const dim_vector& dv) const; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
408 |
10743
cb3ed842bd30
make the new interface more backward compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
10742
diff
changeset
|
409 void resize (const dim_vector& dv, bool fill = false); |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
410 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
411 static octave_map |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
412 cat (int dim, octave_idx_type n, const octave_scalar_map *map_list); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
413 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
414 static octave_map |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
415 cat (int dim, octave_idx_type n, const octave_map *map_list); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
416 |
10743
cb3ed842bd30
make the new interface more backward compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
10742
diff
changeset
|
417 octave_map index (const idx_vector& i, bool resize_ok = false) const; |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
418 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
419 octave_map index (const idx_vector& i, const idx_vector& j, |
10743
cb3ed842bd30
make the new interface more backward compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
10742
diff
changeset
|
420 bool resize_ok = false) const; |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
421 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
422 octave_map index (const Array<idx_vector>& ia, |
10743
cb3ed842bd30
make the new interface more backward compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
10742
diff
changeset
|
423 bool resize_ok = false) const; |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
424 |
10743
cb3ed842bd30
make the new interface more backward compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
10742
diff
changeset
|
425 octave_map index (const octave_value_list&, bool resize_ok = false) const; |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
426 |
10755
6ba7937a6fa4
more array-like methods in octave_map
Jaroslav Hajek <highegg@gmail.com>
parents:
10753
diff
changeset
|
427 octave_map column (octave_idx_type k) const; |
6ba7937a6fa4
more array-like methods in octave_map
Jaroslav Hajek <highegg@gmail.com>
parents:
10753
diff
changeset
|
428 octave_map page (octave_idx_type k) const; |
6ba7937a6fa4
more array-like methods in octave_map
Jaroslav Hajek <highegg@gmail.com>
parents:
10753
diff
changeset
|
429 |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
430 void assign (const idx_vector& i, const octave_map& rhs); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
431 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
432 void assign (const idx_vector& i, const idx_vector& j, const octave_map& rhs); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
433 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
434 void assign (const Array<idx_vector>& ia, const octave_map& rhs); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
435 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
436 void assign (const octave_value_list&, const octave_map& rhs); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
437 |
10749
df1a3e0ebbff
important fixes for struct rewrite(1)
Jaroslav Hajek <highegg@gmail.com>
parents:
10747
diff
changeset
|
438 void assign (const octave_value_list& idx, const std::string& k, |
df1a3e0ebbff
important fixes for struct rewrite(1)
Jaroslav Hajek <highegg@gmail.com>
parents:
10747
diff
changeset
|
439 const Cell& rhs); |
df1a3e0ebbff
important fixes for struct rewrite(1)
Jaroslav Hajek <highegg@gmail.com>
parents:
10747
diff
changeset
|
440 |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
441 void delete_elements (const idx_vector& i); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
442 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
443 void delete_elements (int dim, const idx_vector& i); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
444 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
445 void delete_elements (const Array<idx_vector>& ia); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
446 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
447 void delete_elements (const octave_value_list&); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
448 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
449 octave_map concat (const octave_map& rb, const Array<octave_idx_type>& ra_idx); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
450 |
10760
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10757
diff
changeset
|
451 // like checkelem, but no check. |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10757
diff
changeset
|
452 octave_scalar_map fast_elem_extract (octave_idx_type n) const; |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10757
diff
changeset
|
453 |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10757
diff
changeset
|
454 // element assignment, no bounds check |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10757
diff
changeset
|
455 bool fast_elem_insert (octave_idx_type n, const octave_scalar_map& rhs); |
76079e505f9d
optimize cellfun with uniform struct output
Jaroslav Hajek <highegg@gmail.com>
parents:
10757
diff
changeset
|
456 |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
457 private: |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
458 |
10746
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
459 octave_fields xkeys; |
93422177b697
more octave_map compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
10744
diff
changeset
|
460 std::vector<Cell> xvals; |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
461 dim_vector dimensions; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
462 |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
463 void optimize_dimensions (void); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
464 void extract_scalar (octave_scalar_map& dest, |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
465 octave_idx_type index) const; |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
466 static void do_cat (int dim, octave_idx_type n, |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
467 const octave_scalar_map *map_list, octave_map& retval); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
468 static void do_cat (int dim, octave_idx_type n, |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
469 const octave_map *map_list, octave_map& retval); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
470 }; |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
471 |
10757
1cc44f3ec814
templated extractors for maps and cells
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
472 template<> |
1cc44f3ec814
templated extractors for maps and cells
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
473 inline octave_map octave_value_extract<octave_map> (const octave_value& v) |
1cc44f3ec814
templated extractors for maps and cells
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
474 { return v.map_value (); } |
1cc44f3ec814
templated extractors for maps and cells
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
475 |
16874
f160f9029b4e
Add deprecated compiler flag to Octave_map class.
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
476 // The original Octave_map object which is now deprecated. |
16972
45afabc5f7c8
NEWS: Add note about deprecation of class Octave_map.
Rik <rik@octave.org>
parents:
16892
diff
changeset
|
477 // It was fully deprecated in version 3.8 and should be removed in 3.12. |
16874
f160f9029b4e
Add deprecated compiler flag to Octave_map class.
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
478 // Octave_map and octave_map are convertible to each other. |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
479 |
746 | 480 class |
6109 | 481 OCTINTERP_API |
3931 | 482 Octave_map |
746 | 483 { |
484 public: | |
4219 | 485 |
4513 | 486 typedef std::map<std::string, Cell>::iterator iterator; |
487 typedef std::map<std::string, Cell>::const_iterator const_iterator; | |
4219 | 488 |
5880 | 489 typedef std::list<std::string>::iterator key_list_iterator; |
490 typedef std::list<std::string>::const_iterator const_key_list_iterator; | |
491 | |
4744 | 492 // Warning! You should always use at least two dimensions. |
493 | |
5880 | 494 Octave_map (const dim_vector& dv = dim_vector (0, 0), |
10313 | 495 const Cell& key_vals = Cell ()); |
746 | 496 |
4587 | 497 Octave_map (const std::string& k, const octave_value& value) |
5880 | 498 : map (), key_list (), dimensions (1, 1) |
499 { | |
500 map[k] = value; | |
501 key_list.push_back (k); | |
502 } | |
4513 | 503 |
10333
0c42b6b7da24
imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents:
10313
diff
changeset
|
504 Octave_map (const string_vector& sv, |
0c42b6b7da24
imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents:
10313
diff
changeset
|
505 const dim_vector& dv = dim_vector (0, 0)) |
0c42b6b7da24
imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents:
10313
diff
changeset
|
506 : map (), key_list (), dimensions (dv) |
8785
70f5a0375afd
oct-map.h: fix think-o in previous change
John W. Eaton <jwe@octave.org>
parents:
8679
diff
changeset
|
507 { |
70f5a0375afd
oct-map.h: fix think-o in previous change
John W. Eaton <jwe@octave.org>
parents:
8679
diff
changeset
|
508 for (octave_idx_type i = 0; i < sv.length (); i++) |
70f5a0375afd
oct-map.h: fix think-o in previous change
John W. Eaton <jwe@octave.org>
parents:
8679
diff
changeset
|
509 { |
10313 | 510 std::string k = sv[i]; |
10333
0c42b6b7da24
imfinfo: support image files with multiple frames
Søren Hauberg <soren@hauberg.org>
parents:
10313
diff
changeset
|
511 map[k] = Cell (dv); |
10313 | 512 key_list.push_back (k); |
8785
70f5a0375afd
oct-map.h: fix think-o in previous change
John W. Eaton <jwe@octave.org>
parents:
8679
diff
changeset
|
513 } |
70f5a0375afd
oct-map.h: fix think-o in previous change
John W. Eaton <jwe@octave.org>
parents:
8679
diff
changeset
|
514 } |
70f5a0375afd
oct-map.h: fix think-o in previous change
John W. Eaton <jwe@octave.org>
parents:
8679
diff
changeset
|
515 |
4587 | 516 Octave_map (const std::string& k, const Cell& vals) |
5880 | 517 : map (), key_list (), dimensions (vals.dims ()) |
518 { | |
519 map[k] = vals; | |
520 key_list.push_back (k); | |
521 } | |
746 | 522 |
4587 | 523 Octave_map (const std::string& k, const octave_value_list& val_list) |
5880 | 524 : map (), key_list (), dimensions (1, val_list.length ()) |
525 { | |
526 map[k] = val_list; | |
527 key_list.push_back (k); | |
528 } | |
4435 | 529 |
5880 | 530 Octave_map (const Octave_map& m) |
531 : map (m.map), key_list (m.key_list), dimensions (m.dimensions) { } | |
3931 | 532 |
10742
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
533 Octave_map (const octave_map& m); |
604e13a89c7f
initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents:
10333
diff
changeset
|
534 |
3931 | 535 Octave_map& operator = (const Octave_map& m) |
536 { | |
537 if (this != &m) | |
10313 | 538 { |
539 map = m.map; | |
540 key_list = m.key_list; | |
541 dimensions = m.dimensions; | |
542 } | |
4561 | 543 |
3931 | 544 return *this; |
545 } | |
746 | 546 |
547 ~Octave_map (void) { } | |
1279 | 548 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
549 Octave_map squeeze (void) const; |
7046 | 550 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
551 Octave_map permute (const Array<int>& vec, bool inv = false) const; |
7046 | 552 |
3932 | 553 // This is the number of keys. |
6639 | 554 octave_idx_type nfields (void) const { return map.size (); } |
3931 | 555 |
4587 | 556 void del (const std::string& k) |
4219 | 557 { |
4587 | 558 iterator p = map.find (k); |
5881 | 559 |
4219 | 560 if (p != map.end ()) |
10313 | 561 { |
562 map.erase (p); | |
5880 | 563 |
10313 | 564 key_list_iterator q |
565 = std::find (key_list.begin (), key_list.end (), k); | |
5881 | 566 |
10313 | 567 assert (q != key_list.end ()); |
5881 | 568 |
10313 | 569 key_list.erase (q); |
570 } | |
4219 | 571 } |
3931 | 572 |
4219 | 573 iterator begin (void) { return iterator (map.begin ()); } |
574 const_iterator begin (void) const { return const_iterator (map.begin ()); } | |
575 | |
576 iterator end (void) { return iterator (map.end ()); } | |
577 const_iterator end (void) const { return const_iterator (map.end ()); } | |
3931 | 578 |
4219 | 579 std::string key (const_iterator p) const { return p->first; } |
3931 | 580 |
5328 | 581 Cell& contents (const std::string& k); |
4675 | 582 Cell contents (const std::string& k) const; |
3931 | 583 |
9129
17a3df1d992b
avoid double lookups when iterating Octave_map
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
584 Cell& contents (iterator p) |
17a3df1d992b
avoid double lookups when iterating Octave_map
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
585 { return p->second; } |
5328 | 586 |
4513 | 587 Cell contents (const_iterator p) const |
9129
17a3df1d992b
avoid double lookups when iterating Octave_map
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
588 { return p->second; } |
3931 | 589 |
5156 | 590 int intfield (const std::string& k, int def_val = 0) const; |
591 | |
592 std::string stringfield (const std::string& k, | |
10313 | 593 const std::string& def_val = std::string ()) const; |
5156 | 594 |
5328 | 595 iterator seek (const std::string& k) { return map.find (k); } |
4587 | 596 const_iterator seek (const std::string& k) const { return map.find (k); } |
4219 | 597 |
4817 | 598 bool contains (const std::string& k) const |
4587 | 599 { return (seek (k) != map.end ()); } |
3931 | 600 |
5925 | 601 void clear (void) |
602 { | |
603 map.clear (); | |
604 key_list.clear (); | |
605 } | |
3931 | 606 |
3933 | 607 string_vector keys (void) const; |
3931 | 608 |
5275 | 609 octave_idx_type rows (void) const { return dimensions(0); } |
4561 | 610 |
5275 | 611 octave_idx_type columns (void) const { return dimensions(1); } |
4200 | 612 |
4561 | 613 dim_vector dims (void) const { return dimensions; } |
4200 | 614 |
5435 | 615 int ndims (void) const { return dimensions.length (); } |
616 | |
5571 | 617 Octave_map transpose (void) const; |
618 | |
4567 | 619 Octave_map reshape (const dim_vector& new_dims) const; |
620 | |
5781 | 621 void resize (const dim_vector& dv, bool fill = false); |
4936 | 622 |
6639 | 623 octave_idx_type numel (void) const { return dimensions.numel (); } |
3932 | 624 |
5275 | 625 Octave_map concat (const Octave_map& rb, const Array<octave_idx_type>& ra_idx); |
4806 | 626 |
5592 | 627 Octave_map& maybe_delete_elements (const octave_value_list& idx); |
628 | |
4513 | 629 Octave_map& assign (const octave_value_list& idx, const Octave_map& rhs); |
4197 | 630 |
4587 | 631 Octave_map& assign (const octave_value_list& idx, const std::string& k, |
10313 | 632 const Cell& rhs); |
3932 | 633 |
4675 | 634 Octave_map& assign (const std::string& k, const octave_value& rhs); |
635 | |
4587 | 636 Octave_map& assign (const std::string& k, const Cell& rhs); |
3933 | 637 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
638 Octave_map index (const octave_value_list& idx, |
10313 | 639 bool resize_ok = false) const; |
7046 | 640 |
3931 | 641 private: |
642 | |
643 // The map of names to values. | |
4513 | 644 std::map<std::string, Cell> map; |
3932 | 645 |
5880 | 646 // An extra list of keys, so we can keep track of the order the keys |
647 // are added for compatibility with you know what. | |
648 std::list<std::string> key_list; | |
649 | |
4561 | 650 // The current size. |
651 mutable dim_vector dimensions; | |
5880 | 652 |
653 void maybe_add_to_key_list (const std::string& k) | |
5925 | 654 { |
655 if (! contains (k)) | |
10313 | 656 key_list.push_back (k); |
5925 | 657 } |
16874
f160f9029b4e
Add deprecated compiler flag to Octave_map class.
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
658 } GCC_ATTR_DEPRECATED; |
746 | 659 |
660 #endif |