#ifndef SP_META_H_
#define SP_META_H_
/*
* sophia database
* sphia.org
*
* Copyright (c) Dmitry Simonenko
* BSD License
*/
/* on-disk */
typedef struct splogh splogh;
typedef struct speofh speofh;
typedef struct sppageh sppageh;
typedef struct spvh spvh;
#define SPEOF 0x00aaeefdL
#define SPMAGIC 0x00f0e0d0L
struct splogh {
uint32_t magic;
uint8_t version[2];
} sppacked;
struct speofh {
uint32_t magic;
} sppacked;
struct sppageh {
uint32_t crc;
uint64_t id;
uint16_t count;
uint32_t size;
uint32_t bsize;
} sppacked;
struct spvh {
uint32_t crc;
uint32_t size;
uint32_t voffset;
uint32_t vsize;
uint8_t flags;
char key[];
} sppacked;
/* in-memory */
typedef struct spv spv;
typedef struct sppage sppage;
#define SPSET 1
#define SPDEL 2
struct spv {
uint32_t epoch;
uint32_t crc; /* key-value crc without header */
uint16_t size;
uint8_t flags;
char key[];
/* uint32_t vsize */
/* char v[] */
} sppacked;
struct sppage {
uint64_t id;
uint64_t offset;
void *epoch;
uint32_t size;
spv *min;
spv *max;
splist link;
} sppacked;
static inline char*
sp_vv(spv *v) {
return v->key + v->size + sizeof(uint32_t);
}
static inline uint32_t
sp_vvsize(spv *v) {
register char *p = (char*)(v->key + v->size);
return *(uint32_t*)p;
}
#endif