]> granicus.if.org Git - json-c/commitdiff
Kick json_type_boolean out of struct json_object.
authorEric Haszlakiewicz <erh+git@nimenees.com>
Mon, 25 May 2020 04:04:02 +0000 (04:04 +0000)
committerEric Haszlakiewicz <erh+git@nimenees.com>
Mon, 25 May 2020 04:05:32 +0000 (04:05 +0000)
json_object.c
json_object_private.h

index 9b4df330a80cbc916da3b8f8438043057291536d..b2d8d186d7aa857b734ea522e0e01f5bfbaaa91a 100644 (file)
@@ -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;
 
index 45e7bc62bed0e47bd91daf65858023d7917b0a7b..0f6a4f8a933ffb85ac98d421777419dcfce0678a 100644 (file)
@@ -97,7 +97,6 @@ struct json_object
        struct printbuf *_pb;
        union data
        {
-               json_bool c_boolean;
                double c_double;
                struct
                {