[gtk/gbsneto/css-dequeue-fix: 1/3] Revert "cssprovider: Pass a GtkArray around when matching"



commit fe6cd6d46a9ca4d8a36a9850bd562c8b6cd5247e
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Thu May 7 15:23:40 2020 -0300

    Revert "cssprovider: Pass a GtkArray around when matching"
    
    This reverts commit cdb4d7112593191611d0666c3da82ee2d036b9e0.

 gtk/gtkarrayimplprivate.h   | 29 ++---------------------------
 gtk/gtkcssprovider.c        | 23 ++++++++++-------------
 gtk/gtkcssselector.c        | 33 ++++++++++++++++++---------------
 gtk/gtkcssselectorprivate.h |  6 ++----
 4 files changed, 32 insertions(+), 59 deletions(-)
---
diff --git a/gtk/gtkarrayimplprivate.h b/gtk/gtkarrayimplprivate.h
index 74c810a842..cfc497e1ab 100644
--- a/gtk/gtkarrayimplprivate.h
+++ b/gtk/gtkarrayimplprivate.h
@@ -30,8 +30,8 @@ gtk_array_init (GtkArray   *self,
 }
 
 static inline void *
-gtk_array_index (const GtkArray *self,
-                 guint           index)
+gtk_array_index (GtkArray *self,
+                 guint     index)
 {
   g_assert (index < self->len);
 
@@ -68,31 +68,6 @@ gtk_array_add (GtkArray *self,
   self->len++; /* We still count self->len */
 }
 
-static inline void
-gtk_array_insert (GtkArray *self,
-                  guint     index,
-                  void     *element)
-{
-  if (index >= self->len)
-    {
-      gtk_array_add (self, element);
-      return;
-    }
-
-  if (G_LIKELY (self->len < self->reserved_size))
-    {
-      memmove (self->stack_space + index + 1, self->stack_space + index,
-               sizeof (void *) * (self->len - index));
-      self->stack_space[index] = element;
-      self->len++;
-      return;
-    }
-
-  g_assert (self->ptr_array);
-  g_ptr_array_insert (self->ptr_array, index, element);
-  self->len++;
-}
-
 static inline void
 gtk_array_free (GtkArray       *self,
                 GDestroyNotify  element_free_func)
diff --git a/gtk/gtkcssprovider.c b/gtk/gtkcssprovider.c
index 90db5fde50..829e2ec42c 100644
--- a/gtk/gtkcssprovider.c
+++ b/gtk/gtkcssprovider.c
@@ -391,8 +391,8 @@ gtk_css_provider_init (GtkCssProvider *css_provider)
 
 static void
 verify_tree_match_results (GtkCssProvider *provider,
-                           GtkCssNode     *node,
-                           GtkArray       *tree_rules)
+                          GtkCssNode     *node,
+                          GPtrArray      *tree_rules)
 {
 #ifdef VERIFY_TREE
   GtkCssProviderPrivate *priv = gtk_css_provider_get_instance_private (provider);
@@ -408,7 +408,7 @@ verify_tree_match_results (GtkCssProvider *provider,
 
       for (j = 0; j < tree_rules->len; j++)
        {
-         if (ruleset == gtk_array_index (tree_rules, j))
+         if (ruleset == tree_rules->pdata[j])
            {
              found = TRUE;
              break;
@@ -458,22 +458,19 @@ gtk_css_style_provider_lookup (GtkStyleProvider             *provider,
   GtkCssRuleset *ruleset;
   guint j;
   int i;
-  GtkArray tree_rules_array;
-  GtkCssRuleset *rules_stack[32];
+  GPtrArray *tree_rules;
 
   if (_gtk_css_selector_tree_is_empty (priv->tree))
     return;
 
-  gtk_array_init (&tree_rules_array, (void**)rules_stack, 32);
-  _gtk_css_selector_tree_match_all (priv->tree, filter, node, &tree_rules_array);
-
-  if (tree_rules_array.len > 0)
+  tree_rules = _gtk_css_selector_tree_match_all (priv->tree, filter, node);
+  if (tree_rules)
     {
-      verify_tree_match_results (css_provider, node, &tree_rules_array);
+      verify_tree_match_results (css_provider, node, tree_rules);
 
-      for (i = tree_rules_array.len - 1; i >= 0; i--)
+      for (i = tree_rules->len - 1; i >= 0; i--)
         {
-          ruleset = gtk_array_index (&tree_rules_array, i);
+          ruleset = tree_rules->pdata[i];
 
           if (ruleset->styles == NULL)
             continue;
@@ -493,7 +490,7 @@ gtk_css_style_provider_lookup (GtkStyleProvider             *provider,
             }
         }
 
-      gtk_array_free (&tree_rules_array, NULL);
+      g_ptr_array_free (tree_rules, TRUE);
     }
 
   if (change)
diff --git a/gtk/gtkcssselector.c b/gtk/gtkcssselector.c
index b5f348d268..5c1572e038 100644
--- a/gtk/gtkcssselector.c
+++ b/gtk/gtkcssselector.c
@@ -152,23 +152,21 @@ gtk_css_selector_tree_get_matches (const GtkCssSelectorTree *tree)
 }
 
 static void
-gtk_array_insert_sorted (GtkArray *array,
-                         gpointer  data)
+g_ptr_array_insert_sorted (GPtrArray *array,
+                           gpointer   data)
 {
-  guint i;
+  gint i;
 
   for (i = 0; i < array->len; i++)
     {
-      gpointer elem = gtk_array_index (array, i);
-
-      if (data == elem)
+      if (data == array->pdata[i])
         return;
 
-      if (data < elem)
+      if (data < array->pdata[i])
         break;
     }
 
-  gtk_array_insert (array, i, data);
+  g_ptr_array_insert (array, i, data);
 }
 
 static inline gboolean
@@ -1877,7 +1875,7 @@ gtk_css_selector_tree_get_change (const GtkCssSelectorTree     *tree,
 
 static void
 gtk_css_selector_tree_found_match (const GtkCssSelectorTree  *tree,
-                                   GtkArray                  *results)
+                                  GPtrArray                **results)
 {
   int i;
   gpointer *matches;
@@ -1886,8 +1884,11 @@ gtk_css_selector_tree_found_match (const GtkCssSelectorTree  *tree,
   if (!matches)
     return;
 
+  if (*results == NULL)
+    *results = g_ptr_array_sized_new (16);
+
   for (i = 0; matches[i] != NULL; i++)
-    gtk_array_insert_sorted (results, matches[i]);
+    g_ptr_array_insert_sorted (*results, matches[i]);
 }
 
 static gboolean
@@ -1895,7 +1896,7 @@ gtk_css_selector_tree_match (const GtkCssSelectorTree      *tree,
                              const GtkCountingBloomFilter  *filter,
                              gboolean                       match_filter,
                              GtkCssNode                    *node,
-                             GtkArray                      *results)
+                             GPtrArray                    **results)
 {
   const GtkCssSelectorTree *prev;
   GtkCssNode *child;
@@ -1928,20 +1929,22 @@ gtk_css_selector_tree_match (const GtkCssSelectorTree      *tree,
   return TRUE;
 }
 
-void
+GPtrArray *
 _gtk_css_selector_tree_match_all (const GtkCssSelectorTree     *tree,
                                   const GtkCountingBloomFilter *filter,
-                                  GtkCssNode                   *node,
-                                  GtkArray                     *out_tree_rules)
+                                  GtkCssNode                   *node)
 {
   const GtkCssSelectorTree *iter;
+  GPtrArray *results = NULL;
 
   for (iter = tree;
        iter != NULL;
        iter = gtk_css_selector_tree_get_sibling (iter))
     {
-      gtk_css_selector_tree_match (iter, filter, FALSE, node, out_tree_rules);
+      gtk_css_selector_tree_match (iter, filter, FALSE, node, &results);
     }
+
+  return results;
 }
 
 gboolean
diff --git a/gtk/gtkcssselectorprivate.h b/gtk/gtkcssselectorprivate.h
index f635066435..e351beb915 100644
--- a/gtk/gtkcssselectorprivate.h
+++ b/gtk/gtkcssselectorprivate.h
@@ -21,7 +21,6 @@
 #include "gtk/gtkcountingbloomfilterprivate.h"
 #include "gtk/gtkcsstypesprivate.h"
 #include "gtk/gtkcssparserprivate.h"
-#include "gtk/gtkarrayimplprivate.h"
 
 G_BEGIN_DECLS
 
@@ -43,10 +42,9 @@ int               _gtk_css_selector_compare         (const GtkCssSelector   *a,
                                                      const GtkCssSelector   *b);
 
 void         _gtk_css_selector_tree_free             (GtkCssSelectorTree       *tree);
-void         _gtk_css_selector_tree_match_all        (const GtkCssSelectorTree *tree,
+GPtrArray *  _gtk_css_selector_tree_match_all        (const GtkCssSelectorTree *tree,
                                                       const GtkCountingBloomFilter *filter,
-                                                      GtkCssNode                   *node,
-                                                      GtkArray                     *out_tree_rules);
+                                                     GtkCssNode               *node);
 GtkCssChange gtk_css_selector_tree_get_change_all    (const GtkCssSelectorTree *tree,
                                                       const GtkCountingBloomFilter *filter,
                                                      GtkCssNode               *node);


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