[gnome-builder] configuration: add object getter/setter for internal data



commit fb2b4ab3ade073d5976ca04714a6a47c8e417c43
Author: Christian Hergert <chergert redhat com>
Date:   Thu Nov 3 13:14:56 2016 -0700

    configuration: add object getter/setter for internal data

 libide/buildsystem/ide-configuration.c |   52 ++++++++++++++++++++++++++++++++
 libide/buildsystem/ide-configuration.h |    5 +++
 tests/test-ide-configuration.c         |   16 ++++++++++
 3 files changed, 73 insertions(+), 0 deletions(-)
---
diff --git a/libide/buildsystem/ide-configuration.c b/libide/buildsystem/ide-configuration.c
index 08645da..8f9df9d 100644
--- a/libide/buildsystem/ide-configuration.c
+++ b/libide/buildsystem/ide-configuration.c
@@ -1152,3 +1152,55 @@ ide_configuration_set_internal_int64 (IdeConfiguration *self,
   v = ide_configuration_reset_internal_value (self, key, G_TYPE_INT64);
   g_value_set_int64 (v, value);
 }
+
+/**
+ * ide_configuration_get_internal_object:
+ * @self: An #IdeConfiguration
+ * @key: The key to get
+ *
+ * Gets the value associated with @key if it is a #GObject.
+ *
+ * Returns: (nullable) (transfer none) (type GObject.Object): A #GObject or %NULL.
+ */
+gpointer
+ide_configuration_get_internal_object (IdeConfiguration *self,
+                                       const gchar      *key)
+{
+  const GValue *v;
+
+  g_return_val_if_fail (IDE_IS_CONFIGURATION (self), NULL);
+  g_return_val_if_fail (key != NULL, NULL);
+
+  if (v != NULL && G_VALUE_HOLDS_OBJECT (v))
+    return g_value_get_object (v);
+
+  return NULL;
+}
+
+/**
+ * ide_configuration_set_internal_object:
+ * @self: A #IdeConfiguration
+ * @key: the key to set
+ * @instance: (type GObject.Object) (nullable): A #GObject or %NULL
+ *
+ * Sets the value for @key to @instance.
+ */
+void
+ide_configuration_set_internal_object (IdeConfiguration *self,
+                                       const gchar      *key,
+                                       gpointer          instance)
+{
+  GValue *v;
+  GType type;
+
+  g_return_if_fail (IDE_IS_CONFIGURATION (self));
+  g_return_if_fail (key != NULL);
+
+  if (instance != NULL)
+    type = G_OBJECT_TYPE (instance);
+  else
+    type = G_TYPE_OBJECT;
+
+  v = ide_configuration_reset_internal_value (self, key, type);
+  g_value_set_object (v, instance);
+}
diff --git a/libide/buildsystem/ide-configuration.h b/libide/buildsystem/ide-configuration.h
index 7acc2dc..9e629d4 100644
--- a/libide/buildsystem/ide-configuration.h
+++ b/libide/buildsystem/ide-configuration.h
@@ -96,6 +96,11 @@ gint64                ide_configuration_get_internal_int64   (IdeConfiguration
 void                  ide_configuration_set_internal_int64   (IdeConfiguration  *self,
                                                               const gchar       *key,
                                                               gint64             value);
+gpointer              ide_configuration_get_internal_object  (IdeConfiguration  *self,
+                                                              const gchar       *key);
+void                  ide_configuration_set_internal_object  (IdeConfiguration  *self,
+                                                              const gchar       *key,
+                                                              gpointer           instance);
 
 G_END_DECLS
 
diff --git a/tests/test-ide-configuration.c b/tests/test-ide-configuration.c
index 4517ee8..f51fe50 100644
--- a/tests/test-ide-configuration.c
+++ b/tests/test-ide-configuration.c
@@ -23,6 +23,7 @@ test_internal (void)
 {
   g_autoptr(IdeConfiguration) configuration = NULL;
   g_autoptr(IdeConfiguration) copy = NULL;
+  g_autoptr(GObject) dummy = NULL;
 
   configuration = g_object_new (IDE_TYPE_CONFIGURATION,
                                 "id", "my-configuration",
@@ -33,30 +34,35 @@ test_internal (void)
   g_assert_cmpint (ide_configuration_get_internal_int (configuration, "foo-string"), ==, 0);
   g_assert_cmpint (ide_configuration_get_internal_int64 (configuration, "foo-string"), ==, 0);
   g_assert_cmpint (ide_configuration_get_internal_boolean (configuration, "foo-string"), ==, FALSE);
+  g_assert (ide_configuration_get_internal_object (configuration, "foo-string") == NULL);
 
   ide_configuration_set_internal_string (configuration, "foo-string", "foo");
   g_assert_cmpstr (ide_configuration_get_internal_string (configuration, "foo-string"), ==, "foo");
   g_assert_cmpint (ide_configuration_get_internal_int (configuration, "foo-string"), ==, 0);
   g_assert_cmpint (ide_configuration_get_internal_int64 (configuration, "foo-string"), ==, 0);
   g_assert_cmpint (ide_configuration_get_internal_boolean (configuration, "foo-string"), ==, FALSE);
+  g_assert (ide_configuration_get_internal_object (configuration, "foo-string") == NULL);
 
   ide_configuration_set_internal_int (configuration, "foo-string", 123);
   g_assert_cmpstr (ide_configuration_get_internal_string (configuration, "foo-string"), ==, NULL);
   g_assert_cmpint (ide_configuration_get_internal_int (configuration, "foo-string"), ==, 123);
   g_assert_cmpint (ide_configuration_get_internal_int64 (configuration, "foo-string"), ==, 0);
   g_assert_cmpint (ide_configuration_get_internal_boolean (configuration, "foo-string"), ==, FALSE);
+  g_assert (ide_configuration_get_internal_object (configuration, "foo-string") == NULL);
 
   ide_configuration_set_internal_int64 (configuration, "foo-string", 123);
   g_assert_cmpstr (ide_configuration_get_internal_string (configuration, "foo-string"), ==, NULL);
   g_assert_cmpint (ide_configuration_get_internal_int (configuration, "foo-string"), ==, 0);
   g_assert_cmpint (ide_configuration_get_internal_int64 (configuration, "foo-string"), ==, 123);
   g_assert_cmpint (ide_configuration_get_internal_boolean (configuration, "foo-string"), ==, FALSE);
+  g_assert (ide_configuration_get_internal_object (configuration, "foo-string") == NULL);
 
   ide_configuration_set_internal_boolean (configuration, "foo-string", TRUE);
   g_assert_cmpstr (ide_configuration_get_internal_string (configuration, "foo-string"), ==, NULL);
   g_assert_cmpint (ide_configuration_get_internal_int (configuration, "foo-string"), ==, 0);
   g_assert_cmpint (ide_configuration_get_internal_int64 (configuration, "foo-string"), ==, 0);
   g_assert_cmpint (ide_configuration_get_internal_boolean (configuration, "foo-string"), ==, TRUE);
+  g_assert (ide_configuration_get_internal_object (configuration, "foo-string") == NULL);
 
   copy = ide_configuration_duplicate (configuration);
   g_assert (copy != NULL);
@@ -66,6 +72,16 @@ test_internal (void)
   g_object_unref (copy);
   g_assert (copy == NULL);
 
+  dummy = g_object_new (G_TYPE_OBJECT, NULL);
+  g_object_add_weak_pointer (G_OBJECT (dummy), (gpointer *)&dummy);
+
+  ide_configuration_set_internal_object (configuration, "foo-object", dummy);
+  g_assert (ide_configuration_get_internal_object (configuration, "foo-object") == dummy);
+  g_object_unref (dummy);
+  g_assert (dummy != NULL);
+  ide_configuration_set_internal_object (configuration, "foo-object", NULL);
+  g_assert (dummy == NULL);
+
   g_object_add_weak_pointer (G_OBJECT (configuration), (gpointer *)&configuration);
   g_object_unref (configuration);
   g_assert (configuration == NULL);


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