packages feed

bindings-sophia-0.1.0: sophia/db/sophia.h

#ifndef SOPHIA_H_
#define SOPHIA_H_

/*
 * sophia database
 * sphia.org
 *
 * Copyright (c) Dmitry Simonenko
 * BSD License
*/

#include <stdlib.h>
#include <stdint.h>

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