Finally add key modifier functions.
This commit is contained in:
parent
2d94783ee7
commit
f367993ad4
@ -121,6 +121,11 @@ RJP_value* rjp_add_member_no_alloc(RJP_value* dest, char* key, size_t keylen, RJ
|
||||
//add an element to a json array
|
||||
RJP_value* rjp_add_element(RJP_value* dest, RJP_value value);
|
||||
|
||||
//set existing object member's key
|
||||
void rjp_set_key(RJP_value* dest, const char* key, size_t keylen);
|
||||
//set existing object member's key without allocation. key must be allocated using rjp_alloc/rjp_calloc
|
||||
void rjp_set_key_no_alloc(RJP_value* dest, char* key, size_t keylen);
|
||||
|
||||
//set existing value
|
||||
void rjp_set_value(RJP_value* dest, RJP_value value);
|
||||
|
||||
|
||||
@ -16,6 +16,9 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#define __STDC_FORMAT_MACROS
|
||||
#include <inttypes.h>
|
||||
|
||||
#include "rjp.h"
|
||||
#include "rjp_internal.h"
|
||||
#include "memory.h"
|
||||
@ -37,7 +40,7 @@ static size_t _rjp__write_value(char* dest, RJP_value* val){
|
||||
size_t ret;
|
||||
switch(val->type){
|
||||
case json_integer:
|
||||
ret = sprintf(dest, "%lli", val->integer);
|
||||
ret = sprintf(dest, "%" PRId64, val->integer);
|
||||
break;
|
||||
case json_dfloat:
|
||||
ret = sprintf(dest, "%lf", val->dfloat);
|
||||
|
||||
16
src/rjp.c
16
src/rjp.c
@ -80,6 +80,22 @@ 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_key(RJP_value* dest, const char* key, size_t keylen){
|
||||
RJP_object_member* mem = (RJP_object_member*)dest;
|
||||
if(!keylen)
|
||||
keylen = strlen(key);
|
||||
mem->name.value = rjp_alloc(keylen + 1);
|
||||
strncpy(mem->name.value, key, keylen);
|
||||
mem->name.value[keylen] = 0;
|
||||
mem->name.length = keylen;
|
||||
}
|
||||
void rjp_set_key_no_alloc(RJP_value* dest, char* key, size_t keylen){
|
||||
RJP_object_member* mem = (RJP_object_member*)dest;
|
||||
if(!keylen)
|
||||
keylen = strlen(key);
|
||||
mem->name.value = key;
|
||||
mem->name.length = keylen;
|
||||
}
|
||||
void rjp_set_value(RJP_value* dest, RJP_value value){
|
||||
struct RJP_value* p = dest->parent;
|
||||
*dest = value;
|
||||
|
||||
@ -16,6 +16,9 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#define __STDC_FORMAT_MACROS
|
||||
#include <inttypes.h>
|
||||
|
||||
#include "strings.h"
|
||||
#include "rjp_internal.h"
|
||||
|
||||
@ -301,7 +304,7 @@ size_t _rjp__array_strlen(RJP_value* arr){
|
||||
for(;element_list;element_list = element_list->next){
|
||||
switch(element_list->value.type){
|
||||
case json_integer:
|
||||
count += snprintf(NULL, 0, "%lli", element_list->value.integer);
|
||||
count += snprintf(NULL, 0, "%" PRId64, element_list->value.integer);
|
||||
break;
|
||||
case json_dfloat:
|
||||
count += snprintf(NULL, 0, "%lf", element_list->value.dfloat);
|
||||
@ -350,7 +353,7 @@ size_t _rjp__object_strlen(RJP_value* root){
|
||||
size_t _rjp__value_strlen(RJP_value* root){
|
||||
switch(root->type){
|
||||
case json_integer:
|
||||
return snprintf(NULL, 0, "%lli", root->integer);
|
||||
return snprintf(NULL, 0, "%" PRId64, root->integer);
|
||||
case json_dfloat:
|
||||
return snprintf(NULL, 0, "%lf", root->dfloat);
|
||||
case json_boolean:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user