shithub: blie

ref: 2f61e9979e69ab014cdd44ea71fa787ea3454446
dir: /db.h/

View raw version
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);