summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
author0scar <qgt268@alumni.ku.dk>2022-01-02 19:14:18 +0000
committer0scar <qgt268@alumni.ku.dk>2022-01-02 19:14:18 +0000
commitc3e8bacc389099e332239319f61338f2be6704cf (patch)
tree8776e7776533cb8c8e905332b52f02ec8eb95f1e /src
parenta748bd8c8bc99974186c9fa17b6897dc83036d30 (diff)
Add iterator reset function
This avoids that one has to malloc a new iterator struct
Diffstat (limited to 'src')
-rw-r--r--src/btree.h20
-rw-r--r--src/btree_naive.c10
2 files changed, 20 insertions, 10 deletions
diff --git a/src/btree.h b/src/btree.h
index 2cb4016..13b0a4b 100644
--- a/src/btree.h
+++ b/src/btree.h
@@ -36,20 +36,22 @@ struct btree* btree_new_with_allocator(
void *(*alloc)(size_t),
void (*dealloc)(void*));
-void btree_free(struct btree *btree);
+void btree_free(struct btree *btree);
-void* btree_search(struct btree *btree, void *elem);
-void btree_insert(struct btree *btree, void *elem);
-int btree_delete(struct btree *btree, void *elem);
+void* btree_search(struct btree *btree, void *elem);
+void btree_insert(struct btree *btree, void *elem);
+int btree_delete(struct btree *btree, void *elem);
-void btree_print(struct btree *btree, void (*print_elem)(const void*));
+void btree_print(struct btree *btree, void (*print_elem)(const void*));
-void* btree_first(struct btree *btree);
-void* btree_last(struct btree *btree);
+void* btree_first(struct btree *btree);
+void* btree_last(struct btree *btree);
size_t btree_size(struct btree *btree);
-struct btree_iter_t* btree_iter_t_new(struct btree *tree);
-void* btree_iter(struct btree *tree, struct btree_iter_t *iter);
+struct btree_iter_t* btree_iter_t_new(struct btree* tree);
+void btree_iter_t_reset(struct btree *tree, struct btree_iter_t** it);
+
+void* btree_iter(struct btree *tree, struct btree_iter_t *iter);
#endif
diff --git a/src/btree_naive.c b/src/btree_naive.c
index eed32be..8e7aeb0 100644
--- a/src/btree_naive.c
+++ b/src/btree_naive.c
@@ -730,7 +730,7 @@ size_t btree_size(struct btree *btree) {
struct btree_iter_t* btree_iter_t_new(struct btree *tree) {
struct btree_iter_t *iter = NULL;
- iter = (struct btree_iter_t*)malloc(sizeof(struct btree_iter_t*));
+ iter = (struct btree_iter_t*)malloc(sizeof(struct btree_iter_t));
if (tree != NULL) {
iter->head = 0;
@@ -745,6 +745,14 @@ struct btree_iter_t* btree_iter_t_new(struct btree *tree) {
}
+void btree_iter_t_reset(struct btree *tree, struct btree_iter_t** it) {
+ (*it)->head = 0;
+
+ (*it)->stack[0].pos = 0;
+ (*it)->stack[0].node = tree->root;
+}
+
+
void* btree_iter(struct btree *tree, struct btree_iter_t *iter) {
register int pos;
register ssize_t head;