Mercurial > repos > public > sbplib
annotate Map.m @ 415:16907bf31e67 feature/better_map
Overload indexing operations.
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Thu, 02 Feb 2017 16:22:47 +0100 |
parents | 50fd7e88aa74 |
children | e97550b5c1e7 |
rev | line source |
---|---|
414
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
1 classdef Map < handle |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
2 properties |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
3 map |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
4 end |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
5 |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
6 % can we support multi map using varargin? |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
7 |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
8 methods |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
9 function obj = Map() |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
10 obj.map = containers.Map() |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
11 end |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
12 |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
13 function set(obj, k, v) |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
14 keyByteStream = getByteStreamFromArray(k); |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
15 |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
16 obj.map(char(keyByteStream)) = v; |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
17 end |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
18 |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
19 function v = get(obj, k) |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
20 keyByteStream = getByteStreamFromArray(k); |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
21 |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
22 v = obj.map(char(keyByteStream)); |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
23 end |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
24 |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
25 function b = isKey(obj, k) |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
26 keyByteStream = getByteStreamFromArray(k); |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
27 b = obj.map.isKey(keyByteStream); |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
28 end |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
29 |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
30 function c = keys(obj) |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
31 keyByteStreams = obj.map.keys; |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
32 |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
33 n = length(keyByteStreams); |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
34 |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
35 c = cell(1, n); |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
36 for i = 1:n |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
37 c{i} = getArrayFromByteStream(uint8(keyByteStreams{i})); |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
38 end |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
39 end |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
40 |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
41 function l = length(obj) |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
42 l = obj.map.length; |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
43 end |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
44 |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
45 function remove(obj, k) |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
46 keyByteStream = getByteStreamFromArray(k); |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
47 obj.map.remove(char(keyByteStream)); |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
48 end |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
49 |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
50 function s = size(obj) |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
51 s = obj.map.size; |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
52 end |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
53 |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
54 function c = values(obj) |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
55 c = obj.map.values; |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
56 end |
415
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
57 |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
58 function v = subsref(obj, S) |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
59 switch S.type |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
60 case '()' |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
61 k = S.subs; |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
62 try |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
63 v = obj.get(k); |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
64 catch ME |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
65 if strcmp(ME.identifier,'MATLAB:Containers:Map:NoKey') |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
66 error('Reference to non-existent entry %s',toString(S.subs)); |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
67 else |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
68 throw(ME); |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
69 end |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
70 end |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
71 otherwise |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
72 v = builtin('subsref', obj, S); |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
73 end |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
74 end |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
75 |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
76 function obj = subsasgn(obj, S, v); |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
77 switch S.type |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
78 case '()' |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
79 k = S.subs; |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
80 obj.set(k, v); |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
81 otherwise |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
82 error('Unsupported indexing operator: %s',S.type); |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
83 end |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
84 end |
414
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
85 end |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
86 end |