[gtksourceview/wip/regex-search] SearchContext: don't scan_all_region() in smart sync search



commit a3255305eb001881a93abdd804d5f5e2b8746898
Author: Sébastien Wilmet <swilmet gnome org>
Date:   Wed Aug 14 16:06:34 2013 +0200

    SearchContext: don't scan_all_region() in smart sync search
    
    The was a performance problem (O(N^2)) for one of the regex search test.

 gtksourceview/gtksourcesearchcontext.c |   28 ++++++++++++++++++++++++++--
 1 files changed, 26 insertions(+), 2 deletions(-)
---
diff --git a/gtksourceview/gtksourcesearchcontext.c b/gtksourceview/gtksourcesearchcontext.c
index 992e44a..4135260 100644
--- a/gtksourceview/gtksourcesearchcontext.c
+++ b/gtksourceview/gtksourcesearchcontext.c
@@ -2074,8 +2074,20 @@ smart_forward_search_step (GtkSourceSearchContext *search,
                return FALSE;
        }
 
-       scan_all_region (search, region);
+       /* Scan a chunk of the buffer, not the whole 'region'. An occurrence can
+        * be found before the 'region' is scanned entirely.
+        */
+       if (gtk_source_search_settings_get_regex_enabled (search->priv->settings))
+       {
+               regex_search_scan_next_chunk (search);
+       }
+       else
+       {
+               scan_region_forward (search, region);
+       }
+
        gtk_text_region_destroy (region, TRUE);
+
        return FALSE;
 }
 
@@ -2161,8 +2173,20 @@ smart_backward_search_step (GtkSourceSearchContext *search,
                return FALSE;
        }
 
-       scan_all_region (search, region);
+       /* Scan a chunk of the buffer, not the whole 'region'. An occurrence can
+        * be found before the 'region' is scanned entirely.
+        */
+       if (gtk_source_search_settings_get_regex_enabled (search->priv->settings))
+       {
+               regex_search_scan_next_chunk (search);
+       }
+       else
+       {
+               scan_region_forward (search, region);
+       }
+
        gtk_text_region_destroy (region, TRUE);
+
        return FALSE;
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]