Mercurial > hg > octave-lyh
comparison liboctave/idx-vector.cc @ 10512:aac9f4265048
rewrite sparse indexed assignment
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Tue, 13 Apr 2010 12:36:21 +0200 |
parents | 077fef5da460 |
children | f0266ee4aabe |
comparison
equal
deleted
inserted
replaced
10511:153e6226a669 | 10512:aac9f4265048 |
---|---|
1152 | 1152 |
1153 return retval; | 1153 return retval; |
1154 } | 1154 } |
1155 | 1155 |
1156 idx_vector | 1156 idx_vector |
1157 idx_vector::inverse_permutation (octave_idx_type n) const | |
1158 { | |
1159 assert (n == length (n)); | |
1160 | |
1161 idx_vector retval; | |
1162 | |
1163 switch (idx_class ()) | |
1164 { | |
1165 case class_range: | |
1166 { | |
1167 if (increment () == -1) | |
1168 retval = sorted (); | |
1169 else | |
1170 retval = *this; | |
1171 break; | |
1172 } | |
1173 case class_vector: | |
1174 { | |
1175 idx_vector_rep *r = dynamic_cast<idx_vector_rep *> (rep); | |
1176 const octave_idx_type *ri = r->get_data (); | |
1177 Array<octave_idx_type> idx (orig_dimensions ()); | |
1178 for (octave_idx_type i = 0; i < n; i++) | |
1179 idx.xelem(ri[i]) = i; | |
1180 retval = new idx_vector_rep (idx, r->extent (0), DIRECT); | |
1181 } | |
1182 default: | |
1183 retval = *this; | |
1184 break; | |
1185 } | |
1186 | |
1187 return retval; | |
1188 } | |
1189 | |
1190 idx_vector | |
1157 idx_vector::unmask (void) const | 1191 idx_vector::unmask (void) const |
1158 { | 1192 { |
1159 if (idx_class () == class_mask) | 1193 if (idx_class () == class_mask) |
1160 { | 1194 { |
1161 idx_mask_rep * r = dynamic_cast<idx_mask_rep *> (rep); | 1195 idx_mask_rep * r = dynamic_cast<idx_mask_rep *> (rep); |