[gtk+] cssmatcher: Speed up common matching
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] cssmatcher: Speed up common matching
- Date: Thu, 28 May 2015 15:42:36 +0000 (UTC)
commit 03312371daafe3a94d888474eb53d7361d5ed432
Author: Benjamin Otte <otte redhat com>
Date: Thu May 28 17:40:55 2015 +0200
cssmatcher: Speed up common matching
first-child and last-child are the most common usages of the nth-child
machinery, so special-casing them makes sense.
gtk/gtkcssmatcher.c | 15 ++++++++++++---
1 files changed, 12 insertions(+), 3 deletions(-)
---
diff --git a/gtk/gtkcssmatcher.c b/gtk/gtkcssmatcher.c
index 14597cc..a152327 100644
--- a/gtk/gtkcssmatcher.c
+++ b/gtk/gtkcssmatcher.c
@@ -358,6 +358,18 @@ gtk_css_matcher_node_nth_child (GtkCssNode *node,
{
int pos, x;
+ /* special-case the common "first-child" and "last-child" */
+ if (a == 0)
+ {
+ while (b > 0 && node != NULL)
+ {
+ b--;
+ node = prev_node_func (node);
+ }
+
+ return b == 0 && node == NULL;
+ }
+
/* count nodes */
for (pos = 0; node != NULL; pos++)
node = prev_node_func (node);
@@ -366,9 +378,6 @@ gtk_css_matcher_node_nth_child (GtkCssNode *node,
* and return TRUE if X is integer >= 0 */
x = pos - b;
- if (a == 0)
- return x == 0;
-
if (x % a)
return FALSE;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]