diff options
Diffstat (limited to 'json-glib')
-rw-r--r-- | json-glib/Makefile.am | 1 | ||||
-rw-r--r-- | json-glib/json-data.c | 93 | ||||
-rw-r--r-- | json-glib/json-private.h | 7 | ||||
-rw-r--r-- | json-glib/json-types.h | 53 |
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 |