111 lines
2.3 KiB
C
111 lines
2.3 KiB
C
|
|
#ifndef JKEYVAL_H_QWERTY
|
|
#define JKEYVAL_H_QWERTY
|
|
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
|
|
|
|
typedef struct {
|
|
char* data;
|
|
int capa;
|
|
int size;
|
|
} jstring_t;
|
|
|
|
typedef struct {
|
|
int64_t* data;
|
|
int capa;
|
|
int size;
|
|
} jintarr_t;
|
|
|
|
typedef struct {
|
|
bool* data;
|
|
int capa;
|
|
int size;
|
|
} jboolarr_t;
|
|
|
|
typedef struct {
|
|
double* data;
|
|
int capa;
|
|
int size;
|
|
} jfltarr_t;
|
|
|
|
|
|
typedef struct jblock jblock_t;
|
|
|
|
typedef struct {
|
|
char* key;
|
|
int type;
|
|
union {
|
|
int64_t num;
|
|
bool flag;
|
|
char* str;
|
|
double flt;
|
|
jintarr_t numarr;
|
|
jfltarr_t fltarr;
|
|
jboolarr_t flagarr;
|
|
jblock_t* blk;
|
|
jblock_t* blkarr;
|
|
char** strarr;
|
|
|
|
};
|
|
int arrsize;
|
|
int arrcapa;
|
|
} jkeyval_t;
|
|
|
|
struct jblock {
|
|
jkeyval_t* kvarr;
|
|
int kvsize;
|
|
int kvcapa;
|
|
};
|
|
|
|
#define JKVTYPE_INT 0x01
|
|
#define JKVTYPE_STR 0x02
|
|
#define JKVTYPE_BOOL 0x03
|
|
#define JKVTYPE_FLT 0x04
|
|
#define JKVTYPE_BLK 0x05
|
|
#define JKVTYPE_INTARR 0x11
|
|
#define JKVTYPE_STRARR 0x12
|
|
#define JKVTYPE_BOOLARR 0x13
|
|
#define JKVTYPE_FLTARR 0x14
|
|
#define JKVTYPE_BLKARR 0x15
|
|
|
|
|
|
#define JB_MALLOCERR -1
|
|
#define JB_KEYEXISTS -2
|
|
|
|
jblock_t* new_jblock();
|
|
void jblock_init(jblock_t* block);
|
|
void jblock_outjson(jblock_t* block, char** res);
|
|
void jblock_destroy(jblock_t* block);
|
|
void jblock_free(jblock_t* jb);
|
|
|
|
int jblock_addint(jblock_t* block, char* key, int64_t val);
|
|
int jblock_addfloat(jblock_t* block, char* key, double val);
|
|
int jblock_addstr(jblock_t* block, char* key, char* val);
|
|
int jblock_addbool(jblock_t* block, char* key, bool val);
|
|
|
|
jintarr_t* new_jintarr(void);
|
|
void* jintarr_init(jintarr_t* array);
|
|
void* jintarr_append(jintarr_t* array, int64_t add);
|
|
int64_t* jintarr_getref(jintarr_t* array);
|
|
void jintarr_destroy(jintarr_t* array);
|
|
void jintarr_free(jintarr_t* array);
|
|
|
|
jfltarr_t* new_jfltarr(void);
|
|
void* jfltarr_init(jfltarr_t* array);
|
|
void* jfltarr_append(jfltarr_t* array, double add);
|
|
double* jfltarr_getref(jfltarr_t* array);
|
|
void jfltarr_destroy(jfltarr_t* array);
|
|
void jfltarr_free(jfltarr_t* array);
|
|
|
|
jboolarr_t* new_jboolarr(void);
|
|
void* jboolarr_init(jboolarr_t* array);
|
|
void* jboolarr_append(jboolarr_t* array, bool add);
|
|
bool* jboolarr_getref(jboolarr_t* array);
|
|
void jboolarr_destroy(jboolarr_t* array);
|
|
void jboolarr_free(jboolarr_t* array);
|
|
|
|
|
|
#endif
|