Browse Source

Kick json_type_boolean out of struct json_object.

tags/json-c-0.15-20200726
Eric Haszlakiewicz 5 years ago
parent
commit
d1f83bf5ea
2 changed files with 36 additions and 16 deletions
  1. +36
    -15
      json_object.c
  2. +0
    -1
      json_object_private.h

+ 36
- 15
json_object.c View 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;



+ 0
- 1
json_object_private.h View File

@@ -97,7 +97,6 @@ struct json_object
struct printbuf *_pb;
union data
{
json_bool c_boolean;
double c_double;
struct
{


Loading…
Cancel
Save