summaryrefslogtreecommitdiff
path: root/json-glib/json-generator.c
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@linux.intel.com>2011-06-02 14:46:35 +0100
committerEmmanuele Bassi <ebassi@linux.intel.com>2011-06-02 14:46:35 +0100
commit3e6fc54b662d55c4748a4c63669fef4f2ef020a0 (patch)
treede8020e4ee2305923201bd7a4e12216251eb68e2 /json-glib/json-generator.c
parentc3b367ca8bac245712f8390acab1b38a314972a9 (diff)
downloadjson-glib-wip/g-property.tar.gz
Use GPropertywip/g-property
Instead of the GParamSpec API.
Diffstat (limited to 'json-glib/json-generator.c')
-rw-r--r--json-glib/json-generator.c235
1 files changed, 47 insertions, 188 deletions
diff --git a/json-glib/json-generator.c b/json-glib/json-generator.c
index 6a36bcf..72c6cf9 100644
--- a/json-glib/json-generator.c
+++ b/json-glib/json-generator.c
@@ -51,19 +51,19 @@ struct _JsonGeneratorPrivate
guint indent;
gunichar indent_char;
- guint pretty : 1;
+ gboolean pretty;
};
enum
{
- PROP_0,
+ PROP_INVALID,
- PROP_PRETTY,
- PROP_INDENT,
- PROP_ROOT,
- PROP_INDENT_CHAR,
+ PRETTY,
+ INDENT,
+ ROOT,
+ INDENT_CHAR,
- PROP_LAST
+ LAST_PROP
};
static gchar *dump_value (JsonGenerator *generator,
@@ -107,7 +107,7 @@ static const char json_exceptions[] = {
'\0' /* g_strescape() expects a NUL-terminated string */
};
-static GParamSpec *generator_props[PROP_LAST] = { NULL, };
+static GParamSpec *generator_props[LAST_PROP] = { NULL, };
G_DEFINE_TYPE (JsonGenerator, json_generator, G_TYPE_OBJECT);
@@ -129,66 +129,6 @@ json_generator_finalize (GObject *gobject)
}
static void
-json_generator_set_property (GObject *gobject,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- JsonGenerator *generator = JSON_GENERATOR (gobject);
-
- switch (prop_id)
- {
- case PROP_PRETTY:
- json_generator_set_pretty (generator, g_value_get_boolean (value));
- break;
-
- case PROP_INDENT:
- json_generator_set_indent (generator, g_value_get_uint (value));
- break;
-
- case PROP_INDENT_CHAR:
- json_generator_set_indent_char (generator, g_value_get_uint (value));
- break;
-
- case PROP_ROOT:
- json_generator_set_root (generator, g_value_get_boxed (value));
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
- break;
- }
-}
-
-static void
-json_generator_get_property (GObject *gobject,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- JsonGeneratorPrivate *priv = JSON_GENERATOR (gobject)->priv;
-
- switch (prop_id)
- {
- case PROP_PRETTY:
- g_value_set_boolean (value, priv->pretty);
- break;
- case PROP_INDENT:
- g_value_set_uint (value, priv->indent);
- break;
- case PROP_INDENT_CHAR:
- g_value_set_uint (value, priv->indent_char);
- break;
- case PROP_ROOT:
- g_value_set_boxed (value, priv->root);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
- break;
- }
-}
-
-static void
json_generator_class_init (JsonGeneratorClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
@@ -202,25 +142,21 @@ json_generator_class_init (JsonGeneratorClass *klass)
* newlines. The indentation level can be controlled by using the
* JsonGenerator:indent property
*/
- generator_props[PROP_PRETTY] =
- g_param_spec_boolean ("pretty",
- "Pretty",
- "Pretty-print the output",
- FALSE,
- G_PARAM_READWRITE);
+ generator_props[PRETTY] =
+ g_boolean_property_new ("pretty", G_PROPERTY_READWRITE,
+ G_STRUCT_OFFSET (JsonGeneratorPrivate, pretty),
+ NULL, NULL);
/**
* JsonGenerator:indent:
*
* Number of spaces to be used to indent when pretty printing.
*/
- generator_props[PROP_INDENT] =
- g_param_spec_uint ("indent",
- "Indent",
- "Number of indentation spaces",
- 0, G_MAXUINT,
- 2,
- G_PARAM_READWRITE);
+ generator_props[INDENT] =
+ g_uint_property_new ("indent", G_PROPERTY_READWRITE,
+ G_STRUCT_OFFSET (JsonGeneratorPrivate, indent),
+ NULL, NULL);
+ g_property_set_default (G_PROPERTY (generator_props[INDENT]), 2);
/**
* JsonGenerator:root:
@@ -230,12 +166,12 @@ json_generator_class_init (JsonGeneratorClass *klass)
*
* Since: 0.4
*/
- generator_props[PROP_ROOT] =
- g_param_spec_boxed ("root",
- "Root",
- "Root of the JSON data tree",
- JSON_TYPE_NODE,
- G_PARAM_READWRITE);
+ generator_props[ROOT] =
+ g_boxed_property_new ("root", G_PROPERTY_READWRITE,
+ G_STRUCT_OFFSET (JsonGeneratorPrivate, root),
+ NULL, NULL);
+ g_property_set_prerequisite (G_PROPERTY (generator_props[ROOT]),
+ JSON_TYPE_NODE);
/**
* JsonGenerator:indent-char:
@@ -244,17 +180,15 @@ json_generator_class_init (JsonGeneratorClass *klass)
*
* Since: 0.6
*/
- generator_props[PROP_INDENT_CHAR] =
- g_param_spec_unichar ("indent-char",
- "Indent Char",
- "Character that should be used when indenting",
- ' ',
- G_PARAM_READWRITE);
-
- gobject_class->set_property = json_generator_set_property;
- gobject_class->get_property = json_generator_get_property;
+ generator_props[INDENT_CHAR] =
+ g_unichar_property_new ("indent-char", G_PROPERTY_READWRITE,
+ G_STRUCT_OFFSET (JsonGeneratorPrivate, indent_char),
+ NULL, NULL);
+ g_property_set_default (G_PROPERTY (generator_props[INDENT_CHAR]), ' ');
+
gobject_class->finalize = json_generator_finalize;
- g_object_class_install_properties (gobject_class, PROP_LAST, generator_props);
+
+ g_object_class_install_properties (gobject_class, LAST_PROP, generator_props);
}
static void
@@ -696,16 +630,7 @@ json_generator_set_root (JsonGenerator *generator,
{
g_return_if_fail (JSON_IS_GENERATOR (generator));
- if (generator->priv->root != NULL)
- {
- json_node_free (generator->priv->root);
- generator->priv->root = NULL;
- }
-
- if (node != NULL)
- generator->priv->root = json_node_copy (node);
-
- g_object_notify_by_pspec (G_OBJECT (generator), generator_props[PROP_ROOT]);
+ g_property_set (G_PROPERTY (generator_props[ROOT]), generator, node);
}
/**
@@ -723,15 +648,19 @@ json_generator_set_root (JsonGenerator *generator,
JsonNode *
json_generator_get_root (JsonGenerator *generator)
{
+ JsonNode *retval = NULL;
+
g_return_val_if_fail (JSON_IS_GENERATOR (generator), NULL);
- return generator->priv->root;
+ g_property_get (G_PROPERTY (generator_props[ROOT]), generator, &retval);
+
+ return retval;
}
/**
* json_generator_set_pretty:
- * @generator: a #JsonGenerator
- * @is_pretty: whether the generated string should be pretty printed
+ * @self: a #JsonGenerator
+ * @value: whether the generated string should be pretty printed
*
* Sets whether the generated JSON should be pretty printed, using the
* indentation character specified in the #JsonGenerator:indent-char
@@ -739,29 +668,10 @@ json_generator_get_root (JsonGenerator *generator)
*
* Since: 0.14
*/
-void
-json_generator_set_pretty (JsonGenerator *generator,
- gboolean is_pretty)
-{
- JsonGeneratorPrivate *priv;
-
- g_return_if_fail (JSON_IS_GENERATOR (generator));
-
- priv = generator->priv;
-
- is_pretty = !!is_pretty;
-
- if (priv->pretty != is_pretty)
- {
- priv->pretty = is_pretty;
-
- g_object_notify_by_pspec (G_OBJECT (generator), generator_props[PROP_PRETTY]);
- }
-}
/**
* json_generator_get_pretty:
- * @generator: a #JsonGenerator
+ * @self: a #JsonGenerator
*
* Retrieves the value set using json_generator_set_pretty().
*
@@ -770,41 +680,19 @@ json_generator_set_pretty (JsonGenerator *generator,
*
* Since: 0.14
*/
-gboolean
-json_generator_get_pretty (JsonGenerator *generator)
-{
- g_return_val_if_fail (JSON_IS_GENERATOR (generator), FALSE);
- return generator->priv->pretty;
-}
+G_DEFINE_PROPERTY_GET_SET (JsonGenerator, json_generator, gboolean, pretty)
/**
* json_generator_set_indent:
- * @generator: a #JsonGenerator
- * @indent_level: the number of repetitions of the indentation character
+ * @self: a #JsonGenerator
+ * @value: the number of repetitions of the indentation character
* that should be applied when pretty printing
*
* Sets the number of repetitions for each indentation level.
*
* Since: 0.14
*/
-void
-json_generator_set_indent (JsonGenerator *generator,
- guint indent_level)
-{
- JsonGeneratorPrivate *priv;
-
- g_return_if_fail (JSON_IS_GENERATOR (generator));
-
- priv = generator->priv;
-
- if (priv->indent != indent_level)
- {
- priv->indent = indent_level;
-
- g_object_notify_by_pspec (G_OBJECT (generator), generator_props[PROP_INDENT]);
- }
-}
/**
* json_generator_get_indent:
@@ -816,40 +704,17 @@ json_generator_set_indent (JsonGenerator *generator,
*
* Since: 0.14
*/
-guint
-json_generator_get_indent (JsonGenerator *generator)
-{
- g_return_val_if_fail (JSON_IS_GENERATOR (generator), FALSE);
-
- return generator->priv->indent;
-}
+G_DEFINE_PROPERTY_GET_SET (JsonGenerator, json_generator, guint, indent)
/**
* json_generator_set_indent_char:
- * @generator: a #JsonGenerator
- * @indent_char: a Unicode character to be used when indenting
+ * @self: a #JsonGenerator
+ * @value: a Unicode character to be used when indenting
*
* Sets the character to be used when indenting
*
* Since: 0.14
*/
-void
-json_generator_set_indent_char (JsonGenerator *generator,
- gunichar indent_char)
-{
- JsonGeneratorPrivate *priv;
-
- g_return_if_fail (JSON_IS_GENERATOR (generator));
-
- priv = generator->priv;
-
- if (priv->indent_char != indent_char)
- {
- priv->indent_char = indent_char;
-
- g_object_notify_by_pspec (G_OBJECT (generator), generator_props[PROP_INDENT_CHAR]);
- }
-}
/**
* json_generator_get_indent_char:
@@ -861,10 +726,4 @@ json_generator_set_indent_char (JsonGenerator *generator,
*
* Since: 0.14
*/
-gunichar
-json_generator_get_indent_char (JsonGenerator *generator)
-{
- g_return_val_if_fail (JSON_IS_GENERATOR (generator), FALSE);
-
- return generator->priv->indent_char;
-}
+G_DEFINE_PROPERTY_GET_SET (JsonGenerator, json_generator, gunichar, indent_char)