1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
classdef List < handle
properties
data = {}
meta = types.nil;
end
methods
function obj = List(varargin)
obj.data = varargin;
end
function len = length(obj)
len = length(obj.data);
end
function ret = get(obj, idx)
ret = obj.data{idx};
end
function ret = set(obj, key, val)
obj.data{key} = val;
ret = val;
end
function ret = append(obj, val)
obj.data{end+1} = val;
ret = val;
end
function ret = slice(obj, start, last)
if nargin < 3
last = length(obj.data);
end
ret = types.List(obj.data{start:last});
end
function ret = clone(obj)
ret = types.List();
ret.data = obj.data;
ret.meta = obj.meta;
end
% function varargout = subsref(vec, S)
% % This doesn't work for ranges
% [varargout{1:nargout}] = builtin('subsref', vec.data, S);
%
% varargout = cell(1,max(1,nargout));
% [varargout{:}] = builtin('subsref',vec.data,S);
%
%% switch S.type
%% case '()'
%% varargout = cell(1,numel(vec));
%% varargout{1} = builtin('subsref', vec.data, S);
%% case '{}'
%% varargout = cell(1,numel(vec));
%% varargout{1} = builtin('subsref', vec.data, S);
%% case '.'
%% error('Vector property access not yet implemented');
%% end
% end
% %function n = numel(varargin)
% % n = 1;
% %end
end
end
|