


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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

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