Mercurial > repos > public > sbplib
annotate Map.m @ 1025:ac80bedc8df7 feature/advectionRV
Clean up of Utux2d
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Mon, 07 Jan 2019 16:26:05 +0100 |
parents | a6c5e73ff44e |
children |
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? |
416 | 7 % probably a bad idea. For example it complicates keys(); |
414
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
8 |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
9 methods |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
10 function obj = Map() |
417
effd75b113ba
Add tests and fix a bunch of bugs.
Jonatan Werpers <jonatan@werpers.com>
parents:
416
diff
changeset
|
11 obj.map = containers.Map(); |
414
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
12 end |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
13 |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
14 function set(obj, k, v) |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
15 keyByteStream = getByteStreamFromArray(k); |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
16 |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
17 obj.map(char(keyByteStream)) = v; |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
18 end |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
19 |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
20 function v = get(obj, k) |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
21 keyByteStream = getByteStreamFromArray(k); |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
22 |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
23 v = obj.map(char(keyByteStream)); |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
24 end |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
25 |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
26 function b = isKey(obj, k) |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
27 keyByteStream = getByteStreamFromArray(k); |
417
effd75b113ba
Add tests and fix a bunch of bugs.
Jonatan Werpers <jonatan@werpers.com>
parents:
416
diff
changeset
|
28 b = obj.map.isKey(char(keyByteStream)); |
414
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
29 end |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
30 |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
31 function c = keys(obj) |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
32 keyByteStreams = obj.map.keys; |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
33 |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
34 n = length(keyByteStreams); |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
35 |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
36 c = cell(1, n); |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
37 for i = 1:n |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
38 c{i} = getArrayFromByteStream(uint8(keyByteStreams{i})); |
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 end |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
41 |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
42 function l = length(obj) |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
43 l = obj.map.length; |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
44 end |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
45 |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
46 function remove(obj, k) |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
47 keyByteStream = getByteStreamFromArray(k); |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
48 obj.map.remove(char(keyByteStream)); |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
49 end |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
50 |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
51 function s = size(obj) |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
52 s = obj.map.size; |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
53 end |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
54 |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
55 function c = values(obj) |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
56 c = obj.map.values; |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
57 end |
415
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
58 |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
59 function v = subsref(obj, S) |
417
effd75b113ba
Add tests and fix a bunch of bugs.
Jonatan Werpers <jonatan@werpers.com>
parents:
416
diff
changeset
|
60 switch S(1).type |
415
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
61 case '()' |
951
a6c5e73ff44e
Better errors in Map()
Jonatan Werpers <jonatan@werpers.com>
parents:
417
diff
changeset
|
62 if length(S.subs) > 1 |
a6c5e73ff44e
Better errors in Map()
Jonatan Werpers <jonatan@werpers.com>
parents:
417
diff
changeset
|
63 error('sbplib:Map:multipleKeys', 'Multiple dimensions are not supported. Use a cell array as a key instead.'); |
a6c5e73ff44e
Better errors in Map()
Jonatan Werpers <jonatan@werpers.com>
parents:
417
diff
changeset
|
64 end |
417
effd75b113ba
Add tests and fix a bunch of bugs.
Jonatan Werpers <jonatan@werpers.com>
parents:
416
diff
changeset
|
65 k = S.subs{1}; |
415
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
66 try |
417
effd75b113ba
Add tests and fix a bunch of bugs.
Jonatan Werpers <jonatan@werpers.com>
parents:
416
diff
changeset
|
67 v = get(obj, k); |
415
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
68 catch ME |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
69 if strcmp(ME.identifier,'MATLAB:Containers:Map:NoKey') |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
70 error('Reference to non-existent entry %s',toString(S.subs)); |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
71 else |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
72 throw(ME); |
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 otherwise |
417
effd75b113ba
Add tests and fix a bunch of bugs.
Jonatan Werpers <jonatan@werpers.com>
parents:
416
diff
changeset
|
76 try |
effd75b113ba
Add tests and fix a bunch of bugs.
Jonatan Werpers <jonatan@werpers.com>
parents:
416
diff
changeset
|
77 v = builtin('subsref', obj, S); |
effd75b113ba
Add tests and fix a bunch of bugs.
Jonatan Werpers <jonatan@werpers.com>
parents:
416
diff
changeset
|
78 catch e |
effd75b113ba
Add tests and fix a bunch of bugs.
Jonatan Werpers <jonatan@werpers.com>
parents:
416
diff
changeset
|
79 error('You can''t use dot notation for this because Matlab(TM). What is this piece of shit software anyway?') |
effd75b113ba
Add tests and fix a bunch of bugs.
Jonatan Werpers <jonatan@werpers.com>
parents:
416
diff
changeset
|
80 end |
415
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
81 end |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
82 end |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
83 |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
84 function obj = subsasgn(obj, S, v); |
417
effd75b113ba
Add tests and fix a bunch of bugs.
Jonatan Werpers <jonatan@werpers.com>
parents:
416
diff
changeset
|
85 switch S(1).type |
415
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
86 case '()' |
951
a6c5e73ff44e
Better errors in Map()
Jonatan Werpers <jonatan@werpers.com>
parents:
417
diff
changeset
|
87 if length(S.subs) > 1 |
a6c5e73ff44e
Better errors in Map()
Jonatan Werpers <jonatan@werpers.com>
parents:
417
diff
changeset
|
88 error('sbplib:Map:multipleKeys', 'Multiple dimensions are not supported. Use a cell array as a key instead.'); |
a6c5e73ff44e
Better errors in Map()
Jonatan Werpers <jonatan@werpers.com>
parents:
417
diff
changeset
|
89 end |
417
effd75b113ba
Add tests and fix a bunch of bugs.
Jonatan Werpers <jonatan@werpers.com>
parents:
416
diff
changeset
|
90 k = S.subs{1}; |
effd75b113ba
Add tests and fix a bunch of bugs.
Jonatan Werpers <jonatan@werpers.com>
parents:
416
diff
changeset
|
91 set(obj, k, v); |
415
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
92 otherwise |
417
effd75b113ba
Add tests and fix a bunch of bugs.
Jonatan Werpers <jonatan@werpers.com>
parents:
416
diff
changeset
|
93 error('You can''t use dot notation because Matlab(TM). What is this piece of shit software anyway?') |
415
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
94 end |
16907bf31e67
Overload indexing operations.
Jonatan Werpers <jonatan@werpers.com>
parents:
414
diff
changeset
|
95 end |
414
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
96 end |
50fd7e88aa74
Add a test implementation
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
97 end |