src/list.c

changeset 525
536646d1575b
parent 524
e98b09018d32
child 526
b070ef465313
equal deleted inserted replaced
524:e98b09018d32 525:536646d1575b
27 */ 27 */
28 28
29 #include "cx/list.h" 29 #include "cx/list.h"
30 30
31 CxList *cxListDestroy(CxList *list) { 31 CxList *cxListDestroy(CxList *list) {
32 if (list->content_destructor == NULL) { 32 if (list->content_destructor != NULL) {
33 if (list->autofree_contents) { 33 CxIterator iter = cxListBegin(list);
34 CxIterator iter = cxListBegin(list); 34 cx_foreach(void*, elem, iter) {
35 cx_foreach(void*, elem, iter) { 35 cxFree(list->allocator, list->content_destructor(elem));
36 cxFree(list->allocator, elem);
37 }
38 }
39 } else {
40 // avoid checking this condition every loop iteration
41 if (list->autofree_contents) {
42 CxIterator iter = cxListBegin(list);
43 cx_foreach(void*, elem, iter) {
44 cxFree(list->allocator, list->content_destructor(elem));
45 }
46 } else {
47 CxIterator iter = cxListBegin(list);
48 cx_foreach(void*, elem, iter) {
49 elem = list->content_destructor(elem);
50 }
51 } 36 }
52 } 37 }
53 list->cl->destructor(list); 38 list->cl->destructor(list);
54 cxFree(list->allocator, list); 39 cxFree(list->allocator, list);
55 return NULL; 40 return NULL;

mercurial