[glib] Add a G_DEFINE_QUARK macro



commit 702b44886572c657d552f3ec15e9794acd4265e5
Author: Matthias Clasen <mclasen redhat com>
Date:   Mon Aug 27 23:34:30 2012 -0400

    Add a G_DEFINE_QUARK macro
    
    https://bugzilla.gnome.org/show_bug.cgi?id=627240

 docs/reference/glib/glib-sections.txt |    1 +
 glib/gquark.c                         |   12 ++++++++++++
 glib/gquark.h                         |   13 +++++++++++++
 3 files changed, 26 insertions(+), 0 deletions(-)
---
diff --git a/docs/reference/glib/glib-sections.txt b/docs/reference/glib/glib-sections.txt
index ddede24..57e0533 100644
--- a/docs/reference/glib/glib-sections.txt
+++ b/docs/reference/glib/glib-sections.txt
@@ -2538,6 +2538,7 @@ g_node_destroy
 <TITLE>Quarks</TITLE>
 <FILE>quarks</FILE>
 GQuark
+G_DEFINE_QUARK
 g_quark_from_string
 g_quark_from_static_string
 g_quark_to_string
diff --git a/glib/gquark.c b/glib/gquark.c
index 2afbf8a..782388a 100644
--- a/glib/gquark.c
+++ b/glib/gquark.c
@@ -93,6 +93,18 @@ static gint           quark_block_offset = 0;
  **/
 
 /**
+ * G_DEFINE_QUARK:
+ * @QN: the string to return a #GQuark for
+ * @q_n: prefix for the function name
+ *
+ * A convenience macro which defines a function returning the
+ * #GQuark for the string @QN. The function will be named
+ * @q_n<!-- -->_quark().
+ *
+ * Since: 2.34
+ */
+
+/**
  * g_quark_try_string:
  * @string: (allow-none): a string.
  * @Returns: the #GQuark associated with the string, or 0 if @string is
diff --git a/glib/gquark.h b/glib/gquark.h
index 78b9546..7689447 100644
--- a/glib/gquark.h
+++ b/glib/gquark.h
@@ -44,6 +44,19 @@ GQuark                g_quark_from_static_string (const gchar *string);
 GQuark                g_quark_from_string        (const gchar *string);
 const gchar *         g_quark_to_string          (GQuark       quark) G_GNUC_CONST;
 
+#define G_DEFINE_QUARK(QN, q_n)                                         \
+GQuark                                                                  \
+q_n##_quark (void)                                                      \
+{                                                                       \
+  static volatile gsize g_define_quark__volatile = 0;                   \
+  if (g_once_init_enter (&g_define_quark__volatile))                    \
+    {                                                                   \
+      GQuark g_define_quark = g_quark_from_string (#QN);                \
+      g_once_init_leave (&g_define_quark__volatile, g_define_quark);    \
+    }                                                                   \
+  return g_define_quark__volatile;                                      \
+}
+
 const gchar *         g_intern_string            (const gchar *string);
 const gchar *         g_intern_static_string     (const gchar *string);
 



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