[gtk/wip/otte/css: 80/85] cssnodedeclaration: C99-ify the code



commit f895fc83df616636d8f82ee5b5ccc2568fd359c7
Author: Benjamin Otte <otte redhat com>
Date:   Sun Jan 26 04:17:17 2020 +0100

    cssnodedeclaration: C99-ify the code
    
    zero-sized arrays are allowed now.

 gtk/gtkcssnodedeclaration.c | 43 +++++++++++++------------------------------
 1 file changed, 13 insertions(+), 30 deletions(-)
---
diff --git a/gtk/gtkcssnodedeclaration.c b/gtk/gtkcssnodedeclaration.c
index 1732f5b234..1f80d4c09c 100644
--- a/gtk/gtkcssnodedeclaration.c
+++ b/gtk/gtkcssnodedeclaration.c
@@ -27,15 +27,9 @@ struct _GtkCssNodeDeclaration {
   GQuark id;
   GtkStateFlags state;
   guint n_classes;
-  /* GQuark classes[n_classes]; */
+  GQuark classes[0];
 };
 
-static inline GQuark *
-get_classes (const GtkCssNodeDeclaration *decl)
-{
-  return (GQuark *) (decl + 1);
-}
-
 static inline gsize
 sizeof_node (guint n_classes)
 {
@@ -188,7 +182,6 @@ find_class (const GtkCssNodeDeclaration *decl,
 {
   gint min, max, mid;
   gboolean found = FALSE;
-  GQuark *classes;
   guint pos;
 
   *position = 0;
@@ -198,14 +191,13 @@ find_class (const GtkCssNodeDeclaration *decl,
 
   min = 0;
   max = decl->n_classes - 1;
-  classes = get_classes (decl);
 
   do
     {
       GQuark item;
 
       mid = (min + max) / 2;
-      item = classes[mid];
+      item = decl->classes[mid];
 
       if (class_quark == item)
         {
@@ -238,11 +230,11 @@ gtk_css_node_declaration_add_class (GtkCssNodeDeclaration **decl,
     return FALSE;
 
   gtk_css_node_declaration_make_writable_resize (decl,
-                                                 (char *) &get_classes (*decl)[pos] - (char *) *decl,
+                                                 (char *) &(*decl)->classes[pos] - (char *) *decl,
                                                  sizeof (GQuark),
                                                  0);
   (*decl)->n_classes++;
-  get_classes(*decl)[pos] = class_quark;
+  (*decl)->classes[pos] = class_quark;
 
   return TRUE;
 }
@@ -257,7 +249,7 @@ gtk_css_node_declaration_remove_class (GtkCssNodeDeclaration **decl,
     return FALSE;
 
   gtk_css_node_declaration_make_writable_resize (decl,
-                                                 (char *) &get_classes (*decl)[pos] - (char *) *decl,
+                                                 (char *) &(*decl)->classes[pos] - (char *) *decl,
                                                  0,
                                                  sizeof (GQuark));
   (*decl)->n_classes--;
@@ -272,7 +264,7 @@ gtk_css_node_declaration_clear_classes (GtkCssNodeDeclaration **decl)
     return FALSE;
 
   gtk_css_node_declaration_make_writable_resize (decl,
-                                                 (char *) get_classes (*decl) - (char *) *decl,
+                                                 (char *) (*decl)->classes - (char *) *decl,
                                                  0,
                                                  sizeof (GQuark) * (*decl)->n_classes);
   (*decl)->n_classes = 0;
@@ -285,22 +277,21 @@ gtk_css_node_declaration_has_class (const GtkCssNodeDeclaration *decl,
                                     GQuark                       class_quark)
 {
   guint pos;
-  GQuark *classes = get_classes (decl);
 
   switch (decl->n_classes)
     {
     case 3:
-      if (classes[2] == class_quark)
+      if (decl->classes[2] == class_quark)
         return TRUE;
       G_GNUC_FALLTHROUGH;
 
     case 2:
-      if (classes[1] == class_quark)
+      if (decl->classes[1] == class_quark)
         return TRUE;
       G_GNUC_FALLTHROUGH;
 
     case 1:
-      if (classes[0] == class_quark)
+      if (decl->classes[0] == class_quark)
         return TRUE;
       G_GNUC_FALLTHROUGH;
 
@@ -318,25 +309,23 @@ gtk_css_node_declaration_get_classes (const GtkCssNodeDeclaration *decl,
 {
   *n_classes = decl->n_classes;
 
-  return get_classes (decl);
+  return decl->classes;
 }
 
 guint
 gtk_css_node_declaration_hash (gconstpointer elem)
 {
   const GtkCssNodeDeclaration *decl = elem;
-  GQuark *classes;
   guint hash, i;
   
   hash = GPOINTER_TO_UINT (decl->name);
   hash <<= 5;
   hash ^= GPOINTER_TO_UINT (decl->id);
 
-  classes = get_classes (decl);
   for (i = 0; i < decl->n_classes; i++)
     {
       hash <<= 5;
-      hash += classes[i];
+      hash += decl->classes[i];
     }
 
   hash ^= decl->state;
@@ -350,7 +339,6 @@ gtk_css_node_declaration_equal (gconstpointer elem1,
 {
   const GtkCssNodeDeclaration *decl1 = elem1;
   const GtkCssNodeDeclaration *decl2 = elem2;
-  GQuark *classes1, *classes2;
   guint i;
 
   if (decl1 == decl2)
@@ -368,11 +356,9 @@ gtk_css_node_declaration_equal (gconstpointer elem1,
   if (decl1->n_classes != decl2->n_classes)
     return FALSE;
 
-  classes1 = get_classes (decl1);
-  classes2 = get_classes (decl2);
   for (i = 0; i < decl1->n_classes; i++)
     {
-      if (classes1[i] != classes2[i])
+      if (decl1->classes[i] != decl2->classes[i])
         return FALSE;
     }
 
@@ -395,7 +381,6 @@ void
 gtk_css_node_declaration_print (const GtkCssNodeDeclaration *decl,
                                 GString                     *string)
 {
-  const GQuark *classes;
   guint i;
   char **classnames;
 
@@ -410,11 +395,9 @@ gtk_css_node_declaration_print (const GtkCssNodeDeclaration *decl,
       g_string_append (string, g_quark_to_string (decl->id));
     }
 
-  classes = get_classes (decl);
-
   classnames = g_new (char *, decl->n_classes);
   for (i = 0; i < decl->n_classes; i++)
-    classnames[i] = (char *)g_quark_to_string (classes[i]);
+    classnames[i] = (char *)g_quark_to_string (decl->classes[i]);
 
   g_qsort_with_data (classnames, decl->n_classes, sizeof (char *), cmpstr, NULL);
 


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