comparison src/ov-re-mat.cc @ 10273:3a8c13b71612

implement special-case optimization for sort of index vectors
author Jaroslav Hajek <highegg@gmail.com>
date Mon, 08 Feb 2010 11:16:52 +0100
parents cd96d29c5efa
children 57a59eae83cc
comparison
equal deleted inserted replaced
10272:272179888089 10273:3a8c13b71612
269 retval = octave_base_matrix<NDArray>::diag (k); 269 retval = octave_base_matrix<NDArray>::diag (k);
270 270
271 return retval; 271 return retval;
272 } 272 }
273 273
274 octave_value
275 octave_matrix::sort (octave_idx_type dim, sortmode mode) const
276 {
277 // If this matrix is known to be a valid index, and we're doing a vector sort,
278 // sort via idx_vector which may be more efficient occassionally.
279 if (idx_cache && mode == ASCENDING && ndims () == 2
280 && ((dim == 0 && matrix.columns () == 1) || (dim == 1 && matrix.rows () == 1)))
281 {
282 return index_vector ().sorted ();
283 }
284 else
285 return octave_base_matrix<NDArray>::sort (dim, mode);
286 }
287
288 octave_value
289 octave_matrix::sort (Array<octave_idx_type> &sidx, octave_idx_type dim,
290 sortmode mode) const
291 {
292 // If this matrix is known to be a valid index, and we're doing a vector sort,
293 // sort via idx_vector which may be more efficient occassionally.
294 if (idx_cache && mode == ASCENDING && ndims () == 2
295 && ((dim == 0 && matrix.columns () == 1) || (dim == 1 && matrix.rows () == 1)))
296 {
297 return index_vector ().sorted (sidx);
298 }
299 else
300 return octave_base_matrix<NDArray>::sort (sidx, dim, mode);
301 }
274 octave_value 302 octave_value
275 octave_matrix::convert_to_str_internal (bool, bool, char type) const 303 octave_matrix::convert_to_str_internal (bool, bool, char type) const
276 { 304 {
277 octave_value retval; 305 octave_value retval;
278 dim_vector dv = dims (); 306 dim_vector dv = dims ();