meta: rename legacy object module to 'ds'
This commit is contained in:
119
ds-test/trees.c
Normal file
119
ds-test/trees.c
Normal file
@@ -0,0 +1,119 @@
|
||||
#include <blue/core/btree.h>
|
||||
#include <blue/ds/dict.h>
|
||||
#include <blue/ds/number.h>
|
||||
#include <blue/ds/tree.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#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, it.key,
|
||||
b_number_get_int(B_NUMBER(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_release(tree);
|
||||
b_dict_release(dict);
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user