|
|
function varargout = subsref(this,subs) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if length(this) > 1 && ~strcmp(subs(1).type,'()') |
|
|
warning('Not implemented.'); |
|
|
for i=1:numel(this) |
|
|
varargout{i} = subsref(this(i),subs); |
|
|
end |
|
|
return; |
|
|
end |
|
|
|
|
|
switch subs(1).type |
|
|
case '.' |
|
|
[i,j] = isintent(this,subs(1).subs); |
|
|
if isempty(i) |
|
|
if strcmp(subs(1).subs,'private') |
|
|
varargout{1} = builtin('struct',this); |
|
|
else |
|
|
error('Reference to non-existent field ''%s''.',subs(1).subs); |
|
|
end |
|
|
else |
|
|
if strcmp(subs(1).subs,'mat') |
|
|
varargout{1} = this.data{j}.space.MatrixData; |
|
|
elseif strcmp(subs(1).subs,'labels') |
|
|
varargout{1} = this.label; |
|
|
else |
|
|
if length(j) == 1 |
|
|
varargout{1} = this.data{j}.data; |
|
|
else |
|
|
a = [this.data{j}]; |
|
|
try |
|
|
varargout{1} = [a.data]; |
|
|
catch |
|
|
error('Data arrays are of different sizes.'); |
|
|
end |
|
|
end |
|
|
end |
|
|
end |
|
|
if strcmp(subs(1).subs,'faces') || strcmp(subs(1).subs,'indices') |
|
|
varargout{1} = varargout{1} + 1; |
|
|
end |
|
|
if length(subs) > 1 |
|
|
varargout{1} = subsref(varargout{1},subs(2:end)); |
|
|
end |
|
|
case '{}' |
|
|
error('Cell contents reference from a non-cell array object.'); |
|
|
case '()' |
|
|
if length(subs) == 1 |
|
|
varargout{1} = builtin('subsref',this,subs(1)); |
|
|
else |
|
|
varargout{1} = subsref(builtin('subsref',this,subs(1)),subs(2:end)); |
|
|
end |
|
|
otherwise |
|
|
error('This should not happen.'); |
|
|
end |