diff options
| -rw-r--r-- | dlist.c | 20 |
1 files changed, 14 insertions, 6 deletions
| @@ -28,6 +28,12 @@ dlist_init(struct dlist *dlist) | |||
| 28 | dlist->tail = NULL; | 28 | dlist->tail = NULL; |
| 29 | } | 29 | } |
| 30 | 30 | ||
| 31 | bool | ||
| 32 | dlist_empty(struct dlist *dlist) | ||
| 33 | { | ||
| 34 | return dlist->head == NULL; | ||
| 35 | } | ||
| 36 | |||
| 31 | static struct dlist_element * | 37 | static struct dlist_element * |
| 32 | create_element(T data) | 38 | create_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) | |||
| 238 | void | 244 | void |
| 239 | dlist_apply_rev(struct dlist *dlist, void (*visit)(T data, void *cl), void *cl) | 245 | dlist_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 | ||
| 245 | void | 252 | void |
| @@ -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 | ||
