|
@@ -12,6 +12,7 @@ |
|
|
|
|
|
|
|
|
#include "config.h" |
|
|
#include "config.h" |
|
|
|
|
|
|
|
|
|
|
|
#include <assert.h> |
|
|
#include <stdio.h> |
|
|
#include <stdio.h> |
|
|
#include <stdlib.h> |
|
|
#include <stdlib.h> |
|
|
#include <stddef.h> |
|
|
#include <stddef.h> |
|
@@ -451,6 +452,8 @@ int json_object_object_add_ex(struct json_object* jso, |
|
|
struct json_object *const val, |
|
|
struct json_object *const val, |
|
|
const unsigned opts) |
|
|
const unsigned opts) |
|
|
{ |
|
|
{ |
|
|
|
|
|
assert(json_object_get_type(jso) == json_type_object); |
|
|
|
|
|
|
|
|
// We lookup the entry and replace the value, rather than just deleting |
|
|
// We lookup the entry and replace the value, rather than just deleting |
|
|
// and re-adding it, so the existing key remains valid. |
|
|
// and re-adding it, so the existing key remains valid. |
|
|
json_object *existing_value = NULL; |
|
|
json_object *existing_value = NULL; |
|
@@ -489,6 +492,7 @@ int json_object_object_add(struct json_object* jso, const char *key, |
|
|
|
|
|
|
|
|
int json_object_object_length(const struct json_object *jso) |
|
|
int json_object_object_length(const struct json_object *jso) |
|
|
{ |
|
|
{ |
|
|
|
|
|
assert(json_object_get_type(jso) == json_type_object); |
|
|
return lh_table_length(jso->o.c_object); |
|
|
return lh_table_length(jso->o.c_object); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@@ -523,6 +527,7 @@ json_bool json_object_object_get_ex(const struct json_object* jso, const char *k |
|
|
|
|
|
|
|
|
void json_object_object_del(struct json_object* jso, const char *key) |
|
|
void json_object_object_del(struct json_object* jso, const char *key) |
|
|
{ |
|
|
{ |
|
|
|
|
|
assert(json_object_get_type(jso) == json_type_object); |
|
|
lh_table_delete(jso->o.c_object, key); |
|
|
lh_table_delete(jso->o.c_object, key); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@@ -1045,6 +1050,7 @@ struct array_list* json_object_get_array(const struct json_object *jso) |
|
|
void json_object_array_sort(struct json_object *jso, |
|
|
void json_object_array_sort(struct json_object *jso, |
|
|
int(*sort_fn)(const void *, const void *)) |
|
|
int(*sort_fn)(const void *, const void *)) |
|
|
{ |
|
|
{ |
|
|
|
|
|
assert(json_object_get_type(jso) == json_type_array); |
|
|
array_list_sort(jso->o.c_array, sort_fn); |
|
|
array_list_sort(jso->o.c_array, sort_fn); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@@ -1055,6 +1061,7 @@ struct json_object* json_object_array_bsearch( |
|
|
{ |
|
|
{ |
|
|
struct json_object **result; |
|
|
struct json_object **result; |
|
|
|
|
|
|
|
|
|
|
|
assert(json_object_get_type(jso) == json_type_array); |
|
|
result = (struct json_object **)array_list_bsearch( |
|
|
result = (struct json_object **)array_list_bsearch( |
|
|
(const void **)&key, jso->o.c_array, sort_fn); |
|
|
(const void **)&key, jso->o.c_array, sort_fn); |
|
|
|
|
|
|
|
@@ -1065,23 +1072,33 @@ struct json_object* json_object_array_bsearch( |
|
|
|
|
|
|
|
|
size_t json_object_array_length(const struct json_object *jso) |
|
|
size_t json_object_array_length(const struct json_object *jso) |
|
|
{ |
|
|
{ |
|
|
|
|
|
assert(json_object_get_type(jso) == json_type_array); |
|
|
return array_list_length(jso->o.c_array); |
|
|
return array_list_length(jso->o.c_array); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
int json_object_array_add(struct json_object *jso,struct json_object *val) |
|
|
int json_object_array_add(struct json_object *jso,struct json_object *val) |
|
|
{ |
|
|
{ |
|
|
|
|
|
assert(json_object_get_type(jso) == json_type_array); |
|
|
return array_list_add(jso->o.c_array, val); |
|
|
return array_list_add(jso->o.c_array, val); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
int json_object_array_put_idx(struct json_object *jso, size_t idx, |
|
|
int json_object_array_put_idx(struct json_object *jso, size_t idx, |
|
|
struct json_object *val) |
|
|
struct json_object *val) |
|
|
{ |
|
|
{ |
|
|
|
|
|
assert(json_object_get_type(jso) == json_type_array); |
|
|
return array_list_put_idx(jso->o.c_array, idx, val); |
|
|
return array_list_put_idx(jso->o.c_array, idx, val); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
int json_object_array_del_idx(struct json_object *jso, size_t idx, size_t count) |
|
|
|
|
|
{ |
|
|
|
|
|
assert(json_object_get_type(jso) == json_type_array); |
|
|
|
|
|
return array_list_del_idx(jso->o.c_array, idx, count); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
struct json_object* json_object_array_get_idx(const struct json_object *jso, |
|
|
struct json_object* json_object_array_get_idx(const struct json_object *jso, |
|
|
size_t idx) |
|
|
size_t idx) |
|
|
{ |
|
|
{ |
|
|
|
|
|
assert(json_object_get_type(jso) == json_type_array); |
|
|
return (struct json_object*)array_list_get_idx(jso->o.c_array, idx); |
|
|
return (struct json_object*)array_list_get_idx(jso->o.c_array, idx); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@@ -1108,6 +1125,8 @@ static int json_object_all_values_equal(struct json_object* jso1, |
|
|
struct json_object_iter iter; |
|
|
struct json_object_iter iter; |
|
|
struct json_object *sub; |
|
|
struct json_object *sub; |
|
|
|
|
|
|
|
|
|
|
|
assert(json_object_get_type(jso1) == json_type_object); |
|
|
|
|
|
assert(json_object_get_type(jso2) == json_type_object); |
|
|
/* Iterate over jso1 keys and see if they exist and are equal in jso2 */ |
|
|
/* Iterate over jso1 keys and see if they exist and are equal in jso2 */ |
|
|
json_object_object_foreachC(jso1, iter) { |
|
|
json_object_object_foreachC(jso1, iter) { |
|
|
if (!lh_table_lookup_ex(jso2->o.c_object, (void*)iter.key, |
|
|
if (!lh_table_lookup_ex(jso2->o.c_object, (void*)iter.key, |
|
@@ -1167,7 +1186,3 @@ int json_object_equal(struct json_object* jso1, struct json_object* jso2) |
|
|
return 0; |
|
|
return 0; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
int json_object_array_del_idx(struct json_object *jso, size_t idx, size_t count) |
|
|
|
|
|
{ |
|
|
|
|
|
return array_list_del_idx(jso->o.c_array, idx, count); |
|
|
|
|
|
} |
|
|
|