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
|
//A member of an object
|
||||||
struct JSON_object_member{
|
struct JSON_object_member{
|
||||||
struct JSON_string name;
|
|
||||||
struct JSON_value value;
|
struct JSON_value value;
|
||||||
|
struct JSON_string name;
|
||||||
struct JSON_object_member* next;
|
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_json(char* json);
|
||||||
void rjp_free(struct JSON_value* root);
|
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 '{}')
|
//initialize an empty json handle (outputting to string would result in '{}')
|
||||||
struct JSON_value* rjp_init_json(void);
|
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
|
//add an element to a json array
|
||||||
struct JSON_value* rjp_add_element(struct JSON_value* dest, struct JSON_value value);
|
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_integer(long i);
|
||||||
struct JSON_value rjp_boolean(char b);
|
struct JSON_value rjp_boolean(char b);
|
||||||
struct JSON_value rjp_dfloat(double d);
|
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_object(void);
|
||||||
struct JSON_value rjp_array(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);
|
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_escape_strlen(const char* str);
|
||||||
|
|
||||||
size_t rjp_dump_object(struct JSON_value* root, char* dest);
|
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
|
#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){
|
static size_t _rjp__write_value(char* dest, struct JSON_value* val){
|
||||||
size_t ret;
|
size_t ret;
|
||||||
switch(val->type){
|
switch(val->type){
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user