added accessor interface
This commit is contained in:
parent
566952de5e
commit
b27031876b
@ -84,8 +84,8 @@ struct JSON_array_element{
|
||||
|
||||
//A member of an object
|
||||
struct JSON_object_member{
|
||||
struct JSON_string name;
|
||||
struct JSON_value value;
|
||||
struct JSON_string name;
|
||||
struct JSON_object_member* next;
|
||||
};
|
||||
|
||||
@ -96,14 +96,6 @@ struct JSON_value* rjp_parse(const char* str);
|
||||
void rjp_free_json(char* json);
|
||||
void rjp_free(struct JSON_value* root);
|
||||
|
||||
struct JSON_object_member* rjp_get_members(struct JSON_object* j);
|
||||
struct JSON_object_member* rjp_next_member(struct JSON_object_member* j);
|
||||
struct JSON_object* rjp_member_parent(struct JSON_object_member* j);
|
||||
struct JSON_value* rjp_get_member_value(struct JSON_object_member* j);
|
||||
enum JSON_type rjp_get_member_type(struct JSON_object_member* j);
|
||||
enum JSON_type rjp_get_value_type(struct JSON_value* j);
|
||||
|
||||
|
||||
//initialize an empty json handle (outputting to string would result in '{}')
|
||||
struct JSON_value* rjp_init_json(void);
|
||||
|
||||
@ -112,6 +104,7 @@ struct JSON_value* rjp_add_member(struct JSON_value* dest, int alloc_key, char*
|
||||
//add an element to a json array
|
||||
struct JSON_value* rjp_add_element(struct JSON_value* dest, struct JSON_value value);
|
||||
|
||||
//initialize a JSON_value to the requested type and value
|
||||
struct JSON_value rjp_integer(long i);
|
||||
struct JSON_value rjp_boolean(char b);
|
||||
struct JSON_value rjp_dfloat(double d);
|
||||
@ -120,7 +113,31 @@ struct JSON_value rjp_null(void);
|
||||
struct JSON_value rjp_object(void);
|
||||
struct JSON_value rjp_array(void);
|
||||
|
||||
//access members/elements
|
||||
struct JSON_value* rjp_get_member(struct JSON_value* object);
|
||||
struct JSON_value* rjp_next_member(struct JSON_value* member);
|
||||
struct JSON_value* rjp_get_element(struct JSON_value* array);
|
||||
struct JSON_value* rjp_next_element(struct JSON_value* element);
|
||||
|
||||
//member metadata
|
||||
char* rjp_member_name(struct JSON_value* member);
|
||||
size_t rjp_member_name_length(struct JSON_value* member);
|
||||
|
||||
//value metadata
|
||||
struct JSON_value* rjp_value_parent(struct JSON_value* element);
|
||||
enum JSON_type rjp_value_type(struct JSON_value* value);
|
||||
|
||||
//value accessors
|
||||
double rjp_value_dfloat(struct JSON_value* value);
|
||||
int rjp_value_integer(struct JSON_value* value);
|
||||
char rjp_value_boolean(struct JSON_value* value);
|
||||
char* rjp_value_string(struct JSON_value* value);
|
||||
size_t rjp_value_string_length(struct JSON_value* value);
|
||||
|
||||
|
||||
//copy input string and add json escape sequences
|
||||
size_t rjp_escape_strcpy(char* dest, const char* src);
|
||||
//length of string including escape sequences
|
||||
size_t rjp_escape_strlen(const char* str);
|
||||
|
||||
size_t rjp_dump_object(struct JSON_value* root, char* dest);
|
||||
|
||||
19
src/input.c
19
src/input.c
@ -413,22 +413,3 @@ struct JSON_value* rjp_parse(const char* str){
|
||||
|
||||
#undef syntax_error
|
||||
|
||||
//TODO
|
||||
struct JSON_object_member* rjp_get_members(struct JSON_object* j){
|
||||
return j->members;
|
||||
}
|
||||
struct JSON_object_member* rjp_next_member(struct JSON_object_member* j){
|
||||
return j->next;
|
||||
}
|
||||
struct JSON_object* rjp_member_parent(struct JSON_object_member* j){
|
||||
return &j->value.parent->object;
|
||||
}
|
||||
struct JSON_value* rjp_get_member_value(struct JSON_object_member* j){
|
||||
return &j->value;
|
||||
}
|
||||
enum JSON_type rjp_get_member_type(struct JSON_object_member* j){
|
||||
return j->value.type;
|
||||
}
|
||||
enum JSON_type rjp_get_value_type(struct JSON_value* j){
|
||||
return j->type;
|
||||
}
|
||||
|
||||
45
src/output.c
45
src/output.c
@ -50,6 +50,51 @@ struct JSON_value rjp_array(void){
|
||||
}
|
||||
|
||||
|
||||
|
||||
struct JSON_value* rjp_get_member(struct JSON_value* object){
|
||||
return &object->object.members->value;
|
||||
}
|
||||
struct JSON_value* rjp_next_member(struct JSON_value* member){
|
||||
//polymorphism
|
||||
return (struct JSON_value*)(((struct JSON_object_member*)member)->next);
|
||||
}
|
||||
struct JSON_value* rjp_get_element(struct JSON_value* array){
|
||||
return &array->array.elements->value;
|
||||
}
|
||||
struct JSON_value* rjp_next_element(struct JSON_value* element){
|
||||
return (struct JSON_value*)(((struct JSON_array_element*)element)->next);
|
||||
}
|
||||
|
||||
char* rjp_member_name(struct JSON_value* member){
|
||||
return ((struct JSON_object_member*)member)->name.value;
|
||||
}
|
||||
size_t rjp_member_name_length(struct JSON_value* member){
|
||||
return ((struct JSON_object_member*)member)->name.length;
|
||||
}
|
||||
|
||||
struct JSON_value* rjp_value_parent(struct JSON_value* value){
|
||||
return value->parent;
|
||||
}
|
||||
enum JSON_type rjp_value_type(struct JSON_value* value){
|
||||
return value->type;
|
||||
}
|
||||
double rjp_value_dfloat(struct JSON_value* value){
|
||||
return value->dfloat;
|
||||
}
|
||||
int rjp_value_integer(struct JSON_value* value){
|
||||
return value->integer;
|
||||
}
|
||||
char rjp_value_boolean(struct JSON_value* value){
|
||||
return value->boolean;
|
||||
}
|
||||
char* rjp_value_string(struct JSON_value* value){
|
||||
return value->string.value;
|
||||
}
|
||||
size_t rjp_value_string_length(struct JSON_value* value){
|
||||
return value->string.length;
|
||||
}
|
||||
|
||||
|
||||
static size_t _rjp__write_value(char* dest, struct JSON_value* val){
|
||||
size_t ret;
|
||||
switch(val->type){
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user