annotate Cell.m @ 1347:ac54767ae1fb feature/poroelastic tip

Add interface, not fully compatible.
author Martin Almquist <martin.almquist@it.uu.se>
date Tue, 30 Apr 2024 14:58:35 +0200
parents 2ce903f28193
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
3 classdef Cell
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
4 properties
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
5 data
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
6 end
483
025f084187d1 Add some documentation and minor clean up
Jonatan Werpers <jonatan@werpers.com>
parents: 482
diff changeset
7
467
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
8 methods
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
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
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
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
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
13 end
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
14
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
15 obj.data = data;
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
16 end
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
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
605a8c075388 Add to string stub.
Jonatan Werpers <jonatan@werpers.com>
parents: 472
diff changeset
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
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
48 function A = subsasgn(A, S, B)
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
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
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
51 end
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
52
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
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
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
68 end
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
69
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
70 function C = horzcat(varargin)
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
71 dataArray = cell(1, length(varargin));
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
72
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
73 for i = 1:length(varargin)
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
74 dataArray{i} = varargin{i}.data;
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
75 end
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
76
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
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
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
79 end
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
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
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
82 dataArray = cell(1, length(varargin));
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
83
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
84 for i = 1:length(varargin)
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
85 dataArray{i} = varargin{i}.data;
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
86 end
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
87
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
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
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
90 end
8d3c3da3a589 Initial commit
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
91 end
468
13362cf4dd89 Make the overloaded methods call the subclass constructor
Jonatan Werpers <jonatan@werpers.com>
parents: 467
diff changeset
92 end