69 if (kv_list->map_destr2) { |
69 if (kv_list->map_destr2) { |
70 kv_list->map_destr2(kv_list->map_destr_data, elem); |
70 kv_list->map_destr2(kv_list->map_destr_data, elem); |
71 } |
71 } |
72 } |
72 } |
73 |
73 |
74 static void cx_kv_list_destructor_wrapper_map(void *list_ptr, void *node_data) { |
|
75 const cx_kv_list *kv_list = list_ptr; |
|
76 // the elem called with a map destructor is a pointer to the node |
|
77 // we need to deref the elem accordingly |
|
78 void *elem = kv_list->list.base.collection.store_pointer ? *(void**)node_data : node_data; |
|
79 if (kv_list->list_destr) { |
|
80 kv_list->list_destr(elem); |
|
81 } |
|
82 if (kv_list->list_destr2) { |
|
83 kv_list->list_destr2(kv_list->list_destr_data, elem); |
|
84 } |
|
85 if (kv_list->map_destr) { |
|
86 kv_list->map_destr(elem); |
|
87 } |
|
88 if (kv_list->map_destr2) { |
|
89 kv_list->map_destr2(kv_list->map_destr_data, elem); |
|
90 } |
|
91 } |
|
92 |
|
93 static void cx_kv_list_update_destructors(cx_kv_list *list) { |
74 static void cx_kv_list_update_destructors(cx_kv_list *list) { |
94 // we copy the destructors to our custom fields and register |
75 // we copy the destructors to our custom fields and register |
95 // an own destructor function which invokes all these |
76 // an own destructor function which invokes all these |
96 if (list->list.base.collection.simple_destructor != NULL) { |
77 if (list->list.base.collection.simple_destructor != NULL) { |
97 list->list_destr = list->list.base.collection.simple_destructor; |
78 list->list_destr = list->list.base.collection.simple_destructor; |