aboutsummaryrefslogtreecommitdiff
path: root/dlist.c
diff options
context:
space:
mode:
Diffstat (limited to 'dlist.c')
-rw-r--r--dlist.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/dlist.c b/dlist.c
index 5a11c5b..a2a5cfd 100644
--- a/dlist.c
+++ b/dlist.c
@@ -28,6 +28,12 @@ dlist_init(struct dlist *dlist)
28 dlist->tail = NULL; 28 dlist->tail = NULL;
29} 29}
30 30
31bool
32dlist_empty(struct dlist *dlist)
33{
34 return dlist->head == NULL;
35}
36
31static struct dlist_element * 37static struct dlist_element *
32create_element(T data) 38create_element(T data)
33{ 39{
@@ -50,11 +56,11 @@ dlist_push_front(struct dlist *dlist, T data)
50 if ( element != NULL ) { 56 if ( element != NULL ) {
51 element->prev = NULL; /* Vorgänger ist in jedem Fall NULL */ 57 element->prev = NULL; /* Vorgänger ist in jedem Fall NULL */
52 58
53 if ( dlist->head == NULL ) { /* empty list */ 59 if ( dlist_empty(dlist) ) {
54 element->next = NULL; 60 element->next = NULL;
55 dlist->tail = element; 61 dlist->tail = element;
56 } 62 }
57 else { /* non empty list */ 63 else {
58 element->next = dlist->head; 64 element->next = dlist->head;
59 element->next->prev = element; 65 element->next->prev = element;
60 } 66 }
@@ -76,11 +82,11 @@ dlist_push_back(struct dlist *dlist, T data)
76 if ( element != NULL ) { 82 if ( element != NULL ) {
77 element->next = NULL; /* Nachfolger ist in jedem Fall NULL */ 83 element->next = NULL; /* Nachfolger ist in jedem Fall NULL */
78 84
79 if ( dlist->head == NULL ) { /* empty list */ 85 if ( dlist_empty(dlist) ) {
80 element->prev = NULL; 86 element->prev = NULL;
81 dlist->head = element; 87 dlist->head = element;
82 } 88 }
83 else { /* non empty list */ 89 else {
84 element->prev = dlist->tail; 90 element->prev = dlist->tail;
85 element->prev->next = element; 91 element->prev->next = element;
86 } 92 }
@@ -238,8 +244,9 @@ dlist_free(struct dlist *dlist)
238void 244void
239dlist_apply_rev(struct dlist *dlist, void (*visit)(T data, void *cl), void *cl) 245dlist_apply_rev(struct dlist *dlist, void (*visit)(T data, void *cl), void *cl)
240{ 246{
241 for ( struct dlist_element *elem = dlist->tail; elem; elem = elem->prev ) 247 for ( struct dlist_element *elem = dlist->tail; elem; elem = elem->prev ) {
242 visit(elem->data, cl); 248 visit(elem->data, cl);
249 }
243} 250}
244 251
245void 252void
@@ -272,8 +279,9 @@ remove_if(struct dlist *list)
272 for ( elem = list->head; elem; elem = next ) { 279 for ( elem = list->head; elem; elem = next ) {
273 next = elem->next; 280 next = elem->next;
274 281
275 if ( (elem->data & 1) == 1 ) 282 if ( (elem->data & 1) == 1 ) {
276 dlist_remove(list, elem); 283 dlist_remove(list, elem);
284 }
277 } 285 }
278} 286}
279 287