summaryrefslogtreecommitdiff
path: root/usr.sbin/ldapd/btree.h
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/ldapd/btree.h')
-rw-r--r--usr.sbin/ldapd/btree.h128
1 files changed, 128 insertions, 0 deletions
diff --git a/usr.sbin/ldapd/btree.h b/usr.sbin/ldapd/btree.h
new file mode 100644
index 00000000000..926cea6b0f4
--- /dev/null
+++ b/usr.sbin/ldapd/btree.h
@@ -0,0 +1,128 @@
+/* $OpenBSD: btree.h,v 1.1 2010/05/31 17:36:31 martinh Exp $ */
+
+/*
+ * Copyright (c) 2009, 2010 Martin Hedenfalk <martin@bzero.se>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef _btree_h_
+#define _btree_h_
+
+#include <openssl/sha.h>
+#include <stdint.h>
+
+struct mpage;
+struct cursor;
+struct btree_txn;
+
+struct btval {
+ void *data;
+ size_t size;
+ int free_data; /* true if data malloc'd */
+ struct mpage *mp; /* ref'd memory page */
+};
+
+typedef uint32_t pgno_t;
+typedef uint16_t indx_t;
+typedef int (*bt_cmp_func)(const struct btval *a,
+ const struct btval *b);
+typedef void (*bt_prefix_func)(const struct btval *a,
+ const struct btval *b,
+ struct btval *sep);
+
+#define BT_NOOVERWRITE 1
+
+enum cursor_op { /* cursor operations */
+ BT_CURSOR, /* position at given key */
+ BT_FIRST,
+ BT_NEXT,
+ BT_LAST, /* not implemented */
+ BT_PREV /* not implemented */
+};
+
+/* return codes */
+#define BT_FAIL -1
+#define BT_SUCCESS 0
+#define BT_NOTFOUND 1
+#define BT_EXISTS 2
+
+/* btree flags */
+#define BT_NOSYNC 0x01 /* don't fsync after commit */
+#define BT_RDONLY 0x08 /* read only */
+#define BT_REVERSEKEY 0x10 /* use reverse string keys */
+
+struct btree_stat {
+ unsigned long long int hits; /* cache hits */
+ unsigned long long int reads; /* page reads */
+ unsigned int max_cache; /* max cached pages */
+ unsigned int cache_size; /* current cache size */
+ unsigned int branch_pages;
+ unsigned int leaf_pages;
+ unsigned int overflow_pages;
+ unsigned int revisions;
+ unsigned int depth;
+ unsigned long long int entries;
+ unsigned int psize;
+ time_t created_at;
+};
+
+struct btree *btree_open_fd(int fd, uint32_t flags);
+struct btree *btree_open(const char *path, uint32_t flags,
+ mode_t mode);
+void btree_close(struct btree *bt);
+const struct btree_stat *btree_stat(struct btree *bt);
+
+struct btree_txn *btree_txn_begin(struct btree *bt, int rdonly);
+int btree_txn_commit(struct btree_txn *txn);
+void btree_txn_abort(struct btree_txn *txn);
+
+int btree_txn_get(struct btree *bt, struct btree_txn *txn,
+ struct btval *key, struct btval *data);
+int btree_txn_put(struct btree *bt, struct btree_txn *txn,
+ struct btval *key, struct btval *data,
+ unsigned int flags);
+int btree_txn_del(struct btree *bt, struct btree_txn *txn,
+ struct btval *key, struct btval *data);
+
+#define btree_get(bt, key, data) \
+ btree_txn_get(bt, NULL, key, data)
+#define btree_put(bt, key, data, flags) \
+ btree_txn_put(bt, NULL, key, data, flags)
+#define btree_del(bt, key, data) \
+ btree_txn_del(bt, NULL, key, data)
+
+void btree_set_cache_size(struct btree *bt,
+ unsigned int cache_size);
+unsigned int btree_get_flags(struct btree *bt);
+const char *btree_get_path(struct btree *bt);
+
+#define btree_cursor_open(bt) \
+ btree_txn_cursor_open(bt, NULL)
+struct cursor *btree_txn_cursor_open(struct btree *bt,
+ struct btree_txn *txn);
+void btree_cursor_close(struct cursor *cursor);
+int btree_cursor_get(struct cursor *cursor,
+ struct btval *key, struct btval *data,
+ enum cursor_op op);
+
+int btree_sync(struct btree *bt);
+int btree_compact(struct btree *bt);
+int btree_revert(struct btree *bt);
+
+int btree_cmp(struct btree *bt, const struct btval *a,
+ const struct btval *b);
+void btval_reset(struct btval *btv);
+
+#endif
+