Mercurial > repos > public > sbplib
annotate Cell.m @ 911:f7306f03f77a feature/utux2D
Improve comments and names. Change InterfaceOptions.union to merge.
author | Martin Almquist <malmquist@stanford.edu> |
---|---|
date | Sat, 24 Nov 2018 15:43:34 -0800 |
parents | 2ce903f28193 |
children |
rev | line source |
---|---|
483
025f084187d1
Add some documentation and minor clean up
Jonatan Werpers <jonatan@werpers.com>
parents:
482
diff
changeset
|
1 % Cell is a reimplementation of matlabs cell array with the benefit that it is subclassable |
025f084187d1
Add some documentation and minor clean up
Jonatan Werpers <jonatan@werpers.com>
parents:
482
diff
changeset
|
2 % It might be used for giving a typename to a cellarray to increase readability of the code. |
467 | 3 classdef Cell |
4 properties | |
5 data | |
6 end | |
483
025f084187d1
Add some documentation and minor clean up
Jonatan Werpers <jonatan@werpers.com>
parents:
482
diff
changeset
|
7 |
467 | 8 methods |
9 function obj = Cell(data) | |
483
025f084187d1
Add some documentation and minor clean up
Jonatan Werpers <jonatan@werpers.com>
parents:
482
diff
changeset
|
10 default_arg('data', {}); |
467 | 11 if ~iscell(data) |
472
1dcac646c514
Add some missing semicolon
Jonatan Werpers <jonatan@werpers.com>
parents:
469
diff
changeset
|
12 error('Input argument to Cell must be a cell array'); |
467 | 13 end |
14 | |
15 obj.data = data; | |
16 end | |
17 | |
480
4ce12f8b561c
Implement to string method
Jonatan Werpers <jonatan@werpers.com>
parents:
479
diff
changeset
|
18 function str = toString(obj) |
4ce12f8b561c
Implement to string method
Jonatan Werpers <jonatan@werpers.com>
parents:
479
diff
changeset
|
19 str = sprintf('%s%s', class(obj), toString(obj.data)); |
4ce12f8b561c
Implement to string method
Jonatan Werpers <jonatan@werpers.com>
parents:
479
diff
changeset
|
20 end |
473 | 21 |
478
d91f27460741
Implement size, length and transpose
Jonatan Werpers <jonatan@werpers.com>
parents:
474
diff
changeset
|
22 function s = size(A) |
d91f27460741
Implement size, length and transpose
Jonatan Werpers <jonatan@werpers.com>
parents:
474
diff
changeset
|
23 s = size(A.data); |
d91f27460741
Implement size, length and transpose
Jonatan Werpers <jonatan@werpers.com>
parents:
474
diff
changeset
|
24 end |
d91f27460741
Implement size, length and transpose
Jonatan Werpers <jonatan@werpers.com>
parents:
474
diff
changeset
|
25 |
580
2ce903f28193
Make Cell class work with isempty()
Jonatan Werpers <jonatan@werpers.com>
parents:
483
diff
changeset
|
26 function b = isempty(A) |
2ce903f28193
Make Cell class work with isempty()
Jonatan Werpers <jonatan@werpers.com>
parents:
483
diff
changeset
|
27 b = prod(size(A)) == 0; |
2ce903f28193
Make Cell class work with isempty()
Jonatan Werpers <jonatan@werpers.com>
parents:
483
diff
changeset
|
28 end |
2ce903f28193
Make Cell class work with isempty()
Jonatan Werpers <jonatan@werpers.com>
parents:
483
diff
changeset
|
29 |
478
d91f27460741
Implement size, length and transpose
Jonatan Werpers <jonatan@werpers.com>
parents:
474
diff
changeset
|
30 function l = length(A) |
d91f27460741
Implement size, length and transpose
Jonatan Werpers <jonatan@werpers.com>
parents:
474
diff
changeset
|
31 l = length(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 |
479
c5705458beb1
Implement end function and fix test for colon indexing
Jonatan Werpers <jonatan@werpers.com>
parents:
478
diff
changeset
|
34 function ind = end(A,k,n) |
c5705458beb1
Implement end function and fix test for colon indexing
Jonatan Werpers <jonatan@werpers.com>
parents:
478
diff
changeset
|
35 ind = builtin('end',A.data, k, n); |
c5705458beb1
Implement end function and fix test for colon indexing
Jonatan Werpers <jonatan@werpers.com>
parents:
478
diff
changeset
|
36 end |
c5705458beb1
Implement end function and fix test for colon indexing
Jonatan Werpers <jonatan@werpers.com>
parents:
478
diff
changeset
|
37 |
478
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 A = subsasgn(A, S, B) |
49 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
|
50 A = callConstructor(A, a); |
467 | 51 end |
52 | |
53 function B = subsref(A, S) | |
469
365fcdbb8736
Implement subsref properly
Jonatan Werpers <jonatan@werpers.com>
parents:
468
diff
changeset
|
54 switch S(1).type |
365fcdbb8736
Implement subsref properly
Jonatan Werpers <jonatan@werpers.com>
parents:
468
diff
changeset
|
55 case '()' |
481
970f1df2bfcf
Implement handeling of stacked indexing
Jonatan Werpers <jonatan@werpers.com>
parents:
480
diff
changeset
|
56 b = subsref(A.data, S(1)); |
469
365fcdbb8736
Implement subsref properly
Jonatan Werpers <jonatan@werpers.com>
parents:
468
diff
changeset
|
57 B = callConstructor(A, b); |
481
970f1df2bfcf
Implement handeling of stacked indexing
Jonatan Werpers <jonatan@werpers.com>
parents:
480
diff
changeset
|
58 if length(S) > 1 |
970f1df2bfcf
Implement handeling of stacked indexing
Jonatan Werpers <jonatan@werpers.com>
parents:
480
diff
changeset
|
59 B = subsref(B,S(2:end)); |
970f1df2bfcf
Implement handeling of stacked indexing
Jonatan Werpers <jonatan@werpers.com>
parents:
480
diff
changeset
|
60 end |
469
365fcdbb8736
Implement subsref properly
Jonatan Werpers <jonatan@werpers.com>
parents:
468
diff
changeset
|
61 case '{}' |
365fcdbb8736
Implement subsref properly
Jonatan Werpers <jonatan@werpers.com>
parents:
468
diff
changeset
|
62 B = subsref(A.data, S); |
365fcdbb8736
Implement subsref properly
Jonatan Werpers <jonatan@werpers.com>
parents:
468
diff
changeset
|
63 case '.' |
365fcdbb8736
Implement subsref properly
Jonatan Werpers <jonatan@werpers.com>
parents:
468
diff
changeset
|
64 B = builtin('subsref',A, S); |
365fcdbb8736
Implement subsref properly
Jonatan Werpers <jonatan@werpers.com>
parents:
468
diff
changeset
|
65 otherwise |
472
1dcac646c514
Add some missing semicolon
Jonatan Werpers <jonatan@werpers.com>
parents:
469
diff
changeset
|
66 error('unreachable'); |
469
365fcdbb8736
Implement subsref properly
Jonatan Werpers <jonatan@werpers.com>
parents:
468
diff
changeset
|
67 end |
467 | 68 end |
69 | |
70 function C = horzcat(varargin) | |
71 dataArray = cell(1, length(varargin)); | |
72 | |
73 for i = 1:length(varargin) | |
74 dataArray{i} = varargin{i}.data; | |
75 end | |
76 | |
77 c = horzcat(dataArray{:}); | |
468
13362cf4dd89
Make the overloaded methods call the subclass constructor
Jonatan Werpers <jonatan@werpers.com>
parents:
467
diff
changeset
|
78 C = callConstructor(varargin{1}, c); |
467 | 79 end |
80 | |
474
c91464ef1dd9
Implement tests for horzcat and vertcat. Fix bugs found
Jonatan Werpers <jonatan@werpers.com>
parents:
473
diff
changeset
|
81 function C = vertcat(varargin) |
467 | 82 dataArray = cell(1, length(varargin)); |
83 | |
84 for i = 1:length(varargin) | |
85 dataArray{i} = varargin{i}.data; | |
86 end | |
87 | |
88 c = vertcat(dataArray{:}); | |
468
13362cf4dd89
Make the overloaded methods call the subclass constructor
Jonatan Werpers <jonatan@werpers.com>
parents:
467
diff
changeset
|
89 C = callConstructor(varargin{1}, c); |
467 | 90 end |
91 end | |
468
13362cf4dd89
Make the overloaded methods call the subclass constructor
Jonatan Werpers <jonatan@werpers.com>
parents:
467
diff
changeset
|
92 end |