Home > classes > @tsdata > subsref.m

subsref

PURPOSE ^

SUBSREF Define field name indexing for tsdata objects.

SYNOPSIS ^

function varargout = subsref(tsd, index)

DESCRIPTION ^

 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

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

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

Generated on Fri 08-Jun-2007 16:09:11 by m2html © 2003