


SUBSREF Define field name indexing for xydata objects.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
DESCRIPTION: SUBSREF Define field name indexing for xydata objects.
EXAMPLES:
nesting level == 1
>> data(2)
>> data(2:12)
>> [x,y] = data(2);
>> [x,y] = data(2:12);
>> y = data(2); not possible
>> y = data(2:12); not possible
>> data(2,1) not possible
>> [x,y] = data(2,1); not possible
>> y = data.y;
>> x = data.x;
>> name = data.name;
...
nesting level == 2
>> data.x(2)
>> data.x(2:12)
>> x = data.x(2);
>> data.x(2,1) not possible
>> x = data.x(2,1); not possible
>> data_vector(1).t
>> t = data_vector(1).t;
>> data_vector(1:3).t; not possible
>> t = data_vector(1:3).t; not possible
>> data_matrix(1,2).t
>> t = data_matrix(1,2).t;
VERSION: $Id: subsref.m,v 1.3 2007/06/14 14:58:41 ingo Exp $
HISTORY: 31-01-07 M Hewitson
Creation
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

0001 function varargout = subsref(xy, index) 0002 % SUBSREF Define field name indexing for xydata objects. 0003 % 0004 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 0005 % 0006 % DESCRIPTION: SUBSREF Define field name indexing for xydata objects. 0007 % 0008 % EXAMPLES: 0009 % 0010 % nesting level == 1 0011 % 0012 % >> data(2) 0013 % >> data(2:12) 0014 % >> [x,y] = data(2); 0015 % >> [x,y] = data(2:12); 0016 % >> y = data(2); not possible 0017 % >> y = data(2:12); not possible 0018 % >> data(2,1) not possible 0019 % >> [x,y] = data(2,1); not possible 0020 % >> y = data.y; 0021 % >> x = data.x; 0022 % >> name = data.name; 0023 % ... 0024 % 0025 % nesting level == 2 0026 % 0027 % >> data.x(2) 0028 % >> data.x(2:12) 0029 % >> x = data.x(2); 0030 % >> data.x(2,1) not possible 0031 % >> x = data.x(2,1); not possible 0032 % >> data_vector(1).t 0033 % >> t = data_vector(1).t; 0034 % >> data_vector(1:3).t; not possible 0035 % >> t = data_vector(1:3).t; not possible 0036 % >> data_matrix(1,2).t 0037 % >> t = data_matrix(1,2).t; 0038 % 0039 % VERSION: $Id: subsref.m,v 1.3 2007/06/14 14:58:41 ingo Exp $ 0040 % 0041 % HISTORY: 31-01-07 M Hewitson 0042 % Creation 0043 % 0044 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 0045 0046 switch length(index) 0047 case 1 % xy(1:10) or xy.x or xy.y 0048 switch index.type 0049 0050 % INFO: data(2) 0051 % data(2:12) 0052 % [x,y] = data(2); 0053 % [x,y] = data(2:12); 0054 % y = data(2); not possible 0055 % y = data(2:12); not possible 0056 case '()' 0057 if length (index.subs) == 1 0058 0059 idx = index.subs{1}; 0060 0061 % assure that the number of outputs matches 0062 if nargout == 0 0063 disp(xy.x(idx)) 0064 disp(xy.y(idx)) 0065 elseif nargout == 1 0066 varargout{1} = [xy.x(idx) xy.y(idx)]; 0067 elseif nargout == 2 0068 varargout{1} = xy.x(idx); 0069 varargout{2} = xy.y(idx); 0070 else 0071 error('### the number of outputs does not match. Please use two outputs.') 0072 end 0073 0074 % INFO: data(2,1) not possible 0075 % [x,y] = data(2,1); not possible 0076 else % length (index.subs) == 2 0077 error ('### the x- or y-data are a vector. Do not use two indices.'); 0078 end 0079 0080 % INFO: y = data.y; 0081 % x = data.x; 0082 % name = data.name; 0083 % ... 0084 case '.' 0085 fieldName = index.subs; 0086 eval(sprintf('varargout{1} = xy.%s;', fieldName)); 0087 0088 otherwise 0089 error('### unknown indexing method for xydata objects.'); 0090 end 0091 % INFO: 0092 case 2 % xy.x(1:10) or xy.y(1:10) 0093 0094 % INFO: data.x(2) 0095 % data.x(2:12) 0096 % x = data.x(2); 0097 % data.x(2,1) not possible 0098 % x = data.x(2,1); not possible 0099 % data_vector(1).x 0100 % x = data_vector(1).x; 0101 % data_vector(1:3).x; not possible 0102 % x = data_vector(1:3).x; not possible 0103 % data_matrix(1,2).x 0104 % x = data_matrix(1,2).x; 0105 0106 if index(1).type == '.' 0107 0108 fieldName = index(1).subs; 0109 0110 if length(index(2).subs) > 1 0111 error('### the x- or y-data are a vector. Do not use two indices.'); 0112 end 0113 0114 switch fieldName 0115 case 'x' 0116 x = xy.x(index(2).subs{1}); 0117 varargout{1} = x; 0118 case 'y' 0119 y = xy.y(index(2).subs{1}); 0120 varargout{1} = y; 0121 otherwise 0122 error('### not possible field. Use ''data.x'' or ''data.y''.'); 0123 end 0124 0125 % INFO: data_vector(1).x 0126 % x = data_vector(1).x; 0127 % data_vector(1:3).x; not possible 0128 % x = data_vector(1:3).x; not possible 0129 0130 elseif strcmp (index(1).type, '()') 0131 0132 if length(index(1).subs) == 1 0133 % INFO: x = data_vector(1).x; 0134 if length(index(1).subs{1}) == 1 0135 varargout{1} = subsref (xy(index(1).subs{1}), index(2)); 0136 % INFO: x = data_vector(1:3).x; 0137 else 0138 error(['### output for the indexing ' ... 0139 sprintf('(%d:%d) is not defined', min(index(1).subs{1}), ... 0140 max(index(1).subs{1}))]); 0141 end 0142 % INFO: data_matrix(1,2).x 0143 % x = data_matrix(1,2).x; 0144 elseif length(index(1).subs) == 2 0145 varargout{1} = subsref (xy(index(1).subs{1},index(1).subs{2}), index(2)); 0146 end 0147 0148 else 0149 error('### unknown indexing method for xydata objects.'); 0150 end 0151 otherwise 0152 error('### unknown indexing method for xydata objects.'); 0153 end 0154 0155 % END 0156