/* * Copyright (c) 2015, NORDUnet A/S. * See LICENSE for licensing information. */ #ifndef PERMDB_H #define PERMDB_H #define ENTRIESPERNODE 4 /* q = 2 */ typedef uint64_t node_entry; typedef uint64_t node_offset; typedef struct node_object { node_entry data[ENTRIESPERNODE]; } node_object; #define NODE_ENTRY_DIRTY_NODE 0x7FFFFFFFFFFFFFFFULL #define NODE_ENTRY_ISDATA 0x8000000000000000ULL #define NODE_ENTRY_OFFSET_MASK 0x7FFFFFFFFFFFFFFFULL #define NODE_ENTRY_ERROR_NODE 0xFFFFFFFFFFFFFFFFULL struct permdb_object; typedef struct permdb_object permdb_object; node_entry get_entry_in_node(node_object node, unsigned char n); unsigned char * read_internal_data(permdb_object *state, node_offset offset, size_t length); node_offset datasize(permdb_object *state); int addvalue(permdb_object *state, const unsigned char *key, unsigned int keylength, const unsigned char *data, size_t datalength, node_offset dataoffset); unsigned char * getvalue(permdb_object *state, const unsigned char *key, size_t keylength, size_t *datalen); void delete_all_nodes_in_cache(permdb_object *state); void portloop(permdb_object *state); permdb_object * permdb_alloc(const char *dbpath); void permdb_free(permdb_object *state); int committree(permdb_object *state); #endif