cleaned up object/array output and version bump

This commit is contained in:
rexy712 2018-11-30 11:22:54 -08:00
parent e70b0833e6
commit 890876a490
2 changed files with 40 additions and 55 deletions

View File

@ -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"

View File

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