2023-07-30 19:18:50 +00:00
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
// data framework (json5, xml, compression) @todo:kvdb
|
|
|
|
// - rlyeh, public domain
|
|
|
|
//
|
|
|
|
// @todo: vec2,vec3,vec4
|
|
|
|
|
|
|
|
typedef union json_t { char* s; double f; int64_t i; uintptr_t p; array(union json_t) arr; } json_t;
|
|
|
|
|
|
|
|
// json api
|
|
|
|
|
|
|
|
API bool json_push(const char *json_content);
|
|
|
|
API const char* json_key(const char *keypath);
|
|
|
|
API json_t* json_find(const char *type_keypath);
|
|
|
|
API json_t json_get(const char *type_keypath);
|
|
|
|
API int json_count(const char *keypath);
|
|
|
|
#define json_int(...) (json_get(va("i" __VA_ARGS__)).i)
|
|
|
|
#define json_float(...) (json_get(va("f" __VA_ARGS__)).f)
|
|
|
|
#define json_string(...) (json_get(va("s" __VA_ARGS__)).s)
|
|
|
|
#define json_key(...) json_key(va(__VA_ARGS__))
|
|
|
|
#define json_count(...) json_count(va(__VA_ARGS__))
|
|
|
|
API bool json_pop();
|
|
|
|
|
|
|
|
// xml api
|
|
|
|
|
|
|
|
API int xml_push(const char *xml_content);
|
|
|
|
API const char * xml_string(char *key);
|
|
|
|
API unsigned xml_count(char *key);
|
|
|
|
API array(char) xml_blob(char *key);
|
|
|
|
#define xml_string(...) xml_string(va(__VA_ARGS__)) // syntax sugar: string
|
2023-08-25 23:32:43 +00:00
|
|
|
#define xml_int(...) atoi(xml_string(__VA_ARGS__)) // syntax sugar: int
|
|
|
|
#define xml_float(...) atof(xml_string(__VA_ARGS__)) // syntax sugar: float
|
2023-07-30 19:18:50 +00:00
|
|
|
#define xml_blob(...) xml_blob(va(__VA_ARGS__)) // syntax sugar: base64 blob
|
|
|
|
#define xml_count(...) xml_count(va(__VA_ARGS__)) // syntax sugar: count nodes
|
|
|
|
API void xml_pop();
|
|
|
|
|
|
|
|
API bool data_tests();
|
|
|
|
|
|
|
|
// compression api
|
|
|
|
|
|
|
|
enum COMPRESS_FLAGS {
|
|
|
|
COMPRESS_RAW = 0,
|
|
|
|
COMPRESS_PPP = (1<<4),
|
|
|
|
COMPRESS_ULZ = (2<<4),
|
|
|
|
COMPRESS_LZ4 = (3<<4),
|
|
|
|
COMPRESS_CRUSH = (4<<4),
|
|
|
|
COMPRESS_DEFLATE = (5<<4),
|
|
|
|
COMPRESS_LZP1 = (6<<4),
|
|
|
|
COMPRESS_LZMA = (7<<4),
|
|
|
|
COMPRESS_BALZ = (8<<4),
|
|
|
|
COMPRESS_LZW3 = (9<<4),
|
|
|
|
COMPRESS_LZSS = (10<<4),
|
|
|
|
COMPRESS_BCM = (11<<4),
|
|
|
|
COMPRESS_ZLIB = (12<<4), // same as deflate with header
|
|
|
|
};
|
|
|
|
|
|
|
|
API unsigned zbounds(unsigned inlen, unsigned flags);
|
|
|
|
API unsigned zencode(void *out, unsigned outlen, const void *in, unsigned inlen, unsigned flags);
|
|
|
|
API unsigned zexcess(unsigned flags);
|
|
|
|
API unsigned zdecode(void *out, unsigned outlen, const void *in, unsigned inlen, unsigned flags);
|