annotate Map.m @ 1037:2d7ba44340d0 feature/burgers1d

Pass scheme specific parameters as cell array. This will enabale constructDiffOps to be more general. In addition, allow for schemes returning function handles as diffOps, which is currently how non-linear schemes such as Burgers1d are implemented.
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Fri, 18 Jan 2019 09:02:02 +0100
parents a6c5e73ff44e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
e97550b5c1e7 Add todo.
Jonatan Werpers <jonatan@werpers.com>
parents: 415
diff changeset
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