summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Haszlakiewicz <erh+git@nimenees.com>2020-05-25 04:04:02 +0000
committerEric Haszlakiewicz <erh+git@nimenees.com>2020-05-25 04:05:32 +0000
commitd1f83bf5eab331e3014f04e856bcb3662da1199f (patch)
treeeb509d4c5440f82bd909a039fb5c80b57520aaf7
parent5d89fc8a9d1c926ab341f49f41be1c38c7049161 (diff)
downloadjson-c-d1f83bf5eab331e3014f04e856bcb3662da1199f.tar.gz
Kick json_type_boolean out of struct json_object.
-rw-r--r--json_object.c51
-rw-r--r--json_object_private.h1
2 files changed, 36 insertions, 16 deletions
diff --git a/json_object.c b/json_object.c
index 9b4df33..b2d8d18 100644
--- a/json_object.c
+++ b/json_object.c
@@ -86,6 +86,10 @@ static inline struct json_object_boolean *JC_BOOL(struct json_object_base *jso)
{
return (void *)jso;
}
+static inline const struct json_object_boolean *JC_BOOL_C(const struct json_object_base *jso)
+{
+ return (const void *)jso;
+}
static inline struct json_object_double *JC_DOUBLE(struct json_object_base *jso)
{
return (void *)jso;
@@ -786,25 +790,27 @@ void json_object_object_del(struct json_object *jso, const char *key)
#undef jso
}
-// XAX ------------------------------ start unconverted code:
/* json_object_boolean */
static int json_object_boolean_to_json_string(struct json_object *jso, struct printbuf *pb,
int level, int flags)
{
- if (jso->o.c_boolean)
+#define jso ((struct json_object_base *)jso)
+ if (JC_BOOL(jso)->c_boolean)
return printbuf_strappend(pb, "true");
return printbuf_strappend(pb, "false");
+#undef jso
}
struct json_object *json_object_new_boolean(json_bool b)
{
- struct json_object *jso = json_object_new(json_type_boolean);
- if (!jso)
+ struct json_object_base *jso_base;
+ jso_base = JSON_OBJECT_NEW(boolean, &json_object_generic_delete);
+ if (!jso_base)
return NULL;
- jso->_to_json_string = &json_object_boolean_to_json_string;
- jso->o.c_boolean = b;
- return jso;
+ struct json_object_boolean *jso = (struct json_object_boolean *)jso_base;
+ jso->c_boolean = b;
+ return PUBLIC(jso_base);
}
json_bool json_object_get_boolean(const struct json_object *jso)
@@ -813,7 +819,9 @@ json_bool json_object_get_boolean(const struct json_object *jso)
return 0;
switch (jso->o_type)
{
- case json_type_boolean: return jso->o.c_boolean;
+#define jso ((const struct json_object_base *)jso)
+ case json_type_boolean: return JC_BOOL_C(jso)->c_boolean;
+#undef jso
case json_type_int:
switch (jso->o.c_int.cint_type)
{
@@ -829,12 +837,15 @@ json_bool json_object_get_boolean(const struct json_object *jso)
int json_object_set_boolean(struct json_object *jso, json_bool new_value)
{
+#define jso ((struct json_object_base *)jso)
if (!jso || jso->o_type != json_type_boolean)
return 0;
- jso->o.c_boolean = new_value;
+ JC_BOOL(jso)->c_boolean = new_value;
return 1;
+#undef jso
}
+// XAX ------------------------------ start unconverted code:
/* json_object_int */
static int json_object_int_to_json_string(struct json_object *jso, struct printbuf *pb, int level,
@@ -907,7 +918,9 @@ int32_t json_object_get_int(const struct json_object *jso)
if (jso->o.c_double >= INT32_MAX)
return INT32_MAX;
return (int32_t)jso->o.c_double;
- case json_type_boolean: return jso->o.c_boolean;
+#define jso ((const struct json_object_base *)jso)
+ case json_type_boolean: return JC_BOOL_C(jso)->c_boolean;
+#undef jso
default: return 0;
}
}
@@ -965,7 +978,9 @@ int64_t json_object_get_int64(const struct json_object *jso)
if (jso->o.c_double <= INT64_MIN)
return INT64_MIN;
return (int64_t)jso->o.c_double;
- case json_type_boolean: return jso->o.c_boolean;
+#define jso ((const struct json_object_base *)jso)
+ case json_type_boolean: return JC_BOOL_C(jso)->c_boolean;
+#undef jso
case json_type_string:
if (json_parse_int64(get_string_component(jso), &cint) == 0)
return cint;
@@ -1000,7 +1015,9 @@ uint64_t json_object_get_uint64(const struct json_object *jso)
if (jso->o.c_double < 0)
return 0;
return (uint64_t)jso->o.c_double;
- case json_type_boolean: return jso->o.c_boolean;
+#define jso ((const struct json_object_base *)jso)
+ case json_type_boolean: return JC_BOOL_C(jso)->c_boolean;
+#undef jso
case json_type_string:
if (json_parse_uint64(get_string_component(jso), &cuint) == 0)
return cuint;
@@ -1294,7 +1311,9 @@ double json_object_get_double(const struct json_object *jso)
case json_object_int_type_uint64: return jso->o.c_int.cint.c_uint64;
default: json_abort("invalid cint_type");
}
- case json_type_boolean: return jso->o.c_boolean;
+#define jso ((const struct json_object_base *)jso)
+ case json_type_boolean: return JC_BOOL_C(jso)->c_boolean;
+#undef jso
case json_type_string:
errno = 0;
cdouble = strtod(get_string_component(jso), &errPtr);
@@ -1684,7 +1703,7 @@ static int Xjson_object_equal(struct json_object *jso1, struct json_object *jso2
switch (jso1->o_type)
{
- case json_type_boolean: return (jso1->o.c_boolean == jso2->o.c_boolean);
+ case json_type_boolean: assert(0); //return (jso1->o.c_boolean == jso2->o.c_boolean);
case json_type_double: return (jso1->o.c_double == jso2->o.c_double);
@@ -1846,7 +1865,9 @@ int json_c_shallow_copy_default(json_object *src, json_object *parent, const cha
{
switch (src->o_type)
{
- case json_type_boolean: *dst = json_object_new_boolean(src->o.c_boolean); break;
+#define src ((struct json_object_base *)src)
+ case json_type_boolean: *dst = json_object_new_boolean(JC_BOOL(src)->c_boolean); break;
+#undef src
case json_type_double: *dst = json_object_new_double(src->o.c_double); break;
diff --git a/json_object_private.h b/json_object_private.h
index 45e7bc6..0f6a4f8 100644
--- a/json_object_private.h
+++ b/json_object_private.h
@@ -97,7 +97,6 @@ struct json_object
struct printbuf *_pb;
union data
{
- json_bool c_boolean;
double c_double;
struct
{