Home > classes > @xydata > subsref.m

subsref

PURPOSE ^

SUBSREF Define field name indexing for xydata objects.

SYNOPSIS ^

function varargout = subsref(xy, index)

DESCRIPTION ^

 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

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

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

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

Generated on Mon 02-Jul-2007 12:19:41 by m2html © 2003