[gtksourceview/wip/regex-search] 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/wip/regex-search] SearchContext: don't scan_all_region() in smart sync search
- Date: Wed, 14 Aug 2013 15:11:30 +0000 (UTC)
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]