#ifndef SOPHIA_H_ #define SOPHIA_H_ /* * sophia database * sphia.org * * Copyright (c) Dmitry Simonenko * BSD License */ #include #include typedef void *(*spallocf)(void*, size_t, void*); typedef int (*spcmpf)(char*, size_t, char*, size_t, void*); typedef enum { /* env related */ SPDIR, /* uint32_t, char* */ SPALLOC, /* spallocf, void* */ SPCMP, /* spcmpf, void* */ SPPAGE, /* uint32_t */ SPGC, /* int */ SPGCF, /* double */ SPGROW, /* uint32_t, double */ SPMERGE, /* int */ SPMERGEWM, /* uint32_t */ /* db related */ SPMERGEFORCE, /* unrelated */ SPVERSION /* uint32_t*, uint32_t* */ } spopt; enum { SPO_RDONLY = 1, SPO_RDWR = 2, SPO_CREAT = 4, SPO_SYNC = 8 }; typedef enum { SPGT, SPGTE, SPLT, SPLTE } sporder; typedef struct { uint32_t epoch; uint64_t psn; uint32_t repn; uint32_t repndb; uint32_t repnxfer; uint32_t catn; uint32_t indexn; uint32_t indexpages; } spstat; void *sp_env(void); void *sp_open(void*); int sp_ctl(void*, spopt, ...); int sp_destroy(void*); int sp_set(void*, const void*, size_t, const void*, size_t); int sp_delete(void*, const void*, size_t); int sp_get(void*, const void*, size_t, void**, size_t*); void *sp_cursor(void*, sporder, const void*, size_t); int sp_fetch(void*); const char *sp_key(void*); size_t sp_keysize(void*); const char *sp_value(void*); size_t sp_valuesize(void*); char *sp_error(void*); void sp_stat(void*, spstat*); #endif