Home > classes > @fsdata > subsref.m

subsref

PURPOSE ^

SUBSREF Define field name indexing for fsdata objects.

SYNOPSIS ^

function varargout = subsref(fsd, index)

DESCRIPTION ^

 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

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

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

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

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