Split rjp_add_member into 2 different functions to maintain const correctness
This commit is contained in:
parent
20e46d2af2
commit
83655214f0
@ -99,10 +99,14 @@ void* rjp_calloc(size_t num, size_t nbytes);
|
||||
void rjp_free(void* dest);
|
||||
|
||||
//add a member to a json object
|
||||
RJP_value* rjp_add_member(RJP_value* dest, int alloc_key, char* key, size_t keylen, RJP_value value);
|
||||
RJP_value* rjp_add_member(RJP_value* dest, const char* key, size_t keylen, RJP_value value);
|
||||
RJP_value* rjp_add_member_no_alloc(RJP_value* dest, char* key, size_t keylen, RJP_value value);
|
||||
//add an element to a json array
|
||||
RJP_value* rjp_add_element(RJP_value* dest, RJP_value value);
|
||||
|
||||
//set existing value
|
||||
void rjp_set_value(RJP_value* dest, RJP_value value);
|
||||
|
||||
//initialize a RJP_value to the requested type and value
|
||||
RJP_value rjp_integer(long i);
|
||||
RJP_value rjp_boolean(char b);
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
|
||||
char* _rjp__parse_string(RJP_value* root, const char* str, int* len, int* row, int* column);
|
||||
size_t _rjp__object_strlen(RJP_value* root);
|
||||
void _rjp__add_member(RJP_object* j, char* str, size_t len);
|
||||
void _rjp__add_member(RJP_object* j, const char* str, size_t len);
|
||||
void _rjp__add_member_no_alloc(RJP_object* j, char* str, size_t len);
|
||||
void _rjp__add_element(RJP_array* j);
|
||||
size_t _rjp__object_strlen(RJP_value* root);
|
||||
|
||||
@ -61,7 +61,7 @@ void _rjp__add_element(RJP_array* j){
|
||||
}
|
||||
}
|
||||
//create member of the object as a linked list member and assign a name with name allocation
|
||||
void _rjp__add_member(RJP_object* j, char* str, size_t len){
|
||||
void _rjp__add_member(RJP_object* j, const char* str, size_t len){
|
||||
++j->num_members;
|
||||
if(!j->members){
|
||||
j->members = rjp_calloc(1, sizeof(RJP_object_member));
|
||||
|
||||
20
src/output.c
20
src/output.c
@ -36,13 +36,18 @@ void* rjp_calloc(size_t num, size_t nbytes){
|
||||
void rjp_free(void* data){
|
||||
free(data);
|
||||
}
|
||||
RJP_value* rjp_add_member(RJP_value* dest, int alloc_key, char* key, size_t keylen, RJP_value value){
|
||||
RJP_value* rjp_add_member(RJP_value* dest, const char* key, size_t keylen, RJP_value value){
|
||||
if(!keylen)
|
||||
keylen = strlen(key);
|
||||
if(alloc_key)
|
||||
_rjp__add_member(&dest->object, key, keylen);
|
||||
else
|
||||
_rjp__add_member_no_alloc(&dest->object, key, keylen);
|
||||
_rjp__add_member(&dest->object, key, keylen);
|
||||
dest->object.last->value = value;
|
||||
dest->object.last->value.parent = dest;
|
||||
return &dest->object.last->value;
|
||||
}
|
||||
RJP_value* rjp_add_member_no_alloc(RJP_value* dest, char* key, size_t keylen, RJP_value value){
|
||||
if(!keylen)
|
||||
keylen = strlen(key);
|
||||
_rjp__add_member_no_alloc(&dest->object, key, keylen);
|
||||
dest->object.last->value = value;
|
||||
dest->object.last->value.parent = dest;
|
||||
return &dest->object.last->value;
|
||||
@ -53,6 +58,11 @@ RJP_value* rjp_add_element(RJP_value* dest, RJP_value value){
|
||||
dest->array.last->value.parent = dest;
|
||||
return &dest->array.last->value;
|
||||
}
|
||||
void rjp_set_value(RJP_value* dest, RJP_value value){
|
||||
struct RJP_value* p = dest->parent;
|
||||
*dest = value;
|
||||
dest->parent = p;
|
||||
}
|
||||
RJP_value rjp_integer(long i){
|
||||
return (RJP_value){.integer = i, .type = json_integer};
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user