--- a/tests/test_tree.c Sat Dec 06 17:51:08 2025 +0100 +++ b/tests/test_tree.c Sat Dec 06 18:01:52 2025 +0100 @@ -75,7 +75,7 @@ static void *tree_node_file_create_hl( const void *dptr, void *tree) { - return tree_node_file_create(dptr, (void*)((CxTree*)tree)->allocator); + return tree_node_file_create(dptr, (void*)((CxTree*)tree)->collection.allocator); } static int tree_node_file_search(const void *l, const void *r) { @@ -1888,14 +1888,16 @@ tree_node_file_layout ); CX_TEST_ASSERT(tree->cl != NULL); - CX_TEST_ASSERT(tree->allocator == &talloc.base); + CX_TEST_ASSERT(tree->collection.allocator == &talloc.base); CX_TEST_ASSERT(tree->node_create == tree_node_file_create_hl); CX_TEST_ASSERT(tree->search == tree_node_file_search); CX_TEST_ASSERT(tree->search_data == tree_node_file_search_data); - CX_TEST_ASSERT(tree->size == 0); - CX_TEST_ASSERT(tree->simple_destructor == NULL); - CX_TEST_ASSERT(tree->advanced_destructor == (cx_destructor_func2) cxFree); - CX_TEST_ASSERT(tree->destructor_data == &talloc.base); + CX_TEST_ASSERT(tree->collection.size == 0); + CX_TEST_ASSERT(tree->collection.simple_destructor == NULL); + CX_TEST_ASSERT(tree->collection.advanced_destructor == (cx_destructor_func2) cxFree); + CX_TEST_ASSERT(tree->collection.destructor_data == &talloc.base); + CX_TEST_ASSERT(tree->collection.store_pointer == false); + CX_TEST_ASSERT(tree->collection.sorted == false); CX_TEST_ASSERT(tree->root == NULL); CX_TEST_ASSERT(tree->loc_parent == offsetof(tree_node_file, parent)); CX_TEST_ASSERT(tree->loc_children == offsetof(tree_node_file, children)); @@ -1921,14 +1923,14 @@ tree_node_file_search_data ); CX_TEST_ASSERT(tree->cl != NULL); - CX_TEST_ASSERT(tree->allocator == cxDefaultAllocator); + CX_TEST_ASSERT(tree->collection.allocator == cxDefaultAllocator); CX_TEST_ASSERT(tree->node_create == tree_node_file_create_hl); CX_TEST_ASSERT(tree->search == tree_node_file_search); CX_TEST_ASSERT(tree->search_data == tree_node_file_search_data); - CX_TEST_ASSERT(tree->size == 0); - CX_TEST_ASSERT(tree->simple_destructor == NULL); - CX_TEST_ASSERT(tree->advanced_destructor == (cx_destructor_func2) cxFree); - CX_TEST_ASSERT(tree->destructor_data == cxDefaultAllocator); + CX_TEST_ASSERT(tree->collection.size == 0); + CX_TEST_ASSERT(tree->collection.simple_destructor == NULL); + CX_TEST_ASSERT(tree->collection.advanced_destructor == (cx_destructor_func2) cxFree); + CX_TEST_ASSERT(tree->collection.destructor_data == cxDefaultAllocator); CX_TEST_ASSERT(tree->root == NULL); CX_TEST_ASSERT(tree->loc_parent == offsetof(struct cx_tree_node_base_s, parent)); CX_TEST_ASSERT(tree->loc_children == offsetof(struct cx_tree_node_base_s, children)); @@ -1947,15 +1949,15 @@ CX_TEST_DO { CxTree *tree = cxTreeCreateWrapped(NULL, &root, tree_node_layout); CX_TEST_ASSERT(tree->cl != NULL); - CX_TEST_ASSERT(tree->allocator == cxDefaultAllocator); + CX_TEST_ASSERT(tree->collection.allocator == cxDefaultAllocator); CX_TEST_ASSERT(tree->node_create == NULL); CX_TEST_ASSERT(tree->search == NULL); CX_TEST_ASSERT(tree->search_data == NULL); CX_TEST_ASSERT(tree->root == &root); - CX_TEST_ASSERT(tree->size == 4); - CX_TEST_ASSERT(tree->simple_destructor == NULL); - CX_TEST_ASSERT(tree->advanced_destructor == NULL); - CX_TEST_ASSERT(tree->destructor_data == NULL); + CX_TEST_ASSERT(tree->collection.size == 4); + CX_TEST_ASSERT(tree->collection.simple_destructor == NULL); + CX_TEST_ASSERT(tree->collection.advanced_destructor == NULL); + CX_TEST_ASSERT(tree->collection.destructor_data == NULL); CX_TEST_ASSERT(tree->loc_parent == offsetof(tree_node, parent)); CX_TEST_ASSERT(tree->loc_children == offsetof(tree_node, children)); CX_TEST_ASSERT(tree->loc_last_child == -1); @@ -2185,9 +2187,8 @@ cxFree(alloc, usr); // for the subtree, we use a little trick and wrap it in a new tree CxTree *foo_tree = cxTreeCreateWrapped(alloc, foo, tree_node_file_layout); - foo_tree->allocator = alloc; - foo_tree->advanced_destructor = (cx_destructor_func2 ) cxFree; - foo_tree->destructor_data = alloc; + foo_tree->collection.allocator = alloc; + cxDefineAdvancedDestructor(foo_tree, cxFree, alloc); cxTreeFree(foo_tree); CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); } @@ -2305,8 +2306,7 @@ cxTreeFree(tree); CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc)); CxTree *w = cxTreeCreateWrapped(alloc, root, tree_node_file_layout); - w->advanced_destructor = (cx_destructor_func2) cxFree; - w->destructor_data = alloc; + cxDefineAdvancedDestructor(w, cxFree, alloc); cxTreeDestroySubtree(w, w->root); CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc)); cxTreeFree(w); @@ -2326,7 +2326,7 @@ cx_tree_link(&child1, &child3, tree_node_layout); CX_TEST_DO { CxTree *tree = cxTreeCreateWrapped(cxDefaultAllocator, &root, tree_node_layout); - tree->simple_destructor = test_tree_high_simple_destructor_func; + cxDefineDestructor(tree,test_tree_high_simple_destructor_func); cxTreeDestroyNode(tree, &child1, NULL); cxTreeFree(tree); CX_TEST_ASSERT(root.data == 1);