diff options
author | Eric Haszlakiewicz <erh+git@nimenees.com> | 2020-05-25 04:04:02 +0000 |
---|---|---|
committer | Eric Haszlakiewicz <erh+git@nimenees.com> | 2020-05-25 04:05:32 +0000 |
commit | d1f83bf5eab331e3014f04e856bcb3662da1199f (patch) | |
tree | eb509d4c5440f82bd909a039fb5c80b57520aaf7 | |
parent | 5d89fc8a9d1c926ab341f49f41be1c38c7049161 (diff) | |
download | json-c-d1f83bf5eab331e3014f04e856bcb3662da1199f.tar.gz |
Kick json_type_boolean out of struct json_object.
-rw-r--r-- | json_object.c | 51 | ||||
-rw-r--r-- | json_object_private.h | 1 |
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 { |