From c11ebd32f73a1e21d6097bf9eba8e12f7e35497a Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Fri, 21 Sep 2007 21:07:12 +0100 Subject: Add JsonData, an opaque container for JSON data types JsonData is like GValue, but it stores JSON data types (objects and arrays) and allows us to retrieve them safely. This way we can actually know the type of the objects returned by the parser and by the other object walking functions. --- json-glib/json-data.c | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 json-glib/json-data.c (limited to 'json-glib/json-data.c') 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 + +#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); + } +} -- cgit v1.2.1