cleaned up object/array output and version bump
This commit is contained in:
parent
e70b0833e6
commit
890876a490
@ -4,7 +4,7 @@ include(GNUInstallDirs)
|
||||
cmake_minimum_required(VERSION 3.0.2)
|
||||
project(rjp)
|
||||
set(rjp_VERSION_MAJOR 0)
|
||||
set(rjp_VERSION_MINOR 1)
|
||||
set(rjp_VERSION_MINOR 2)
|
||||
set(INCLUDE_PATH ${CMAKE_SOURCE_DIR}/include)
|
||||
configure_file(
|
||||
"${INCLUDE_PATH}/config.h.in"
|
||||
|
||||
93
src/output.c
93
src/output.c
@ -50,38 +50,48 @@ struct JSON_value rjp_array(void){
|
||||
}
|
||||
|
||||
|
||||
static size_t _rjp__write_value(char* dest, struct JSON_value* val){
|
||||
size_t ret;
|
||||
switch(val->type){
|
||||
case json_integer:
|
||||
ret = sprintf(dest, "%li", val->integer);
|
||||
break;
|
||||
case json_dfloat:
|
||||
ret = sprintf(dest, "%lf", val->dfloat);
|
||||
break;
|
||||
case json_boolean:
|
||||
ret = sprintf(dest, val->boolean ? "true" : "false");
|
||||
break;
|
||||
case json_null:
|
||||
ret = sprintf(dest, "null");
|
||||
break;
|
||||
case json_string:;
|
||||
ret = sprintf(dest, "\"%s\"", val->string.value);
|
||||
break;
|
||||
case json_array:
|
||||
ret = sprintf(dest, "[");
|
||||
ret += rjp_dump_array(val, dest+ret);
|
||||
ret += sprintf(dest+ret, "]");
|
||||
break;
|
||||
case json_object:
|
||||
ret = sprintf(dest, "{");
|
||||
ret += rjp_dump_object(val, dest+ret);
|
||||
ret += sprintf(dest+ret, "}");
|
||||
break;
|
||||
default:
|
||||
ret = 0;
|
||||
break;
|
||||
};
|
||||
return ret;
|
||||
}
|
||||
|
||||
size_t rjp_dump_array(struct JSON_value* arr, char* dest){
|
||||
struct JSON_array* array = &arr->array;
|
||||
struct JSON_array_element* element_list = array->elements;
|
||||
size_t pos = 0;
|
||||
for(;element_list;element_list = element_list->next){
|
||||
switch(element_list->value.type){
|
||||
case json_integer:
|
||||
pos += sprintf(dest+pos, "%li", element_list->value.integer);
|
||||
break;
|
||||
case json_dfloat:
|
||||
pos += sprintf(dest+pos, "%lf", element_list->value.dfloat);
|
||||
break;
|
||||
case json_boolean:
|
||||
pos += sprintf(dest+pos, element_list->value.boolean ? "true" : "false");
|
||||
break;
|
||||
case json_null:
|
||||
pos +=sprintf(dest+pos, "null");
|
||||
break;
|
||||
case json_string:
|
||||
pos += sprintf(dest+pos, "\"%s\"", element_list->value.string.value);
|
||||
break;
|
||||
case json_array:
|
||||
pos += sprintf(dest+pos, "[");
|
||||
pos += rjp_dump_array(&element_list->value, dest+pos);
|
||||
pos += sprintf(dest+pos, "]");
|
||||
break;
|
||||
case json_object:
|
||||
pos += sprintf(dest+pos, "{");
|
||||
pos += rjp_dump_object(&element_list->value, dest+pos);
|
||||
pos += sprintf(dest+pos, "}");
|
||||
break;
|
||||
};
|
||||
pos += _rjp__write_value(dest+pos, &element_list->value);
|
||||
|
||||
if(element_list->next)
|
||||
pos += sprintf(dest+pos, ",");
|
||||
else
|
||||
@ -96,33 +106,8 @@ size_t rjp_dump_object(struct JSON_value* root, char* dest){
|
||||
size_t pos = 0;
|
||||
for(;member_list;member_list = member_list->next){
|
||||
pos += sprintf(dest+pos, "\"%s\":", member_list->name.value);
|
||||
switch(member_list->value.type){
|
||||
case json_integer:
|
||||
pos += sprintf(dest+pos, "%li", member_list->value.integer);
|
||||
break;
|
||||
case json_dfloat:
|
||||
pos += sprintf(dest+pos, "%lf", member_list->value.dfloat);
|
||||
break;
|
||||
case json_boolean:
|
||||
pos += sprintf(dest+pos, member_list->value.boolean ? "true" : "false");
|
||||
break;
|
||||
case json_null:
|
||||
pos += sprintf(dest+pos, "null");
|
||||
break;
|
||||
case json_string:;
|
||||
pos += sprintf(dest+pos, "\"%s\"", member_list->value.string.value);
|
||||
break;
|
||||
case json_array:
|
||||
pos += sprintf(dest+pos, "[");
|
||||
pos += rjp_dump_array(&member_list->value, dest+pos);
|
||||
pos += sprintf(dest+pos, "]");
|
||||
break;
|
||||
case json_object:
|
||||
pos += sprintf(dest+pos, "{");
|
||||
pos += rjp_dump_object(&member_list->value, dest+pos);
|
||||
pos += sprintf(dest+pos, "}");
|
||||
break;
|
||||
};
|
||||
pos += _rjp__write_value(dest+pos, &member_list->value);
|
||||
|
||||
if(member_list->next)
|
||||
pos += sprintf(dest+pos, ",");
|
||||
else
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user