diff 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
line wrap: on
line diff
--- a/src/ov-re-mat.cc
+++ b/src/ov-re-mat.cc
@@ -271,6 +271,34 @@
   return retval;
 }
 
+octave_value 
+octave_matrix::sort (octave_idx_type dim, sortmode mode) const
+{
+  // If this matrix is known to be a valid index, and we're doing a vector sort,
+  // sort via idx_vector which may be more efficient occassionally.
+  if (idx_cache && mode == ASCENDING && ndims () == 2
+      && ((dim == 0 && matrix.columns () == 1) || (dim == 1 && matrix.rows () == 1)))
+    {
+      return index_vector ().sorted ();
+    }
+  else
+    return octave_base_matrix<NDArray>::sort (dim, mode);
+}
+
+octave_value 
+octave_matrix::sort (Array<octave_idx_type> &sidx, octave_idx_type dim,
+                     sortmode mode) const
+{
+  // If this matrix is known to be a valid index, and we're doing a vector sort,
+  // sort via idx_vector which may be more efficient occassionally.
+  if (idx_cache && mode == ASCENDING && ndims () == 2
+      && ((dim == 0 && matrix.columns () == 1) || (dim == 1 && matrix.rows () == 1)))
+    {
+      return index_vector ().sorted (sidx);
+    }
+  else
+    return octave_base_matrix<NDArray>::sort (sidx, dim, mode);
+}
 octave_value
 octave_matrix::convert_to_str_internal (bool, bool, char type) const
 {