#include #include #include #include #include #define NITEMS 16 struct tree_item { int value; b_tree_node node; }; struct btree_item { int value; b_btree_node node; }; B_BTREE_DEFINE_SIMPLE_GET(struct btree_item, int, node, value, get_node) B_BTREE_DEFINE_SIMPLE_INSERT(struct btree_item, node, value, put_node) int main(void) { b_dict_item items[] = {B_DICT_ITEM("hello", B_RV_INT(32)), B_DICT_ITEM("world", B_RV_INT(64)), B_DICT_ITEM("more", B_RV_INT(128)), B_DICT_ITEM("other", B_RV_INT(256)), B_DICT_ITEM_END}; b_dict *dict = b_dict_create_with_items(items); b_dict_iterator it; b_dict_foreach(&it, dict) { printf("item %zu: %s=%d\n", it.i, b_string_ptr(it.key), b_number_get_int(it.value)); } b_tree *tree = b_tree_create(); struct tree_item items2[NITEMS]; for (int i = 0; i < NITEMS; i++) { items2[i].value = i; items2[i].node = B_TREE_NODE_INIT; } b_tree_set_root(tree, &items2[0].node); b_tree_node_add_child(&items2[0].node, &items2[1].node); b_tree_node_add_child(&items2[0].node, &items2[2].node); b_tree_node_add_child(&items2[0].node, &items2[3].node); b_tree_node_add_child(&items2[0].node, &items2[7].node); b_tree_node_add_child(&items2[1].node, &items2[4].node); b_tree_node_add_child(&items2[1].node, &items2[5].node); b_tree_node_add_child(&items2[4].node, &items2[6].node); b_tree_iterator it2; b_tree_foreach(&it2, tree) { struct tree_item *item = b_unbox(struct tree_item, it2.node, node); for (size_t i = 0; i < it2.depth; i++) { fputs(" ", stdout); } printf("%u\n", item->value); } b_btree btree = {0}; struct btree_item items3[NITEMS] = {0}; for (int i = 0; i < NITEMS; i++) { items3[i].value = i; put_node(&btree, &items3[i]); } printf("\n\n"); b_btree_iterator it3; b_btree_foreach (&it3, &btree) { struct btree_item *item = b_unbox(struct btree_item, it3.node, node); for (size_t i = 0; i < it3.depth; i++) { fputs(" ", stdout); } printf("%d\n", item->value); } b_btree_iterator_begin(&btree, &it3); while (b_btree_iterator_is_valid(&it3)) { struct btree_item *item = b_unbox(struct btree_item, it3.node, node); if (item->value == 9) { b_btree_iterator_erase(&it3); } else { b_btree_iterator_next(&it3); } } printf("\n\n"); b_btree_foreach (&it3, &btree) { struct btree_item *item = b_unbox(struct btree_item, it3.node, node); for (size_t i = 0; i < it3.depth; i++) { fputs(" ", stdout); } printf("%d\n", item->value); } b_tree_unref(tree); b_dict_unref(dict); return 0; }