summaryrefslogtreecommitdiff
path: root/c_src/permdb.h
diff options
context:
space:
mode:
authorMagnus Ahltorp <map@kth.se>2015-09-28 16:42:04 +0200
committerLinus Nordberg <linus@nordu.net>2015-11-11 13:32:37 +0100
commit9b2e72510b33547794207043714f52e16239b3f5 (patch)
tree5e9461b694a4c9c25108e8843122aa42454a1a6f /c_src/permdb.h
parent90760d10d14c11ee4c99826163c206bbf20a77f6 (diff)
Added permdb
Diffstat (limited to 'c_src/permdb.h')
-rw-r--r--c_src/permdb.h59
1 files changed, 59 insertions, 0 deletions
diff --git a/c_src/permdb.h b/c_src/permdb.h
new file mode 100644
index 0000000..ee1cd66
--- /dev/null
+++ b/c_src/permdb.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2015, NORDUnet A/S.
+ * See LICENSE for licensing information.
+ */
+
+#ifndef PERMDB_H
+#define PERMDB_H
+
+#define entriespernode 4
+
+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
+
+struct permdb_object;
+
+typedef struct permdb_object permdb_object;
+
+node_entry
+get_entry_in_node(node_object node, unsigned char n);
+
+char *
+read_internal_data(permdb_object *state, node_offset offset, unsigned int length);
+
+node_object
+readnode(permdb_object *state, node_offset offset, const char *cachekey);
+
+node_offset
+datasize(permdb_object *state);
+
+int
+addvalue(permdb_object *state, const char *key, unsigned int keylength, const char *data, unsigned int datalength);
+
+char *
+getvalue(permdb_object *state, const char *key, int keylen, unsigned int *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