Mercurial > hg > octave-nkf
comparison src/ov-base-mat.cc @ 4742:2527c2fd4345
[project @ 2004-02-06 00:59:45 by jwe]
author | jwe |
---|---|
date | Fri, 06 Feb 2004 00:59:45 +0000 |
parents | a9b22513b7a6 |
children | 8f669cc5a901 |
comparison
equal
deleted
inserted
replaced
4741:e44d0ac643a5 | 4742:2527c2fd4345 |
---|---|
119 octave_base_matrix<MT>::do_index_op (const octave_value_list& idx, | 119 octave_base_matrix<MT>::do_index_op (const octave_value_list& idx, |
120 int resize_ok) | 120 int resize_ok) |
121 { | 121 { |
122 octave_value retval; | 122 octave_value retval; |
123 | 123 |
124 int len = idx.length (); | 124 int n_idx = idx.length (); |
125 | 125 |
126 switch (len) | 126 int nd = matrix.ndims (); |
127 { | 127 |
128 case 2: | 128 switch (n_idx) |
129 { | 129 { |
130 int nd = matrix.ndims (); | 130 case 0: |
131 | 131 error ("invalid number of indices (= 0) for %d-dimensional array", nd); |
132 if (nd == 2) | 132 break; |
133 | |
134 case 1: | |
135 { | |
136 idx_vector i = idx (0).index_vector (); | |
137 | |
138 retval = MT (matrix.index (i, resize_ok, MT::resize_fill_value ())); | |
139 } | |
140 break; | |
141 | |
142 default: | |
143 { | |
144 if (n_idx == 2 && nd == 2) | |
133 { | 145 { |
134 idx_vector i = idx (0).index_vector (); | 146 idx_vector i = idx (0).index_vector (); |
135 idx_vector j = idx (1).index_vector (); | 147 idx_vector j = idx (1).index_vector (); |
136 | 148 |
137 retval = MT (matrix.index (i, j, resize_ok, | 149 retval = MT (matrix.index (i, j, resize_ok, |
138 MT::resize_fill_value ())); | 150 MT::resize_fill_value ())); |
139 } | 151 } |
140 else | 152 else |
141 error ("invalid number of indices (= 2) for %d-dimensional array", | 153 { |
142 nd); | 154 Array<idx_vector> idx_vec (n_idx); |
143 } | 155 |
144 break; | 156 for (int i = 0; i < n_idx; i++) |
145 | 157 idx_vec(i) = idx(i).index_vector (); |
146 case 1: | 158 |
147 { | 159 retval = MT (matrix.index (idx_vec, resize_ok, |
148 idx_vector i = idx (0).index_vector (); | 160 MT::resize_fill_value ())); |
149 | 161 } |
150 retval = MT (matrix.index (i, resize_ok, MT::resize_fill_value ())); | |
151 } | |
152 break; | |
153 | |
154 default: | |
155 { | |
156 Array<idx_vector> idx_vec (len); | |
157 | |
158 for (int i = 0; i < len; i++) | |
159 idx_vec(i) = idx(i).index_vector (); | |
160 | |
161 retval = MT (matrix.index (idx_vec, resize_ok, | |
162 MT::resize_fill_value ())); | |
163 } | 162 } |
164 break; | 163 break; |
165 } | 164 } |
166 | 165 |
167 return retval; | 166 return retval; |