Mercurial > repos > public > sbplib
annotate Cell.m @ 478:d91f27460741 feature/sublassable_cellarray
Implement size, length and transpose
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Wed, 02 Aug 2017 10:51:44 +0200 |
parents | c91464ef1dd9 |
children | c5705458beb1 |
rev | line source |
---|---|
467 | 1 classdef Cell |
2 properties | |
3 data | |
4 end | |
5 methods | |
6 function obj = Cell(data) | |
7 if ~iscell(data) | |
8 class(data) | |
472
1dcac646c514
Add some missing semicolon
Jonatan Werpers <jonatan@werpers.com>
parents:
469
diff
changeset
|
9 error('Input argument to Cell must be a cell array'); |
467 | 10 end |
11 | |
12 obj.data = data; | |
13 end | |
14 | |
473 | 15 % function str = toString(obj) |
16 | |
17 % end | |
18 | |
467 | 19 % function display(A) |
20 % n = size(A.data); | |
21 | |
22 % sizeStr = join(cellfun(@num2str, num2cell(n), 'UniformOutput',false),'x'); | |
23 % header = [sizeStr, 'Cell'] | |
24 | |
25 % disp() | |
26 % disp(A.data) | |
27 % % display(A.data) | |
28 % end | |
29 | |
478
d91f27460741
Implement size, length and transpose
Jonatan Werpers <jonatan@werpers.com>
parents:
474
diff
changeset
|
30 function s = size(A) |
d91f27460741
Implement size, length and transpose
Jonatan Werpers <jonatan@werpers.com>
parents:
474
diff
changeset
|
31 s = size(A.data); |
d91f27460741
Implement size, length and transpose
Jonatan Werpers <jonatan@werpers.com>
parents:
474
diff
changeset
|
32 end |
d91f27460741
Implement size, length and transpose
Jonatan Werpers <jonatan@werpers.com>
parents:
474
diff
changeset
|
33 |
d91f27460741
Implement size, length and transpose
Jonatan Werpers <jonatan@werpers.com>
parents:
474
diff
changeset
|
34 function l = length(A) |
d91f27460741
Implement size, length and transpose
Jonatan Werpers <jonatan@werpers.com>
parents:
474
diff
changeset
|
35 l = length(A.data); |
d91f27460741
Implement size, length and transpose
Jonatan Werpers <jonatan@werpers.com>
parents:
474
diff
changeset
|
36 end |
d91f27460741
Implement size, length and transpose
Jonatan Werpers <jonatan@werpers.com>
parents:
474
diff
changeset
|
37 |
d91f27460741
Implement size, length and transpose
Jonatan Werpers <jonatan@werpers.com>
parents:
474
diff
changeset
|
38 function B = transpose(A) |
d91f27460741
Implement size, length and transpose
Jonatan Werpers <jonatan@werpers.com>
parents:
474
diff
changeset
|
39 b = A.data.'; |
d91f27460741
Implement size, length and transpose
Jonatan Werpers <jonatan@werpers.com>
parents:
474
diff
changeset
|
40 B = callConstructor(A, b); |
d91f27460741
Implement size, length and transpose
Jonatan Werpers <jonatan@werpers.com>
parents:
474
diff
changeset
|
41 end |
d91f27460741
Implement size, length and transpose
Jonatan Werpers <jonatan@werpers.com>
parents:
474
diff
changeset
|
42 |
d91f27460741
Implement size, length and transpose
Jonatan Werpers <jonatan@werpers.com>
parents:
474
diff
changeset
|
43 function B = ctranspose(A) |
d91f27460741
Implement size, length and transpose
Jonatan Werpers <jonatan@werpers.com>
parents:
474
diff
changeset
|
44 b = A.data'; |
d91f27460741
Implement size, length and transpose
Jonatan Werpers <jonatan@werpers.com>
parents:
474
diff
changeset
|
45 B = callConstructor(A, b); |
d91f27460741
Implement size, length and transpose
Jonatan Werpers <jonatan@werpers.com>
parents:
474
diff
changeset
|
46 end |
d91f27460741
Implement size, length and transpose
Jonatan Werpers <jonatan@werpers.com>
parents:
474
diff
changeset
|
47 |
467 | 48 function disp(A) |
49 disp(A.data) | |
50 end | |
51 | |
52 function A = subsasgn(A, S, B) | |
53 a = subsasgn(A.data, S, B); | |
468
13362cf4dd89
Make the overloaded methods call the subclass constructor
Jonatan Werpers <jonatan@werpers.com>
parents:
467
diff
changeset
|
54 A = callConstructor(A, a); |
467 | 55 end |
56 | |
57 function B = subsref(A, S) | |
469
365fcdbb8736
Implement subsref properly
Jonatan Werpers <jonatan@werpers.com>
parents:
468
diff
changeset
|
58 switch S(1).type |
365fcdbb8736
Implement subsref properly
Jonatan Werpers <jonatan@werpers.com>
parents:
468
diff
changeset
|
59 case '()' |
365fcdbb8736
Implement subsref properly
Jonatan Werpers <jonatan@werpers.com>
parents:
468
diff
changeset
|
60 b = subsref(A.data, S); |
365fcdbb8736
Implement subsref properly
Jonatan Werpers <jonatan@werpers.com>
parents:
468
diff
changeset
|
61 B = callConstructor(A, b); |
365fcdbb8736
Implement subsref properly
Jonatan Werpers <jonatan@werpers.com>
parents:
468
diff
changeset
|
62 case '{}' |
365fcdbb8736
Implement subsref properly
Jonatan Werpers <jonatan@werpers.com>
parents:
468
diff
changeset
|
63 B = subsref(A.data, S); |
365fcdbb8736
Implement subsref properly
Jonatan Werpers <jonatan@werpers.com>
parents:
468
diff
changeset
|
64 case '.' |
365fcdbb8736
Implement subsref properly
Jonatan Werpers <jonatan@werpers.com>
parents:
468
diff
changeset
|
65 B = builtin('subsref',A, S); |
365fcdbb8736
Implement subsref properly
Jonatan Werpers <jonatan@werpers.com>
parents:
468
diff
changeset
|
66 otherwise |
472
1dcac646c514
Add some missing semicolon
Jonatan Werpers <jonatan@werpers.com>
parents:
469
diff
changeset
|
67 error('unreachable'); |
469
365fcdbb8736
Implement subsref properly
Jonatan Werpers <jonatan@werpers.com>
parents:
468
diff
changeset
|
68 end |
467 | 69 end |
70 | |
71 function C = horzcat(varargin) | |
72 dataArray = cell(1, length(varargin)); | |
73 | |
74 for i = 1:length(varargin) | |
75 dataArray{i} = varargin{i}.data; | |
76 end | |
77 | |
78 c = horzcat(dataArray{:}); | |
468
13362cf4dd89
Make the overloaded methods call the subclass constructor
Jonatan Werpers <jonatan@werpers.com>
parents:
467
diff
changeset
|
79 C = callConstructor(varargin{1}, c); |
467 | 80 end |
81 | |
474
c91464ef1dd9
Implement tests for horzcat and vertcat. Fix bugs found
Jonatan Werpers <jonatan@werpers.com>
parents:
473
diff
changeset
|
82 function C = vertcat(varargin) |
467 | 83 dataArray = cell(1, length(varargin)); |
84 | |
85 for i = 1:length(varargin) | |
86 dataArray{i} = varargin{i}.data; | |
87 end | |
88 | |
89 c = vertcat(dataArray{:}); | |
468
13362cf4dd89
Make the overloaded methods call the subclass constructor
Jonatan Werpers <jonatan@werpers.com>
parents:
467
diff
changeset
|
90 C = callConstructor(varargin{1}, c); |
467 | 91 end |
92 end | |
468
13362cf4dd89
Make the overloaded methods call the subclass constructor
Jonatan Werpers <jonatan@werpers.com>
parents:
467
diff
changeset
|
93 end |