[gtksourceview] SearchContext: don't scan_all_region() in smart sync search
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtksourceview] SearchContext: don't scan_all_region() in smart sync search
- Date: Mon, 19 Aug 2013 14:04:46 +0000 (UTC)
commit 709425f1b82142570b62d04a9e7a1030aecb361f
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]