Mercurial > octave
annotate scripts/+containers/Map.m @ 23565:3a730821e4a2
doc: Peridoc grammarcheck of documentation.
* container.txi, external.txi, install.txi, oop.txi, plot.txi, testfun.txi,
eig.cc, graphics.cc, gsvd.cc, hex2num.cc, pr-output.cc, sub2ind.cc,
__ode15__.cc, Map.m, __publish_html_output__.m, __publish_latex_output__.m,
odeset.m, ode_event_handler.m, runge_kutta_45_dorpri.m, xlim.m, ylim.m, zlim.m,
hgtransform.m, eigs.m, native2unicode.m, unicode2native.m:
grammarcheck documentation.
author | Rik <rik@octave.org> |
---|---|
date | Thu, 08 Jun 2017 17:41:32 -0700 |
parents | 5970860bc70c |
children | f9a33c3925a2 |
rev | line source |
---|---|
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
1 ## Copyright (C) 2017 Guillaume Flandin |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
2 ## |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
3 ## This file is part of Octave. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
4 ## |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
5 ## Octave is free software; you can redistribute it and/or modify it |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
6 ## under the terms of the GNU General Public License as published by |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
7 ## the Free Software Foundation; either version 3 of the License, or |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
8 ## (at your option) any later version. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
9 ## |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
10 ## Octave is distributed in the hope that it will be useful, but |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
13 ## GNU General Public License for more details. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
14 ## |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
15 ## You should have received a copy of the GNU General Public License |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
16 ## along with Octave; see the file COPYING. If not, see |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
17 ## <http://www.gnu.org/licenses/>. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
18 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
19 ## -*- texinfo -*- |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
20 ## @deftypefn {} {@var{m} =} containers.Map () |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
21 ## @deftypefnx {} {@var{m} =} containers.Map (@var{keys}, @var{vals}) |
23397 | 22 ## @deftypefnx {} {@var{m} =} containers.Map (@var{keys}, @var{vals}, @qcode{"UniformValues"}, @var{is_uniform}) |
23 ## @deftypefnx {} {@var{m} =} containers.Map (@qcode{"KeyType"}, @var{kt}, @qcode{"ValueType"}, @var{vt}) | |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
24 ## |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
25 ## Create an object of the containers.Map class that stores a list of key/value |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
26 ## pairs. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
27 ## |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
28 ## @var{keys} is an array of @emph{unique} keys for the map. The keys can be |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
29 ## numeric scalars or strings. The type for numeric keys may be one of |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
30 ## @qcode{"double"}, @qcode{"single"}, @qcode{"int32"}, @qcode{"uint32"}, |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
31 ## @qcode{"int64"}, or @qcode{"uint64"}. Other numeric or logical keys will |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
32 ## be converted to @qcode{"double"}. A single string key may be entered as is. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
33 ## Multiple string keys are entered as a cell array of strings. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
34 ## |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
35 ## @var{vals} is an array of values for the map with the @emph{same} number |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
36 ## of elements as @var{keys}. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
37 ## |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
38 ## When called with no input arguments a default map is created with strings |
23397 | 39 ## as the key type and @qcode{"any"} as the value type. |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
40 ## |
23565
3a730821e4a2
doc: Peridoc grammarcheck of documentation.
Rik <rik@octave.org>
parents:
23397
diff
changeset
|
41 ## The @qcode{"UniformValues"} option specifies whether the values of |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
42 ## the map must be strictly of the same type. If @var{is_uniform} is true, any |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
43 ## values which would be added to the map are first validated to ensure they |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
44 ## are of the correct type. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
45 ## |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
46 ## When called with @qcode{"KeyType"} and @qcode{"ValueType"} arguments, create |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
47 ## an empty map with the specified types. The inputs @var{kt} and @var{vt} are |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
48 ## the types for the keys and values of the map respectively. Allowed values |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
49 ## for @var{kt} are @qcode{"char"}, @qcode{"double"}, @qcode{"single"}, |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
50 ## @qcode{"int32"}, @qcode{"uint32"}, @qcode{"int64"}, @qcode{"uint64"}. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
51 ## Allowed values for @var{vt} are @qcode{"any"}, @qcode{"char"}, |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
52 ## @qcode{"double"}, @qcode{"single"}, @qcode{"int32"}, @qcode{"uint32"}, |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
53 ## @qcode{"int64"}, @qcode{"uint64"}, @qcode{"logical"}. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
54 ## |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
55 ## The return value @var{m} is an object of the containers.Map class. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
56 ## @seealso{struct} |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
57 ## @end deftypefn |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
58 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
59 ## -*- texinfo -*- |
23397 | 60 ## @deftypefn {} {@var{n} =} Map.Count () |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
61 ## Return the number of key/value pairs in the map, as a uint64. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
62 ## @end deftypefn |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
63 ## |
23397 | 64 ## @deftypefn {} {@var{type} =} Map.KeyType () |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
65 ## Return the key type. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
66 ## |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
67 ## Possible values are listed above when describing input variable @var{kt}. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
68 ## @end deftypefn |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
69 ## |
23397 | 70 ## @deftypefn {} {@var{type} =} Map.ValueType () |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
71 ## Return the value type. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
72 ## |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
73 ## Possible values are listed above when describing input variable @var{vt}. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
74 ## @end deftypefn |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
75 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
76 ## -*- texinfo -*- |
23397 | 77 ## @deftypefn {} {@var{mask} =} Map.isKey (@var{keySet}) |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
78 ## Return a logical array which is true where the elements of @var{keySet} are |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
79 ## keys of the map and false otherwise. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
80 ## |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
81 ## @var{keySet} is a cell array of keys. If a single key is being checked, it |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
82 ## can be entered directly as a scalar value or a char vector. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
83 ## @end deftypefn |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
84 ## |
23397 | 85 ## @deftypefn {} {@var{keys} =} Map.keys () |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
86 ## Return the sorted list of all keys of the map as a cell vector. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
87 ## @end deftypefn |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
88 ## |
23397 | 89 ## @deftypefn {} {@var{n} =} Map.length () |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
90 ## Return the number of key/value pairs in the map. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
91 ## @end deftypefn |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
92 ## |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
93 ## @deftypefn {} {} Map.remove (@var{keySet}) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
94 ## Remove the list of key/value pairs specified by a cell array of keys |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
95 ## @var{keySet} from the map. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
96 ## |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
97 ## @var{keySet}) can also be a scalar value or a string when specifying a |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
98 ## single key. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
99 ## @end deftypefn |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
100 ## |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
101 ## @deftypefn {} {@var{l} =} Map.size (@var{n}) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
102 ## @deftypefnx {} {@var{sz} =} Map.size () |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
103 ## @deftypefnx {} {@var{dim_1}, @dots{}, @var{dim_n} =} Map.size () |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
104 ## If @var{n} is 1, return the number of key/value pairs in the map, otherwise |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
105 ## return 1. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
106 ## Without input arguments, return vector @code{[@var{l}, 1]} where @var{l} is |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
107 ## the number of key/value pairs in the map. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
108 ## With multiple outputs, return @code{[@var{l}, @dots{}, 1]}. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
109 ## @end deftypefn |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
110 ## |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
111 ## @deftypefn {} {@var{val} =} Map.values () |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
112 ## @deftypefnx {} {@var{val} =} Map.values (@var{keySet}) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
113 ## Return the list of all the values stored in the map as a cell vector. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
114 ## |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
115 ## If @var{keySet}, a cell array of keys is provided, the corresponding |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
116 ## values will be returned. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
117 ## @end deftypefn |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
118 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
119 classdef Map < handle |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
120 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
121 properties (GetAccess = public, SetAccess = private) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
122 KeyType = "char"; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
123 ValueType = "any"; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
124 endproperties |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
125 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
126 properties (Dependent, SetAccess = protected) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
127 Count = 0; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
128 endproperties |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
129 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
130 properties (private) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
131 map = struct (); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
132 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
133 numeric_keys = false; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
134 endproperties |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
135 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
136 methods (Access = public) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
137 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
138 function this = Map (varargin) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
139 if (nargin == 0) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
140 ## Empty object with "char" key type and "any" value type. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
141 elseif (nargin == 2 || |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
142 (nargin == 4 && strcmpi (varargin{3}, "UniformValues"))) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
143 ## Get Map keys |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
144 keys = varargin{1}; |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
145 if (isempty (keys)) |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
146 error ("containers.Map: empty keys are not allowed"); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
147 endif |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
148 if (! iscell (keys)) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
149 if (isnumeric (keys) || islogical (keys)) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
150 keys = num2cell (keys); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
151 else |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
152 keys = { keys }; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
153 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
154 endif |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
155 keys = keys(:); # Use Nx1 column vector to simplify calls to all() |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
156 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
157 ## Get Map values |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
158 vals = varargin{2}; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
159 if (! iscell (vals)) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
160 if ((isnumeric (vals) || islogical (vals)) && ! isscalar (keys)) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
161 vals = num2cell (vals); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
162 else |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
163 vals = { vals }; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
164 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
165 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
166 vals = vals(:); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
167 if (numel (keys) != numel (vals)) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
168 error ("containers.Map: the number of keys and values must match"); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
169 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
170 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
171 ## Determine KeyType |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
172 kt = unique (cellfun (@class, keys, "UniformOutput", false)); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
173 if (numel (kt) == 1) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
174 ## Single key type--most common case |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
175 if (strcmp (kt{1}, "char")) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
176 ## String is most common key type |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
177 else |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
178 if (! all (cellfun ("isreal", keys) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
179 & (cellfun ("numel", keys) == 1))) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
180 error ("containers.Map: keys must be real scalar numeric values or char vectors"); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
181 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
182 if (any (strcmp (kt{1}, |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
183 {"logical", "int8", "uint8", "int16", "uint16"}))) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
184 kt = { "double" }; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
185 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
186 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
187 this.KeyType = char (kt); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
188 else |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
189 ## Multiple key types |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
190 if (! all (ismember (kt, {"double", "single", "int8", "uint8", ... |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
191 "int16", "uint16", "int32", "uint32", ... |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
192 "int64", "uint64", "logical"}))) |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
193 error ("containers.Map: when using multiple key types, all types must be numeric"); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
194 else |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
195 warning ("containers.Map: all keys will be converted to double"); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
196 this.KeyType = "double"; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
197 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
198 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
199 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
200 ## Determine ValueType |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
201 vt = unique (cellfun (@class, vals, "UniformOutput", false)); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
202 if (numel (vt) == 1 |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
203 && (ischar (vals{1}) |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
204 || ((isnumeric (vals{1}) || islogical (vals{1})) |
23368
b04466113212
containers.Map: UniformValue requires values be scalars, not just equal size (bug #49559).
Rik <rik@octave.org>
parents:
23366
diff
changeset
|
205 && all (cellfun (@numel, vals) == 1)))) |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
206 this.ValueType = vt{1}; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
207 else |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
208 this.ValueType = "any"; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
209 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
210 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
211 ## Process UniformValues option |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
212 if (nargin == 4) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
213 UniformValues = varargin{4}; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
214 if (! isscalar (UniformValues) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
215 || ! (islogical (UniformValues) || isnumeric (UniformValues))) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
216 error ("containers.Map: 'UniformValues' must be a logical scalar"); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
217 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
218 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
219 if (UniformValues) |
23368
b04466113212
containers.Map: UniformValue requires values be scalars, not just equal size (bug #49559).
Rik <rik@octave.org>
parents:
23366
diff
changeset
|
220 if (numel (vt) > 1 |
b04466113212
containers.Map: UniformValue requires values be scalars, not just equal size (bug #49559).
Rik <rik@octave.org>
parents:
23366
diff
changeset
|
221 || (strcmp (this.ValueType, "any") && isreal (vals{1}))) |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
222 error ("containers.Map: when 'UniformValues' is true, all values must be scalars of the same data type"); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
223 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
224 else |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
225 this.ValueType = "any"; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
226 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
227 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
228 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
229 ## Check type of keys and values, and define numeric_keys |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
230 check_types (this); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
231 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
232 ## Sort keys (faster than call to sort_keys once encoded) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
233 if (this.numeric_keys) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
234 [~, I] = sort (cell2mat (keys)); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
235 else |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
236 [~, I] = sort (keys); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
237 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
238 keys = keys(I); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
239 vals = vals(I); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
240 ## Convert keys to char vectors |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
241 keys = encode_keys (this, keys); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
242 ## Fill in the Map |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
243 this.map = cell2struct (vals, keys); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
244 elseif (nargin == 4) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
245 for i = [1, 3] |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
246 switch (tolower (varargin{i})) |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
247 case "keytype" |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
248 this.KeyType = varargin{i+1}; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
249 case "valuetype" |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
250 this.ValueType = varargin{i+1}; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
251 otherwise |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
252 error ("containers.Map: missing parameter name 'KeyType' or 'ValueType'"); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
253 endswitch |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
254 endfor |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
255 check_types (this); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
256 else |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
257 error ("containers.Map: incorrect number of inputs specified"); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
258 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
259 endfunction |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
260 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
261 function keySet = keys (this) |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
262 keySet = fieldnames (this.map).'; # compatibility requires row vector |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
263 keySet = decode_keys (this, keySet); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
264 endfunction |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
265 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
266 function valueSet = values (this, keySet) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
267 if (nargin == 1) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
268 valueSet = struct2cell (this.map).'; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
269 else |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
270 if (! iscell (keySet)) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
271 error ("containers.Map: input argument 'keySet' must be a cell"); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
272 endif |
23368
b04466113212
containers.Map: UniformValue requires values be scalars, not just equal size (bug #49559).
Rik <rik@octave.org>
parents:
23366
diff
changeset
|
273 enckeySet = encode_keys (this, keySet); |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
274 valueSet = cell (size (keySet)); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
275 for i = 1:numel (valueSet) |
23368
b04466113212
containers.Map: UniformValue requires values be scalars, not just equal size (bug #49559).
Rik <rik@octave.org>
parents:
23366
diff
changeset
|
276 try |
b04466113212
containers.Map: UniformValue requires values be scalars, not just equal size (bug #49559).
Rik <rik@octave.org>
parents:
23366
diff
changeset
|
277 valueSet{i} = this.map.(enckeySet{i}); |
b04466113212
containers.Map: UniformValue requires values be scalars, not just equal size (bug #49559).
Rik <rik@octave.org>
parents:
23366
diff
changeset
|
278 catch |
b04466113212
containers.Map: UniformValue requires values be scalars, not just equal size (bug #49559).
Rik <rik@octave.org>
parents:
23366
diff
changeset
|
279 error ("containers.Map: key <%s> does not exist", |
b04466113212
containers.Map: UniformValue requires values be scalars, not just equal size (bug #49559).
Rik <rik@octave.org>
parents:
23366
diff
changeset
|
280 strtrim (disp (keySet{i}))); |
b04466113212
containers.Map: UniformValue requires values be scalars, not just equal size (bug #49559).
Rik <rik@octave.org>
parents:
23366
diff
changeset
|
281 end_try_catch |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
282 endfor |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
283 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
284 endfunction |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
285 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
286 function tf = isKey (this, keySet) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
287 if (! iscell (keySet)) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
288 if (isnumeric (keySet) || islogical (keySet)) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
289 keySet = num2cell (keySet); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
290 else |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
291 keySet = { keySet }; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
292 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
293 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
294 tf = false (size (keySet)); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
295 in = cellfun ("isnumeric", keySet) | cellfun ("islogical", keySet); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
296 if (! this.numeric_keys) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
297 in = !in; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
298 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
299 keySet = encode_keys (this, keySet(in)); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
300 tf(in) = isfield (this.map, keySet); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
301 endfunction |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
302 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
303 function this = remove (this, keySet) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
304 if (! iscell (keySet)) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
305 if (isnumeric (keySet) || islogical (keySet)) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
306 keySet = num2cell (keySet); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
307 else |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
308 keySet = { keySet }; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
309 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
310 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
311 in = cellfun ("isnumeric", keySet) | cellfun ("islogical", keySet); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
312 if (! this.numeric_keys) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
313 in = !in; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
314 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
315 keySet = encode_keys (this, keySet(in)); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
316 in = isfield (this.map, keySet); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
317 this.map = rmfield (this.map, keySet(in)); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
318 endfunction |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
319 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
320 function varargout = size (this, n) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
321 c = length (this); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
322 if (nargin == 1) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
323 if (nargout <= 1) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
324 varargout = { [c 1] }; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
325 else |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
326 varargout{1} = c; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
327 [varargout{2:nargout}] = deal (1); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
328 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
329 else |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
330 if (n == 1) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
331 varargout = { c }; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
332 else |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
333 varargout = { 1 }; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
334 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
335 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
336 endfunction |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
337 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
338 function len = length (this) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
339 len = double (this.Count); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
340 endfunction |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
341 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
342 function tf = isempty (this) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
343 tf = (this.Count == 0); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
344 endfunction |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
345 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
346 function count = get.Count (this) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
347 count = uint64 (numfields (this.map)); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
348 endfunction |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
349 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
350 function sref = subsref (this, s) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
351 switch (s(1).type) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
352 case "." |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
353 switch (s(1).subs) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
354 case "keys" |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
355 sref = keys (this); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
356 case "values" |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
357 sref = values (this); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
358 case "size" |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
359 sref = size (this); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
360 case "length" |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
361 sref = length (this); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
362 case "isempty" |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
363 sref = isempty (this); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
364 case "Count" |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
365 sref = this.Count; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
366 case "KeyType" |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
367 sref = this.KeyType; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
368 case "ValueType" |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
369 sref = this.ValueType; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
370 case {"isKey", "remove"} |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
371 if (numel (s) < 2 || numel (s(2).subs) != 1) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
372 error ("containers.Map: input argument 'KeySet' is missing"); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
373 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
374 sref = feval (s(1).subs, this, s(2).subs{1}); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
375 s = s(3:end); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
376 otherwise |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
377 error ("containters.Map: unknown property '%s'", s(1).subs); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
378 endswitch |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
379 case "()" |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
380 key = s(1).subs{1}; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
381 if ((! this.numeric_keys && ! ischar (key)) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
382 || (this.numeric_keys && (! (isnumeric (key) || islogical (key)) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
383 || ! isscalar (key)))) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
384 error ("containers.Map: specified key type does not match the type of this container"); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
385 endif |
23368
b04466113212
containers.Map: UniformValue requires values be scalars, not just equal size (bug #49559).
Rik <rik@octave.org>
parents:
23366
diff
changeset
|
386 enckey = encode_keys (this, key); |
b04466113212
containers.Map: UniformValue requires values be scalars, not just equal size (bug #49559).
Rik <rik@octave.org>
parents:
23366
diff
changeset
|
387 if (! isfield (this.map, enckey)) |
b04466113212
containers.Map: UniformValue requires values be scalars, not just equal size (bug #49559).
Rik <rik@octave.org>
parents:
23366
diff
changeset
|
388 error ("containers.Map: specified key <%s> does not exist", |
b04466113212
containers.Map: UniformValue requires values be scalars, not just equal size (bug #49559).
Rik <rik@octave.org>
parents:
23366
diff
changeset
|
389 strtrim (disp (key))); |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
390 endif |
23368
b04466113212
containers.Map: UniformValue requires values be scalars, not just equal size (bug #49559).
Rik <rik@octave.org>
parents:
23366
diff
changeset
|
391 sref = this.map.(enckey); |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
392 otherwise |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
393 error ("containers.Map: only '()' indexing is supported"); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
394 endswitch |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
395 if (numel (s) > 1) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
396 sref = subsref (sref, s(2:end)); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
397 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
398 endfunction |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
399 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
400 function this = subsasgn (this, s, val) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
401 if (numel (s) > 1) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
402 error ("containers.Map: only one level of indexing is supported"); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
403 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
404 switch (s(1).type) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
405 case "." |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
406 error ("containers.Map: properties are read-only"); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
407 case "()" |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
408 key = s(1).subs{1}; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
409 if ((! this.numeric_keys && ! ischar (key)) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
410 || (this.numeric_keys && (! (isnumeric (key) || islogical (key)) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
411 || ! isscalar (key)))) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
412 error ("containers.Map: specified key type does not match the type of this container"); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
413 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
414 if (! strcmp (this.ValueType, "any")) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
415 if ((strcmp (this.ValueType, "char") && ! ischar (val)) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
416 || (! strcmp (this.ValueType, "char") |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
417 && (! (isnumeric (val) || islogical (val)) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
418 || ! isscalar (val)))) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
419 error ("containers.Map: specified value type does not match the type of this container"); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
420 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
421 val = feval (this.ValueType, val); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
422 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
423 key = encode_keys (this, key); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
424 if (isfield (this.map, key)) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
425 this.map.(key) = val; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
426 else |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
427 this.map.(key) = val; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
428 this = sort_keys (this); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
429 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
430 case "{}" |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
431 error ("containers.Map: only '()' indexing is supported for assigning values"); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
432 endswitch |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
433 endfunction |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
434 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
435 function newobj = horzcat (varargin) |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
436 warning ("Octave:language-extension", |
23396
945b53af4655
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
23368
diff
changeset
|
437 "containers.Map: horizontal concatenation is an Octave-only feature"); |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
438 newobj = vertcat (varargin{:}); |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
439 endfunction |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
440 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
441 function newobj = vertcat (varargin) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
442 ## When concatenating maps, the data type of all values must be |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
443 ## consistent with the ValueType of the leftmost map. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
444 keySet = cell (1, 0); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
445 for i = 1:numel (varargin) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
446 keySet = [keySet, keys(varargin{i})]; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
447 endfor |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
448 valueSet = cell (1, 0); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
449 for i = 1:numel (varargin) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
450 valueSet = [valueSet, values(varargin{i})]; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
451 endfor |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
452 newobj = containers.Map (keySet, valueSet); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
453 endfunction |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
454 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
455 function disp (this) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
456 printf (" containers.Map object with properties:\n\n"); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
457 printf ([" Count : %d\n" ... |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
458 " KeyType : %s\n" ... |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
459 " ValueType : %s\n\n"], |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
460 this.Count, this.KeyType, this.ValueType); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
461 endfunction |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
462 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
463 endmethods |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
464 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
465 methods (Access = private) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
466 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
467 ## All keys are encoded as strings. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
468 ## For numeric keys, this requires conversion. |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
469 function keys = encode_keys (this, keys) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
470 if (iscellstr (keys) || ischar (keys)) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
471 return; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
472 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
473 cell_input = iscell (keys); |
23353
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
474 if (cell_input) |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
475 orig_sz = size (keys); |
23353
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
476 if (! all (cellfun ("isclass", keys, this.KeyType))) |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
477 ## Convert input set to KeyType. This is rarely necessary. |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
478 keys = cellfun (@(x) feval (this.KeyType, x), keys); |
23353
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
479 else |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
480 keys = cell2mat (keys); |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
481 endif |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
482 endif |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
483 keys = num2hex (keys); # Force to char matrix with single logical column |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
484 if (cell_input) |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
485 keys = reshape (cellstr (keys), orig_sz); |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
486 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
487 endfunction |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
488 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
489 function keys = decode_keys (this, keys) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
490 if (this.numeric_keys) |
23358
42bd10feedfa
use new hex2num and num2hex features to simplify +containers.Map key encoding
John W. Eaton <jwe@octave.org>
parents:
23357
diff
changeset
|
491 keys = hex2num (keys, this.KeyType); |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
492 ## This always returns a 1xN list of keys ignoring input shape |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
493 keys = mat2cell (keys(:).', 1, ones (1, numel (keys))); |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
494 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
495 endfunction |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
496 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
497 function this = sort_keys (this) |
23357 | 498 keySet = keys (this); |
499 if (this.numeric_keys) | |
500 [~, p] = sort (cell2mat (keySet)); | |
501 else | |
502 [~, p] = sort (keySet); | |
503 endif | |
504 this.map = orderfields (this.map, p); | |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
505 endfunction |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
506 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
507 function check_types (this) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
508 switch (this.KeyType) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
509 case {"char"} |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
510 this.numeric_keys = false; |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
511 case {"double", "single", "int32", "uint32", "int64", "uint64"} |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
512 this.numeric_keys = true; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
513 otherwise |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
514 error ("containers.Map: unsupported KeyType"); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
515 endswitch |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
516 |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
517 if (! any (strcmp (this.ValueType, {"any"; "char"; "logical"; |
23396
945b53af4655
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
23368
diff
changeset
|
518 "double"; "single"; |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
519 "int8"; "uint8"; "int16"; "uint16"; |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
520 "int32"; "uint32"; |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
521 "int64"; "uint64"}))) |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
522 error ("containers.Map: unsupported ValueType"); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
523 endif |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
524 endfunction |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
525 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
526 endmethods |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
527 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
528 endclassdef |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
529 |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
530 |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
531 ## Test empty Map |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
532 %!test |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
533 %! m = containers.Map (); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
534 %! assert (m.Count, uint64 (0)); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
535 %! assert (length (m), 0); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
536 %! assert (size (m, 1), 0); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
537 %! assert (size (m, 2), 1); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
538 %! assert (isempty (m)); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
539 %! assert (isempty (keys (m))); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
540 %! assert (isempty (values (m))); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
541 %! assert (isKey (m, "Octave"), false); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
542 %! assert (isKey (m, 42), false); |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
543 %! assert (isKey (m, {"Octave", 42}), [false, false]); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
544 %! assert (isKey (m, {"Octave"; 42}), [false; false]); |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
545 |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
546 ## Test string keys |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
547 %!test |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
548 %! key = {"One", "Two", "Three", "Four"}; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
549 %! val = [1, 2, 3, 4]; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
550 %! m = containers.Map (key, val); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
551 %! assert (m.KeyType, "char"); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
552 %! assert (m.ValueType, "double"); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
553 %! assert (m.Count, uint64 (4)); |
23357 | 554 %! assert (iscell (keys (m))); |
555 %! assert (iscell (values (m))); | |
556 %! assert (size (keys (m)), [1, 4]); | |
557 %! assert (size (values (m)), [1, 4]); | |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
558 %! assert (m("Two"), 2); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
559 %! m("Five") = 5; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
560 %! key2 = {"Six", "Seven", "Eight"}; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
561 %! val2 = [6, 7, 8]; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
562 %! m2 = containers.Map (key2, val2); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
563 %! m = [m; m2]; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
564 %! assert (m.Count, uint64 (8)); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
565 %! k = keys (m); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
566 %! assert (isempty (setdiff (k, [key, "Five", key2]))); |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
567 %! v = values (m, {"Three", "Four"; "Five", "Six"}); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
568 %! assert (v, {3, 4; 5, 6}); |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
569 %! remove (m, {"Three", "Four"}); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
570 %! k = keys (m); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
571 %! assert (numel (k), 6); |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
572 %! assert (m.isKey({"One", "Four"; "Ten", "Five"}), [true,false; false,true]); |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
573 |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
574 ## Test numeric keys |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
575 %!test |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
576 %! key = [1, 2, 3, 4]; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
577 %! val = {"One", "Two", "Three", "Four"}; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
578 %! m = containers.Map (key, val); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
579 %! assert (m.KeyType, "double"); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
580 %! assert (m.ValueType, "char"); |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
581 %! assert (iscell (keys (m))); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
582 %! assert (iscell (values (m))); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
583 %! assert (size (keys (m)), [1, 4]); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
584 %! assert (size (values (m)), [1, 4]); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
585 %! assert (m(2), "Two"); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
586 %! m(5) = "Five"; |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
587 %! key2 = [6, 7, 8]; |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
588 %! val2 = {"Six", "Seven", "Eight"}; |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
589 %! m2 = containers.Map (key2, val2); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
590 %! m = [m; m2]; |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
591 %! assert (m.Count, uint64 (8)); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
592 %! k = keys (m); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
593 %! assert (isempty (setdiff (cell2mat (k), [key, 5, key2]))); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
594 %! v = values (m, {3, 4; 5, 6}); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
595 %! assert (v, {"Three", "Four"; "Five", "Six"}); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
596 %! remove (m, {3, 4}); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
597 %! k = keys (m); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
598 %! assert (numel (k), 6); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
599 %! assert (m.isKey({1, 4; 10, 5}), [true,false; false,true]); |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
600 |
23368
b04466113212
containers.Map: UniformValue requires values be scalars, not just equal size (bug #49559).
Rik <rik@octave.org>
parents:
23366
diff
changeset
|
601 ## Test that non-scalar objects force ValueType to "any" |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
602 %!test |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
603 %! key = [2, 3, 4]; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
604 %! val = {eye(2), eye(3), eye(4)}; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
605 %! m = containers.Map (key, val); |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
606 %! assert (m(3), eye (3)); |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
607 %! assert (m(2)(2,2), 1); |
23357 | 608 %! assert (m.KeyType, "double"); |
609 %! assert (m.ValueType, "any"); | |
23368
b04466113212
containers.Map: UniformValue requires values be scalars, not just equal size (bug #49559).
Rik <rik@octave.org>
parents:
23366
diff
changeset
|
610 %! key = [2, 3, 4]; |
b04466113212
containers.Map: UniformValue requires values be scalars, not just equal size (bug #49559).
Rik <rik@octave.org>
parents:
23366
diff
changeset
|
611 %! val = {2, 3, [4 5]}; |
b04466113212
containers.Map: UniformValue requires values be scalars, not just equal size (bug #49559).
Rik <rik@octave.org>
parents:
23366
diff
changeset
|
612 %! m = containers.Map (key, val); |
b04466113212
containers.Map: UniformValue requires values be scalars, not just equal size (bug #49559).
Rik <rik@octave.org>
parents:
23366
diff
changeset
|
613 %! assert (m.KeyType, "double"); |
b04466113212
containers.Map: UniformValue requires values be scalars, not just equal size (bug #49559).
Rik <rik@octave.org>
parents:
23366
diff
changeset
|
614 %! assert (m.ValueType, "any"); |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
615 |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
616 ## Test that mixed object types force ValueType to "any" |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
617 %!test |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
618 %! key = [2, 3, 4]; |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
619 %! val = {double(1), single(2), uint8(3)}; |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
620 %! m = containers.Map (key, val); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
621 %! assert (m.KeyType, "double"); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
622 %! assert (m.ValueType, "any"); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
623 %! assert (class (m(4)), "uint8"); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
624 %! assert (class (m(3)), "single"); |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
625 |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
626 ## Test that non-numeric, non-char object types force ValueType to "any" |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
627 %!test |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
628 %! key = {"a", "b"}; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
629 %! val = {struct(), struct()}; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
630 %! m = containers.Map (key, val); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
631 %! assert (m.ValueType, "any"); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
632 %! m = containers.Map (key, val, "UniformValues", true); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
633 %! assert (m.ValueType, "any"); |
23357 | 634 %! m = containers.Map (key, {1, 2i}); |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
635 %! assert (m.ValueType, "double"); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
636 |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
637 ## Test "UniformValues" input |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
638 %!test |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
639 %! key = {"one", "two", "three"}; |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
640 %! val = {1, 2, 3}; |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
641 %! m = containers.Map (key, val, "UniformValues",false); |
23357 | 642 %! assert (m.ValueType, "any"); |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
643 %! m("four") = "GNU"; |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
644 %! assert (values (m), {"GNU", 1, 3, 2}); |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
645 |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
646 ## Test 4-input form of Map |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
647 %!test |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
648 %! m = containers.Map ("KeyType","char", "ValueType","int32"); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
649 %! assert (m.KeyType, "char"); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
650 %! assert (m.ValueType, "int32"); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
651 %! assert (m.Count, uint64 (0)); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
652 %! assert (isempty (m)); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
653 |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
654 ## Test all allowable key types |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
655 %!test |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
656 %! key = [2, 3, 4]; |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
657 %! val = {2, 3, 4}; |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
658 %! types = {"double", "single", "int32", "uint32", "int64", "uint64"}; |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
659 %! for type = types |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
660 %! type = type{1}; |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
661 %! k = feval (type, key); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
662 %! m = containers.Map (k, val); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
663 %! assert (m.KeyType, type); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
664 %! assert (isa (keys (m){1}, type)); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
665 %! endfor |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
666 %! assert (all (isKey (m, keys (m)))); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
667 |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
668 ## Test that other numeric key types are converted to double |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
669 %!test |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
670 %! key = [0, 1]; |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
671 %! val = {1, 2}; |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
672 %! types = {"logical", "int8", "uint8", "int16", "uint16"}; |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
673 %! for type = types |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
674 %! type = type{1}; |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
675 %! k = feval (type, key); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
676 %! m = containers.Map (k, val); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
677 %! assert (m.KeyType, "double"); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
678 %! assert (isa (keys (m){1}, "double")); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
679 %! endfor |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
680 %! assert (all (isKey (m, keys (m)))); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
681 |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
682 ## Test removal of keys |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
683 %!test |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
684 %! m = containers.Map ({"a","b","c"}, {1,2,3}); |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
685 %! assert (m.isKey ("a"), true); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
686 %! assert (m.isKey ({"a","d"}), [true, false]); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
687 %! m.remove ("a"); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
688 %! m.remove ({"b","c"}); |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
689 %! assert (isempty (m)); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
690 |
23353
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
691 ## Ensure that exact key values are preserved. |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
692 %!test |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
693 %! keytypes = {"int32", "int64", "uint32", "uint64"}; |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
694 %! for keytype = keytypes |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
695 %! keytype = keytype{1}; |
23353
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
696 %! key = intmax (keytype); |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
697 %! m = containers.Map (key, pi); |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
698 %! assert (m.isKey (key)); |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
699 %! assert (m.keys (), {key}); |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
700 %! key = intmin (keytype); |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
701 %! m = containers.Map (key, pi); |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
702 %! assert (m.isKey (key)); |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
703 %! assert (m.keys (), {key}); |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
704 %! endfor |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
705 %! keytypes = {"double", "single"}; |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
706 %! for i = 1:numel (keytypes) |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
707 %! keytype = keytypes{i}; |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
708 %! key = realmax (keytype); |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
709 %! m = containers.Map (key, pi); |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
710 %! assert (m.isKey (key)); |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
711 %! assert (m.keys (), {key}); |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
712 %! key = realmin (keytype); |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
713 %! m = containers.Map (key, pi); |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
714 %! assert (m.isKey (key)); |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
715 %! assert (m.keys (), {key}); |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
716 %! key = -realmax (keytype); |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
717 %! m = containers.Map (key, pi); |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
718 %! assert (m.isKey (key)); |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
719 %! assert (m.keys (), {key}); |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
720 %! endfor |
95744d6d7d3b
use hex values for numeric containers.Map keys (bug #49559)
John W. Eaton <jwe@octave.org>
parents:
23348
diff
changeset
|
721 |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
722 ## Test sort order of keys and values |
23357 | 723 %!test |
724 %! key = {"d","a","b"}; | |
725 %! m = containers.Map (key, 1:numel (key)); | |
726 %! assert (keys (m), sort (key)); | |
727 %! assert (values (m), {2, 3, 1}); | |
728 %! m("c") = 4; | |
729 %! assert (keys (m), sort ([key, "c"])); | |
730 %! assert (values (m), {2, 3, 4, 1}); | |
731 %! key = [Inf, 2, 0, -Inf, -1]; | |
732 %! m = containers.Map (key, 1:numel (key)); | |
733 %! assert (keys (m), num2cell (sort (key))); | |
734 %! assert (values (m), {4, 5, 3, 2, 1}); | |
735 %! m(-2) = 6; | |
736 %! assert (keys (m), num2cell (sort ([key, -2]))); | |
737 %! assert (values (m), {4, 6, 5, 3, 2, 1}); | |
738 | |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
739 ## Test horizontal concatenation |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
740 %!test |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
741 %! m1 = containers.Map ("b", 2); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
742 %! m2 = containers.Map ("a", 1); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
743 %! m3 = [m1, m2]; |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
744 %! k = keys (m3); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
745 %! assert (numel (k), 2); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
746 %! assert (k, {"a", "b"}); |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
747 |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
748 ## Test input validation |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
749 %!error containers.Map (1,2,3) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
750 %!error containers.Map (1,2,3,4,5) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
751 %!error <empty keys are not allowed> containers.Map ([], 1) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
752 %!error <number of keys and values must match> containers.Map (1, {2, 3}) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
753 %!error <keys must be real .* values> containers.Map ({{1}}, 2) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
754 %!error <keys must be .* scalar .* values> containers.Map ({magic(3)}, 2) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
755 %!warning <keys .* converted to double> |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
756 %! containers.Map ({1,int8(2)}, {3,4}); |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
757 %!error <when using multiple key types, all types must be numeric> |
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
758 %! containers.Map ({1, {2}}, {3,4}) |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
759 %!error <'UniformValues' must be a logical scalar> |
23366
56c59b3f9172
containers.Map: Fix values fcn, Add BIST tests (bug #49559).
Rik <rik@octave.org>
parents:
23358
diff
changeset
|
760 %! containers.Map (1,2, 'UniformValues', ones (2,2)) |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
761 %!error <'UniformValues' must be a logical scalar> |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
762 %! containers.Map (1,2, 'UniformValues', {true}) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
763 %!error <all values must be scalars of the same data type> |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
764 %! containers.Map ({1,2}, {3, uint32(4)}, "UniformValues", true) |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
765 %!error <missing parameter name 'KeyType'> |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
766 %! containers.Map ("keytype", "char", "vtype", "any") |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
767 %!error <'keySet' must be a cell> |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
768 %! m = containers.Map (); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
769 %! values (m, 1); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
770 %#!error <key .foobar. does not exist> |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
771 %! m = containers.Map (); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
772 %! values (m, "foobar"); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
773 %!error <input argument 'KeySet' is missing> |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
774 %! m = containers.Map (); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
775 %! m.isKey (1,2); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
776 %!error <unknown property 'foobar'> |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
777 %! m = containers.Map (); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
778 %! m.foobar; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
779 %!error <key type does not match the type of this container> |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
780 %! m = containers.Map ("a", 1); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
781 %! m(1); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
782 %!error <specified key .b. does not exist> |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
783 %! m = containers.Map ("a", 1); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
784 %! m("b"); |
23368
b04466113212
containers.Map: UniformValue requires values be scalars, not just equal size (bug #49559).
Rik <rik@octave.org>
parents:
23366
diff
changeset
|
785 %!error <specified key .2. does not exist> |
b04466113212
containers.Map: UniformValue requires values be scalars, not just equal size (bug #49559).
Rik <rik@octave.org>
parents:
23366
diff
changeset
|
786 %! m = containers.Map (1, 1); |
b04466113212
containers.Map: UniformValue requires values be scalars, not just equal size (bug #49559).
Rik <rik@octave.org>
parents:
23366
diff
changeset
|
787 %! m(2); |
23348
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
788 %!error <only '\(\)' indexing is supported> |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
789 %! m = containers.Map ("a", 1); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
790 %! m{1}; |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
791 %!error <unsupported KeyType> |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
792 %! m1 = containers.Map ("KeyType", "cell", "ValueType", "any"); |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
793 %!error <unsupported ValueType> |
5ab7192f91d8
containers.Map: New key/value storage container (bug #49559).
Rik <rik@octave.org>
parents:
diff
changeset
|
794 %! m1 = containers.Map ("KeyType", "char", "ValueType", "cell"); |