#include #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 *dict = b_dict_create(); b_dict_put(dict, "hello", B_RV_INT(32)); b_dict_put(dict, "world", B_RV_INT(64)); b_dict_put(dict, "more", B_RV_INT(128)); b_dict_put(dict, "other", B_RV_INT(256)); b_iterator *it = b_iterator_begin(dict); size_t i = 0; b_foreach(b_dict_item *, item, it) { printf("item %zu: %s=%d\n", i++, b_string_ptr(item->key), b_number_get_int(item->value)); } b_iterator_unref(it); 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); #if 0 it = b_iterator_begin(tree); 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); #endif b_dict_unref(dict); return 0; }