00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _srjson__h_
00024 #define _srjson__h_
00025
00026 #ifdef __cplusplus
00027 extern "C"
00028 {
00029 #endif
00030
00031 #include "../../str.h"
00032
00033
00034 #define srjson_False 0
00035 #define srjson_True 1
00036 #define srjson_NULL 2
00037 #define srjson_Number 3
00038 #define srjson_String 4
00039 #define srjson_Array 5
00040 #define srjson_Object 6
00041
00042 #define srjson_IsReference 256
00043
00044
00045 typedef struct srjson {
00046 struct srjson *parent;
00047 struct srjson *next;
00048 struct srjson *prev;
00049
00050
00051
00052
00053 struct srjson *child;
00054
00055
00056
00057
00058 int type;
00059 char *valuestring;
00060
00061 int valueint;
00062
00063 double valuedouble;
00064
00065 char *string;
00066
00067
00068 } srjson_t;
00069
00070 typedef struct srjson_doc {
00071 srjson_t *root;
00072 int flags;
00073 str buf;
00074 void *(*malloc_fn) (size_t sz);
00075 void (*free_fn) (void *ptr);
00076 } srjson_doc_t;
00077
00078 typedef struct srjson_Hooks {
00079 void *(*malloc_fn) (size_t sz);
00080 void (*free_fn) (void *ptr);
00081 } srjson_Hooks;
00082
00083
00084 extern srjson_doc_t *srjson_NewDoc(srjson_Hooks *hooks);
00085 extern int srjson_InitDoc(srjson_doc_t *doc, srjson_Hooks *hooks);
00086
00087 extern void srjson_DeleteDoc(srjson_doc_t *doc);
00088 extern void srjson_DestroyDoc(srjson_doc_t *doc);
00089
00090
00091
00092
00093
00094 extern srjson_t *srjson_Parse(srjson_doc_t *doc, const char *value);
00095
00096
00097
00098
00099
00100 extern char *srjson_Print(srjson_doc_t *doc, srjson_t *item);
00101
00102
00103
00104
00105
00106 extern char *srjson_PrintUnformatted(srjson_doc_t *doc, srjson_t *item);
00107
00108
00109 extern void srjson_Delete(srjson_doc_t *doc, srjson_t *c);
00110
00111
00112 extern int srjson_GetArraySize(srjson_doc_t *doc, srjson_t *array);
00113
00114
00115
00116
00117
00118 extern srjson_t *srjson_GetArrayItem(srjson_doc_t *doc, srjson_t *array, int item);
00119
00120
00121 extern srjson_t *srjson_GetObjectItem(srjson_doc_t *doc, srjson_t *object, const char *string);
00122
00123
00124
00125
00126
00127
00128
00129 extern const char *srjson_GetErrorPtr();
00130
00131
00132 extern srjson_t *srjson_CreateNull(srjson_doc_t *doc);
00133 extern srjson_t *srjson_CreateTrue(srjson_doc_t *doc);
00134 extern srjson_t *srjson_CreateFalse(srjson_doc_t *doc);
00135 extern srjson_t *srjson_CreateBool(srjson_doc_t *doc, int b);
00136 extern srjson_t *srjson_CreateNumber(srjson_doc_t *doc, double num);
00137 extern srjson_t *srjson_CreateString(srjson_doc_t *doc, const char *string);
00138 extern srjson_t *srjson_CreateStr(srjson_doc_t *doc, const char *string, int len);
00139 extern srjson_t *srjson_CreateArray(srjson_doc_t *doc);
00140 extern srjson_t *srjson_CreateObject(srjson_doc_t *doc);
00141
00142
00143 extern srjson_t *srjson_CreateIntArray(srjson_doc_t *doc, int *numbers, int count);
00144 extern srjson_t *srjson_CreateFloatArray(srjson_doc_t *doc, float *numbers, int count);
00145 extern srjson_t *srjson_CreateDoubleArray(srjson_doc_t *doc, double *numbers, int count);
00146 extern srjson_t *srjson_CreateStringArray(srjson_doc_t *doc, const char **strings, int count);
00147
00148
00149 extern void srjson_AddItemToArray(srjson_doc_t *doc, srjson_t *array, srjson_t *item);
00150 extern void srjson_AddItemToObject(srjson_doc_t *doc, srjson_t *object, const char *string, srjson_t *item);
00151 extern void srjson_AddStrItemToObject(srjson_doc_t *doc, srjson_t *object, const char *string, int len, srjson_t *item);
00152
00153
00154
00155
00156
00157
00158 extern void srjson_AddItemReferenceToArray(srjson_doc_t *doc, srjson_t *array, srjson_t *item);
00159 extern void srjson_AddItemReferenceToObject(srjson_doc_t *doc, srjson_t *object, const char *string, srjson_t *item);
00160
00161
00162 extern srjson_t *srjson_UnlinkItemFromObj(srjson_doc_t *doc, srjson_t *obj, srjson_t *item);
00163 extern srjson_t *srjson_DetachItemFromArray(srjson_doc_t *doc, srjson_t *array, int which);
00164 extern void srjson_DeleteItemFromArray(srjson_doc_t *doc, srjson_t *array, int which);
00165 extern srjson_t *srjson_DetachItemFromObject(srjson_doc_t *doc, srjson_t *object, const char *string);
00166 extern void srjson_DeleteItemFromObject(srjson_doc_t *doc, srjson_t *object, const char *string);
00167
00168
00169 extern void srjson_ReplaceItemInArray(srjson_doc_t *doc, srjson_t *array, int which, srjson_t *newitem);
00170 extern void srjson_ReplaceItemInObject(srjson_doc_t *doc, srjson_t *object, const char *string, srjson_t *newitem);
00171
00172 #define srjson_AddNullToObject(doc, object,name) srjson_AddItemToObject(doc, object, name, srjson_CreateNull(doc))
00173 #define srjson_AddTrueToObject(doc, object,name) srjson_AddItemToObject(doc, object, name, srjson_CreateTrue(doc))
00174 #define srjson_AddFalseToObject(doc, object,name) srjson_AddItemToObject(doc, object, name, srjson_CreateFalse(doc))
00175 #define srjson_AddNumberToObject(doc, object,name,n) srjson_AddItemToObject(doc, object, name, srjson_CreateNumber(doc,n))
00176 #define srjson_AddStringToObject(doc, object,name,s) srjson_AddItemToObject(doc, object, name, srjson_CreateString(doc,s))
00177 #define srjson_AddStrToObject(doc, object,name,s,l) srjson_AddItemToObject(doc, object, name, srjson_CreateStr(doc,s,l))
00178 #define srjson_AddStrStrToObject(doc, object,name,ln,s,l) srjson_AddStrItemToObject(doc, object, name, ln, srjson_CreateStr(doc,s,l))
00179
00180 #ifdef __cplusplus
00181 }
00182 #endif
00183
00184 #endif