Home > classes > @cdata > subsref.m

subsref

PURPOSE ^

SUBSREF Define field name indexing for cdata objects.

SYNOPSIS ^

function b = subsref(vals, index)

DESCRIPTION ^

 SUBSREF Define field name indexing for cdata objects.

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

 DESCRIPTION: SUBSREF Define field name indexing for cdata objects.

 EXAMPLES:

  nesting level == 1

    >>        vals(2)
    >> vals = vals(2);
    >>
    >> vals = vals(2:12)
    >>        vals(2,3)
    >> vals = vals(2,3);
    >> name = vals.name;
    >>     ...

  nesting level == 2

    >> vals = vals.vals(2)
              vals.vals(2)
    >> vals = vals.vals(1:10)
              vals.vals(1:10)
    >> vals = vals.vals(1,3)
              vals.vals(1,3)
              vals_vector(1).vals    not possible
              vals_vector(1:3).vals  not possible
              vals_matrix(1:3).vals  not possible

 VERSION: $Id: subsref.m,v 1.4 2007/06/08 14:05:22 ingo Exp $

 HISTORY: 31-01-07 M Hewitson
             Creation

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

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function b = subsref(vals, index)
0002 % SUBSREF Define field name indexing for cdata objects.
0003 %
0004 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0005 %
0006 % DESCRIPTION: SUBSREF Define field name indexing for cdata objects.
0007 %
0008 % EXAMPLES:
0009 %
0010 %  nesting level == 1
0011 %
0012 %    >>        vals(2)
0013 %    >> vals = vals(2);
0014 %    >>
0015 %    >> vals = vals(2:12)
0016 %    >>        vals(2,3)
0017 %    >> vals = vals(2,3);
0018 %    >> name = vals.name;
0019 %    >>     ...
0020 %
0021 %  nesting level == 2
0022 %
0023 %    >> vals = vals.vals(2)
0024 %              vals.vals(2)
0025 %    >> vals = vals.vals(1:10)
0026 %              vals.vals(1:10)
0027 %    >> vals = vals.vals(1,3)
0028 %              vals.vals(1,3)
0029 %              vals_vector(1).vals    not possible
0030 %              vals_vector(1:3).vals  not possible
0031 %              vals_matrix(1:3).vals  not possible
0032 %
0033 % VERSION: $Id: subsref.m,v 1.4 2007/06/08 14:05:22 ingo Exp $
0034 %
0035 % HISTORY: 31-01-07 M Hewitson
0036 %             Creation
0037 %
0038 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0039 
0040 b = [];
0041 
0042 switch length(index)
0043   %           vals(2)
0044   %    vals = vals(2);
0045   %           vals(2:12)
0046   %    vals = vals(2:12)
0047   %           vals(2,3)
0048   %    vals = vals(2,3);
0049   %    name = vals.name;
0050   %        ...
0051   case 1
0052     switch index.type
0053 
0054       case '()'
0055         if length(index.subs) == 1
0056           idx = index.subs{1};
0057           [m,n] = size(vals.vals);
0058 
0059           if (m*n >= index.subs{1})
0060             if (m ~= 1) && (n~=1)
0061               warning (['### you grab to a matrix with a single index ', inputname(1)]);
0062             end
0063             b = [vals.vals(idx)];
0064           else
0065             error('### the index exceeds the vector dimension');
0066           end
0067 
0068         else %length(index.subs) == 2
0069           [m,n] = size(vals.vals);
0070             if (m >= index.subs{1})
0071               if (n >= index.subs{2})
0072                 b = vals.vals(index.subs{1}, index.subs{2});
0073               else
0074                 error('### the N index exceeds the MxN matrix dimension.');
0075               end
0076             else
0077               error('### the M index exceeds the MxN matrix dimension.');
0078             end
0079         end
0080 
0081       case '.'
0082         fieldName = index.subs;
0083         eval(sprintf('b = vals.%s;', fieldName));
0084 
0085       otherwise
0086         error('### unknown indexing method for cdata objects.');
0087     end
0088 
0089   % vals = vals.vals(1)
0090   %        vals.vals(1)
0091   % vals = vals.vals(1:10)
0092   %        vals.vals(1:10)
0093   % vals = vals.vals(1,3)
0094   %        vals.vals(1,3)
0095   case 2
0096 
0097     if index(1).type == '.'
0098 
0099       % first index gets us field name
0100       fieldName = index(1).subs;
0101 
0102       switch fieldName
0103         case 'vals'
0104           b = subsref(vals, index(2));
0105         otherwise
0106           error('### unknown field to index 1.');
0107       end
0108 
0109     else
0110       error('### unknown indexing method for cdata objects.');
0111     end
0112   otherwise
0113     error('### unknown indexing method for cdata objects.');
0114 end
0115 
0116 % END
0117

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