summaryrefslogtreecommitdiff
path: root/json-glib
diff options
context:
space:
mode:
Diffstat (limited to 'json-glib')
-rw-r--r--json-glib/Makefile.am1
-rw-r--r--json-glib/json-data.c93
-rw-r--r--json-glib/json-private.h7
-rw-r--r--json-glib/json-types.h53
4 files changed, 138 insertions, 16 deletions
diff --git a/json-glib/Makefile.am b/json-glib/Makefile.am
index 9af73f5..8ca1d4e 100644
--- a/json-glib/Makefile.am
+++ b/json-glib/Makefile.am
@@ -46,6 +46,7 @@ source_h_private = json-private.h
source_c = \
json-array.c \
+ json-data.c \
json-object.c \
json-parser.c \
$(NULL)
diff --git a/json-glib/json-data.c b/json-glib/json-data.c
new file mode 100644
index 0000000..ce6f7ab
--- /dev/null
+++ b/json-glib/json-data.c
@@ -0,0 +1,93 @@
+#include "config.h"
+
+#include <glib.h>
+
+#include "json-types.h"
+#include "json-private.h"
+
+JsonData *
+json_data_new (JsonDataType type)
+{
+ JsonData *data;
+
+ data = g_slice_new (JsonData);
+ data->type = type;
+
+ return data;
+}
+
+void
+json_data_set_object (JsonData *data,
+ JsonObject *object)
+{
+ g_return_if_fail (data != NULL);
+ g_return_if_fail (JSON_DATA_TYPE (data) == JSON_DATA_OBJECT);
+ g_return_if_fail (object != NULL);
+
+ data->data.object = object;
+}
+
+/**
+ * json_data_get_object:
+ * @data: a #JsonData
+ *
+ * Retrieves the #JsonObject stored inside a #JsonData
+ *
+ * Return value: the #JsonObject
+ */
+JsonObject *
+json_data_get_object (JsonData *data)
+{
+ g_return_val_if_fail (data != NULL, NULL);
+ g_return_val_if_fail (JSON_DATA_TYPE (data) == JSON_DATA_OBJECT, NULL);
+
+ return data->data.object;
+}
+
+void
+json_data_set_array (JsonData *data,
+ JsonArray *array)
+{
+ g_return_if_fail (data != NULL);
+ g_return_if_fail (JSON_DATA_TYPE (data) == JSON_DATA_ARRAY);
+ g_return_if_fail (array != NULL);
+
+ data->data.array = array;
+}
+
+/**
+ * json_data_get_array:
+ * @data: a #JsonData
+ *
+ * Retrieves the #JsonArray stored inside a #JsonData
+ *
+ * Return value: the #JsonArray
+ */
+JsonArray *
+json_data_get_array (JsonData *data)
+{
+ g_return_val_if_fail (data != NULL, NULL);
+ g_return_val_if_fail (JSON_DATA_TYPE (data) == JSON_DATA_ARRAY, NULL);
+
+ return data->data.array;
+}
+
+void
+json_data_free (JsonData *data)
+{
+ if (data)
+ {
+ switch (data->type)
+ {
+ case JSON_DATA_OBJECT:
+ json_object_unref (data->data.object);
+ break;
+
+ case JSON_DATA_ARRAY:
+ json_array_unref (data->data.array);
+ break;
+ }
+
+ g_slice_free (JsonData, data);
+ }
+}
diff --git a/json-glib/json-private.h b/json-glib/json-private.h
index 962ea7b..76d27d0 100644
--- a/json-glib/json-private.h
+++ b/json-glib/json-private.h
@@ -6,6 +6,13 @@
G_BEGIN_DECLS
+JsonData *json_data_new (JsonDataType type);
+void json_data_set_object (JsonData *data,
+ JsonObject *object);
+void json_data_set_array (JsonData *data,
+ JsonArray *array);
+void json_data_free (JsonData *data);
+
JsonObject *json_object_new (void);
void json_object_add_member (JsonObject *object,
const gchar *member_name,
diff --git a/json-glib/json-types.h b/json-glib/json-types.h
index 28e2c33..f8e61a2 100644
--- a/json-glib/json-types.h
+++ b/json-glib/json-types.h
@@ -5,27 +5,48 @@
G_BEGIN_DECLS
+#define JSON_DATA_TYPE(data) (((JsonData *) (data))->type)
#define JSON_TYPE_OBJECT (json_object_get_type ())
#define JSON_TYPE_ARRAY (json_array_get_type ())
typedef struct _JsonObject JsonObject;
typedef struct _JsonArray JsonArray;
-
-JsonObject *json_object_ref (JsonObject *object);
-void json_object_unref (JsonObject *object);
-GList * json_object_get_members (JsonObject *object);
-GValue * json_object_get_member (JsonObject *object,
- const gchar *member_name);
-gboolean json_object_has_member (JsonObject *object,
- const gchar *member_name);
-guint json_object_get_size (JsonObject *object);
-
-JsonArray * json_array_ref (JsonArray *array);
-void json_array_unref (JsonArray *array);
-GList * json_array_get_elements (JsonArray *array);
-GValue * json_array_get_element (JsonArray *array,
- guint index_);
-guint json_array_get_length (JsonArray *array);
+typedef struct _JsonData JsonData;
+
+typedef enum {
+ JSON_DATA_OBJECT,
+ JSON_DATA_ARRAY
+} JsonDataType;
+
+struct _JsonData
+{
+ /*< private >*/
+ JsonDataType type;
+
+ union {
+ JsonObject *object;
+ JsonArray *array;
+ } data;
+};
+
+JsonObject * json_data_get_object (JsonData *data);
+JsonArray * json_data_get_array (JsonData *data);
+
+JsonObject * json_object_ref (JsonObject *object);
+void json_object_unref (JsonObject *object);
+GList * json_object_get_members (JsonObject *object);
+GValue * json_object_get_member (JsonObject *object,
+ const gchar *member_name);
+gboolean json_object_has_member (JsonObject *object,
+ const gchar *member_name);
+guint json_object_get_size (JsonObject *object);
+
+JsonArray * json_array_ref (JsonArray *array);
+void json_array_unref (JsonArray *array);
+GList * json_array_get_elements (JsonArray *array);
+GValue * json_array_get_element (JsonArray *array,
+ guint index_);
+guint json_array_get_length (JsonArray *array);
G_END_DECLS