summaryrefslogtreecommitdiff
path: root/src/btree_naive.c
blob: bc881f13b41e5cb7d940480b43909b7d31f1e727 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include "btree.h"

#include <stdlib.h>
#include <stdbool.h>

typedef unsigned char byte;

struct node {
	size_t n; /* number of items */
	bool leaf;
	byte *items;
	struct node *children;
};

struct btree {
	/* Memory stuffs */
	void *(*alloc)(size_t);
	void (*dealloc)(void*);

	/* Size stuffs */
	size_t elem_size;
	size_t degree;

	/* comparison */
	int (*cmp)(const void *a, const void *b);
};

struct btree *btree_new(size_t elem_size,
                        size_t t,
                        int(*cmp)(const void *a, const void *b)) {
	return btree_new_with_allocator(elem_size, t, cmp, malloc, free);
}

struct btree *btree_new_with_allocator(size_t elem_size,
                        size_t t,
                        int(*cmp)(const void *a, const void *b),
                        void *(*alloc)(size_t),
                        void (*dealloc)(void*)) {
	struct btree *new_tree = malloc(sizeof(struct btree));

	new_tree->alloc        = alloc;
	new_tree->dealloc      = dealloc;

	new_tree->elem_size    = elem_size;
	new_tree->degree       = t;

	new_tree->cmp          = cmp;
}

void btree_free(struct btree *btree) {
	/*btree->dealloc(btree->root);*/
	free(btree);
	btree = NULL;
}

void *btree_search(struct btree *btree, void *elem) {}
void *btree_insert(struct btree *btree, void *elem) {}
void *btree_delete(struct btree *btree, void *elem) {}