diff --git a/main.c b/main.c index 893c595..e4f718d 100644 --- a/main.c +++ b/main.c @@ -25,16 +25,8 @@ int main(int argc, char *argv[]) { /* printf("======================================== LOOP ITERATION %d\n", outer); */ /* tt_dump_arena_summary(&a); */ for (i = 0; i < 1000000; i++) { - tt_node_ptr_t leaf = tt_arena_cons(&a, - TT_TAG_LEAF, - 0, - TT_OK, - 1001); - tt_node_ptr_t curr = tt_arena_cons(&a, - TT_TAG_NODE, - 0, - leaf, - prev); + tt_node_ptr_t leaf = tt_cons_leaf(&a, TT_OK, 1001); + tt_node_ptr_t curr = tt_cons_node(&a, 0, leaf, prev); /* tt_dump_arena(&a); */ prev = curr; } diff --git a/treetrie.h b/treetrie.h index d7feb89..a426635 100644 --- a/treetrie.h +++ b/treetrie.h @@ -95,6 +95,29 @@ extern tt_node_ptr_t tt_arena_cons(tt_arena_t *a, extern tt_node_ptr_t tt_grab(tt_arena_t *a, tt_node_ptr_t i); extern void tt_drop(tt_arena_t *a, tt_node_ptr_t i); +static inline tt_node_ptr_t tt_cons_tail(tt_arena_t *a, tt_node_ptr_t p) { + return tt_arena_cons(a, TT_TAG_TAIL, 0, p, TT_NO_PTR); +} + +static inline tt_node_ptr_t tt_cons_branch(tt_arena_t *a, + tt_node_ptr_t wildcard, /* trie */ + tt_node_ptr_t others) /* dict */ +{ + return tt_arena_cons(a, TT_TAG_BRANCH, 0, wildcard, others); +} + +static inline tt_node_ptr_t tt_cons_leaf(tt_arena_t *a, tt_node_ptr_t p, tt_atom_t atom) { + return tt_arena_cons(a, TT_TAG_LEAF, 0, p, atom); +} + +static inline tt_node_ptr_t tt_cons_node(tt_arena_t *a, + unsigned int index, + tt_node_ptr_t zero, + tt_node_ptr_t one) +{ + return tt_arena_cons(a, TT_TAG_NODE, index, zero, one); +} + #ifdef __cplusplus } #endif