diff options
| author | Emmanuele Bassi <ebassi@linux.intel.com> | 2010-08-12 16:09:45 +0100 | 
|---|---|---|
| committer | Emmanuele Bassi <ebassi@linux.intel.com> | 2010-08-12 16:09:45 +0100 | 
| commit | 0281176789b38973b1723f752070cb0e7340055d (patch) | |
| tree | 3d4d72d221e88a9b3883865acdbf85d8dc8e7110 /json-glib/json-reader.c | |
| parent | 149d2f3925ca798886f2137ae73488f7e2e6386b (diff) | |
| download | json-glib-0281176789b38973b1723f752070cb0e7340055d.tar.gz | |
reader: Do not wrap JsonParser
Since JsonParser has far more methods for parsing a JSON stream we
should just make JsonReader an API for reading an already parsed JSON
tree - in the same way that JsonBuilder does not generate the
stringified version of the JSON tree it builds.
Diffstat (limited to 'json-glib/json-reader.c')
| -rw-r--r-- | json-glib/json-reader.c | 90 | 
1 files changed, 29 insertions, 61 deletions
| diff --git a/json-glib/json-reader.c b/json-glib/json-reader.c index d709336..8bf7990 100644 --- a/json-glib/json-reader.c +++ b/json-glib/json-reader.c @@ -75,7 +75,6 @@  #include "json-types-private.h"  #include "json-debug.h" -#include "json-parser.h"  #define json_reader_return_if_error_set(r)      G_STMT_START {  \          if (((JsonReader *) (r))->priv->error != NULL)          \ @@ -87,8 +86,6 @@  struct _JsonReaderPrivate  { -  JsonParser *parser; -    JsonNode *root;    JsonNode *current_node; @@ -104,11 +101,9 @@ json_reader_dispose (GObject *gobject)  {    JsonReaderPrivate *priv = JSON_READER (gobject)->priv; -  if (priv->parser != NULL) +  if (priv->root != NULL)      { -      g_object_unref (priv->parser); - -      priv->parser = NULL; +      json_node_free (priv->root);        priv->root = NULL;        priv->current_node = NULL;        priv->previous_node = NULL; @@ -135,8 +130,6 @@ json_reader_init (JsonReader *self)  {    self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, JSON_TYPE_READER,                                              JsonReaderPrivate); - -  self->priv->parser = json_parser_new ();  }  GQuark @@ -161,78 +154,53 @@ json_reader_new (void)    return g_object_new (JSON_TYPE_READER, NULL);  } -/** - * json_reader_load_from_data: +/* + * json_reader_unset_error:   * @reader: a #JsonReader - * @data: the data to be parsed - * @length: the length of @data, or -1 - * @error: return location for a #GError, or %NULL   * - * Loads a JSON string and parses it. + * Unsets the error state of @reader, if set + */ +static inline void +json_reader_unset_error (JsonReader *reader) +{ +  if (reader->priv->error != NULL) +    g_clear_error (&(reader->priv->error)); +} + +/** + * json_reader_set_root: + * @reader: a #JsonReader + * @root: a #JsonNode   * - * If @reader already contained a JSON DOM, it will be reset. + * Sets the root #JsonNode to be read by @reader. The @reader will take + * a copy of @root   * - * Return value: %TRUE if the data was successfully parsed, and %FALSE - *   otherwise. In case of failure, the #GError will be set accordingly + * If another #JsonNode is currently set as root, it will be replaced.   *   * Since: 0.12   */ -gboolean -json_reader_load_from_data (JsonReader   *reader, -                            const gchar  *data, -                            gssize        length, -                            GError      **error) +void +json_reader_set_root (JsonReader *reader, +                      JsonNode   *root)  {    JsonReaderPrivate *priv; -  GError *internal_error; -  gboolean retval; -  g_return_val_if_fail (JSON_IS_READER (reader), FALSE); +  g_return_if_fail (JSON_IS_READER (reader)); +  g_return_if_fail (root != NULL);    priv = reader->priv;    if (priv->root != NULL)      { +      json_node_free (priv->root);        priv->root = NULL; -        priv->current_node = NULL;        priv->previous_node = NULL;      } -  if (priv->error != NULL) -    g_clear_error (&priv->error); - -  internal_error = NULL; -  retval = json_parser_load_from_data (priv->parser, data, length, &internal_error); -  if (retval) -    { -      priv->root = json_parser_get_root (priv->parser); - -      priv->current_node = priv->root; -      priv->previous_node = NULL; - -      priv->error = NULL; -    } -  else -    { -      priv->error = g_error_copy (internal_error); -      g_propagate_error (error, internal_error); -    } - -  return retval; -} - -/* - * json_reader_unset_error: - * @reader: a #JsonReader - * - * Unsets the error state of @reader, if set - */ -static inline void -json_reader_unset_error (JsonReader *reader) -{ -  if (reader->priv->error != NULL) -    g_clear_error (&(reader->priv->error)); +  priv->root = json_node_copy (root); +  priv->current_node = priv->root; +  priv->previous_node = NULL;  }  /* | 
