SUBSREF Define field name indexing for fsdata objects. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% DESCRIPTION: SUBSREF Define field name indexing for fsdata objects. EXAMPLES: nesting level == 1 >> data(2) >> data(2:12) >> [f,xx] = data(2); >> [f,xx] = data(2:12); >> xx = data(2); not possible >> xx = data(2:12); not possible >> data(2,1) not possible >> [f,xx] = data(2,1); not possible >> xx = data.xx; >> f = data.f; >> name = data.name; ... nesting level == 2 >> data.f(2) >> data.f(2:12) >> f = data.f(2); >> data.f(2,1) not possible >> f = data.f(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.html,v 1.1 2007/06/08 14:15:05 hewitson Exp $ HISTORY: 31-01-07 M Hewitson Creation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0001 function varargout = subsref(fsd, index) 0002 % SUBSREF Define field name indexing for fsdata objects. 0003 % 0004 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 0005 % 0006 % DESCRIPTION: SUBSREF Define field name indexing for fsdata objects. 0007 % 0008 % EXAMPLES: 0009 % 0010 % nesting level == 1 0011 % 0012 % >> data(2) 0013 % >> data(2:12) 0014 % >> [f,xx] = data(2); 0015 % >> [f,xx] = data(2:12); 0016 % >> xx = data(2); not possible 0017 % >> xx = data(2:12); not possible 0018 % >> data(2,1) not possible 0019 % >> [f,xx] = data(2,1); not possible 0020 % >> xx = data.xx; 0021 % >> f = data.f; 0022 % >> name = data.name; 0023 % ... 0024 % 0025 % nesting level == 2 0026 % 0027 % >> data.f(2) 0028 % >> data.f(2:12) 0029 % >> f = data.f(2); 0030 % >> data.f(2,1) not possible 0031 % >> f = data.f(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.html,v 1.1 2007/06/08 14:15:05 hewitson Exp $ 0040 % 0041 % HISTORY: 31-01-07 M Hewitson 0042 % Creation 0043 % 0044 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 0045 0046 switch length(index) 0047 case 1 % fsd(1:10) or fsd.f or fsd.xx 0048 switch index.type 0049 0050 % INFO: data(2) 0051 % data(2:12) 0052 % [f,xx] = data(2); 0053 % [f,xx] = data(2:12); 0054 % xx = data(2); not possible 0055 % xx = 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(fsd.f(idx)) 0064 disp(fsd.xx(idx)) 0065 elseif nargout == 1 0066 varargout{1} = [fsd.f(idx) fsd.xx(idx)]; 0067 elseif nargout == 2 0068 varargout{1} = fsd.f(idx); 0069 varargout{2} = fsd.xx(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 % [f,xx] = 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: xx = data.xx; 0081 % f = data.f; 0082 % name = data.name; 0083 % ... 0084 case '.' 0085 fieldName = index.subs; 0086 eval(sprintf('varargout{1} = fsd.%s;', fieldName)); 0087 0088 otherwise 0089 error('### unknown indexing method for fsdata objects.'); 0090 end 0091 % INFO: 0092 case 2 % fsd.f(1:10) or fsd.xx(1:10) 0093 0094 % INFO: data.f(2) 0095 % data.f(2:12) 0096 % f = data.f(2); 0097 % data.f(2,1) not possible 0098 % f = data.f(2,1); not possible 0099 % data_vector(1).f 0100 % f = data_vector(1).f; 0101 % data_vector(1:3).f; not possible 0102 % f = data_vector(1:3).f; not possible 0103 % data_matrix(1,2).f 0104 % f = data_matrix(1,2).f; 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 'f' 0116 f = fsd.f(index(2).subs{1}); 0117 varargout{1} = f; 0118 case 'xx' 0119 xx = fsd.xx(index(2).subs{1}); 0120 varargout{1} = xx; 0121 otherwise 0122 error('### not possible field. Use ''data.f'' or ''data.xx''.'); 0123 end 0124 0125 % INFO: data_vector(1).f 0126 % f = data_vector(1).f; 0127 % data_vector(1:3).f; not possible 0128 % f = data_vector(1:3).f; not possible 0129 0130 elseif strcmp (index(1).type, '()') 0131 0132 if length(index(1).subs) == 1 0133 % INFO: f = data_vector(1).f; 0134 if length(index(1).subs{1}) == 1 0135 varargout{1} = subsref (fsd(index(1).subs{1}), index(2)); 0136 % INFO: f = data_vector(1:3).f; 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).f 0143 % f = data_matrix(1,2).f; 0144 elseif length(index(1).subs) == 2 0145 varargout{1} = subsref (fsd(index(1).subs{1},index(1).subs{2}), index(2)); 0146 end 0147 0148 else 0149 error('### unknown indexing method for fsdata objects.'); 0150 end 0151 otherwise 0152 error('### unknown indexing method for fsdata objects.'); 0153 end 0154 0155 % END 0156