Split rjp_add_member into 2 different functions to maintain const correctness

This commit is contained in:
rexy712 2018-12-16 14:29:16 -08:00
parent 20e46d2af2
commit 83655214f0
4 changed files with 22 additions and 8 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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));

View File

@ -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};
}