diff options
author | Emmanuele Bassi <ebassi@gnome.org> | 2009-08-12 12:13:11 +0100 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gnome.org> | 2009-08-12 12:13:11 +0100 |
commit | d87b18675ac02f42be23bf4070134690b8b9934b (patch) | |
tree | 5697a9c79056a7af04fe3996c9dcd26e8ca5241f /json-glib/json-types.h | |
parent | 7411cadc0fdd9ffc2bd7004c9980913ac857a495 (diff) | |
download | json-glib-d87b18675ac02f42be23bf4070134690b8b9934b.tar.gz |
Auto-promote integer types to G_TYPE_INT64
The JSON RFC does not specify the size of the integer type, thus
implicitly falling back to machine-size.
This would all be fine and dandy if some demented Web Developer (and
I use the term "developer" *very much* loosely) did not decide to
use integers to store unique identifiers for objects; obviously, you
can't have more than 2^32-1 status messages in a database with
millions of users who update their status multiple times per day.
Right, Twitter?
Anyway, some languages do a type auto-promotion from Integer to
Long, thus pushing the limit of allowed positive values -- until the
next integer overflow, that is. C, and GLib, do not do that
transparently for us so we need to:
- always use gint64 when parsing a JSON data stream using
JsonScanner
- move all the Node, Object and Array APIs to gint64
- auto-promote G_TYPE_INT to G_TYPE_INT64 when setting
a GValue manually
- auto-promote and auto-demote G_TYPE_INT properties when
(de)serializing GObjects.
The GLib types used internally by JSON-GLib are, thus:
integer -> G_TYPE_INT64
boolean -> G_TYPE_BOOLEAN
float -> G_TYPE_DOUBLE
string -> G_TYPE_STRING
Diffstat (limited to 'json-glib/json-types.h')
-rw-r--r-- | json-glib/json-types.h | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/json-glib/json-types.h b/json-glib/json-types.h index 1538488..a3bae4b 100644 --- a/json-glib/json-types.h +++ b/json-glib/json-types.h @@ -151,8 +151,8 @@ void json_node_set_string (JsonNode *node, G_CONST_RETURN gchar *json_node_get_string (JsonNode *node); gchar * json_node_dup_string (JsonNode *node); void json_node_set_int (JsonNode *node, - gint value); -gint json_node_get_int (JsonNode *node); + gint64 value); +gint64 json_node_get_int (JsonNode *node); void json_node_set_double (JsonNode *node, gdouble value); gdouble json_node_get_double (JsonNode *node); @@ -180,7 +180,7 @@ void json_object_set_member (JsonObject *object, JsonNode *node); void json_object_set_int_member (JsonObject *object, const gchar *member_name, - gint value); + gint64 value); void json_object_set_double_member (JsonObject *object, const gchar *member_name, gdouble value); @@ -203,7 +203,7 @@ JsonNode * json_object_get_member (JsonObject *object, const gchar *member_name); JsonNode * json_object_dup_member (JsonObject *object, const gchar *member_name); -gint json_object_get_int_member (JsonObject *object, +gint64 json_object_get_int_member (JsonObject *object, const gchar *member_name); gdouble json_object_get_double_member (JsonObject *object, const gchar *member_name); @@ -235,7 +235,7 @@ void json_array_unref (JsonArray *array); void json_array_add_element (JsonArray *array, JsonNode *node); void json_array_add_int_element (JsonArray *array, - gint value); + gint64 value); void json_array_add_double_element (JsonArray *array, gdouble value); void json_array_add_boolean_element (JsonArray *array, @@ -250,7 +250,7 @@ void json_array_add_object_element (JsonArray *array, GList * json_array_get_elements (JsonArray *array); JsonNode * json_array_get_element (JsonArray *array, guint index_); -gint json_array_get_int_element (JsonArray *array, +gint64 json_array_get_int_element (JsonArray *array, guint index_); gdouble json_array_get_double_element (JsonArray *array, guint index_); |