aboutsummaryrefslogtreecommitdiff
path: root/matlab/+types/List.m
blob: 1a9571c41ddde574cfab11d0db1370f2b11f4001 (plain)
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