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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
5970860bc70c * Map.m: Minor doc fixes.
John W. Eaton <jwe@octave.org>
parents: 23396
diff changeset
22 ## @deftypefnx {} {@var{m} =} containers.Map (@var{keys}, @var{vals}, @qcode{"UniformValues"}, @var{is_uniform})
5970860bc70c * Map.m: Minor doc fixes.
John W. Eaton <jwe@octave.org>
parents: 23396
diff changeset
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
5970860bc70c * Map.m: Minor doc fixes.
John W. Eaton <jwe@octave.org>
parents: 23396
diff changeset
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
5970860bc70c * Map.m: Minor doc fixes.
John W. Eaton <jwe@octave.org>
parents: 23396
diff changeset
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
5970860bc70c * Map.m: Minor doc fixes.
John W. Eaton <jwe@octave.org>
parents: 23396
diff changeset
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
5970860bc70c * Map.m: Minor doc fixes.
John W. Eaton <jwe@octave.org>
parents: 23396
diff changeset
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
5970860bc70c * Map.m: Minor doc fixes.
John W. Eaton <jwe@octave.org>
parents: 23396
diff changeset
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
5970860bc70c * Map.m: Minor doc fixes.
John W. Eaton <jwe@octave.org>
parents: 23396
diff changeset
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
5970860bc70c * Map.m: Minor doc fixes.
John W. Eaton <jwe@octave.org>
parents: 23396
diff changeset
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
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
498 keySet = keys (this);
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
499 if (this.numeric_keys)
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
500 [~, p] = sort (cell2mat (keySet));
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
501 else
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
502 [~, p] = sort (keySet);
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
503 endif
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
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
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
554 %! assert (iscell (keys (m)));
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
555 %! assert (iscell (values (m)));
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
556 %! assert (size (keys (m)), [1, 4]);
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
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
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
608 %! assert (m.KeyType, "double");
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
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
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
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
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
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
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
723 %!test
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
724 %! key = {"d","a","b"};
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
725 %! m = containers.Map (key, 1:numel (key));
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
726 %! assert (keys (m), sort (key));
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
727 %! assert (values (m), {2, 3, 1});
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
728 %! m("c") = 4;
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
729 %! assert (keys (m), sort ([key, "c"]));
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
730 %! assert (values (m), {2, 3, 4, 1});
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
731 %! key = [Inf, 2, 0, -Inf, -1];
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
732 %! m = containers.Map (key, 1:numel (key));
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
733 %! assert (keys (m), num2cell (sort (key)));
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
734 %! assert (values (m), {4, 5, 3, 2, 1});
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
735 %! m(-2) = 6;
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
736 %! assert (keys (m), num2cell (sort ([key, -2])));
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
737 %! assert (values (m), {4, 6, 5, 3, 2, 1});
426b593b4b6b fix key sorting for +containers.Map
Guillaume Flandin
parents: 23353
diff changeset
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");