diff options
| author | Emmanuele Bassi <ebassi@openedhand.com> | 2007-09-21 21:07:12 +0100 |
|---|---|---|
| committer | Emmanuele Bassi <ebassi@openedhand.com> | 2007-09-21 21:07:12 +0100 |
| commit | c11ebd32f73a1e21d6097bf9eba8e12f7e35497a (patch) | |
| tree | 94dee657fce374bb1b44c3362ead937aab7fbb29 /json-glib/json-data.c | |
| parent | f661c7e1a04c2fb198279030c9dd812f357240a3 (diff) | |
| download | json-glib-c11ebd32f73a1e21d6097bf9eba8e12f7e35497a.tar.gz | |
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.
Diffstat (limited to 'json-glib/json-data.c')
| -rw-r--r-- | json-glib/json-data.c | 93 |
1 files changed, 93 insertions, 0 deletions
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); + } +} |
