ref: 8626465772e8dd47dfc7e5f0319f6458d3be5335
dir: /db.h/
typedef struct Db Db; typedef struct Dpack Dpack; typedef struct Dtuple Dtuple; /* format: <i1> <k1>=<v1> <k2>=<v2> <i2> <k1>=<v1> <k2>=<v2> */ struct Db { Dpack *dpack; char *file; }; struct Dpack { Dpack *next; char *id; Dtuple *tuple; }; struct Dtuple { Dtuple *next; char *key; char *value; }; Db *opendb(char *file); void freedb(Db*); int writedb(Db*, char *file); Dpack *getdpack(Db*, char *id); void setdval(Dpack*, char *key, char *value); char *getdval(Dpack*, char *key, char *def); void deldtuple(Dpack*, char *key); void deldpack(Db*, Dpack*); /* serializable structure: struct mystruct { int a; char *b; int c; }; Sdata data[] = { { INT, "a", "5" }, { STRING, "b", "hello" }, { INT, "c", nil }, { NIL, nil, nil }, }; */ #define STRUCT(name, type, dtype, dval) dtype name; #define SDATA(name, type, dtype, dval) { type, "name", dval }, #define ENDSDATA { NIL, nil, nil }, typedef enum { NIL = 0, INT, STRING, FLOAT, } Stype; typedef struct Sdata Sdata; struct Sdata { Stype type; char *name; char *def; }; void serialize(Dpack *dv, void *data, Sdata *desc); void deserialize(Dpack *dv, void *data, Sdata *desc);