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);