- if (op == 0 && src == left)
- src = right;
- else
- src = NULL;
- } while (src != NULL);
-
- return res;
-}
-
-UcxList* ucx_list_union(UcxList const *left, UcxList const *right,
- cmp_func cmpfnc, void* cmpdata,
- copy_func cpfnc, void* cpdata) {
- return ucx_list_union_a(ucx_default_allocator(),
- left, right, cmpfnc, cmpdata, cpfnc, cpdata);
-}
-
-UcxList* ucx_list_union_a(UcxAllocator *allocator,
- UcxList const *left, UcxList const *right,
- cmp_func cmpfnc, void* cmpdata,
- copy_func cpfnc, void* cpdata) {
-
- return ucx_list_setoperation_a(allocator, left, right,
- cmpfnc, cmpdata, cpfnc, cpdata, 0);
-}
+ case CX_DESTRUCTOR_ADVANCED: {
+ CxIterator iter = cxListIterator(list);
+ cx_foreach(void*, elem, iter) {
+ // already correctly resolved pointer - immediately invoke dtor
+ list->advanced_destructor.func(list->advanced_destructor.data, elem);
+ }
+ break;
+ }
+ case CX_DESTRUCTOR_NONE:
+ break; // nothing
+ }