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