view src/list.h @ 5:e117c4d93602

Added list - a doubly linked list. Fixed memory leaks in some of the test drivers.
author Eris Caffee <discordia@eldalin.com>
date Fri, 21 Sep 2012 18:42:49 -0500
parents
children abdba37f67a2
line source
1 #ifndef LIST_H_
2 #define LIST_H_
4 #include <stddef.h>
6 struct list_node
7 {
8 struct list_node * next;
9 struct list_node * prev;
10 void * data;
11 };
13 struct list
14 {
15 struct list_node * head;
16 struct list_node * tail;
17 size_t size;
18 };
20 struct list_iterator
21 {
22 struct list * l;
23 struct list_node * curr;
24 };
26 struct list * list_new(void);
27 void list_delete(struct list * l);
29 size_t list_size(struct list * l);
31 void * list_push_back(struct list * l, void * elem);
32 void * list_pop_back(struct list * l);
33 void * list_push_front(struct list * l, void * elem);
34 void * list_pop_front(struct list * l);
37 // The iterators are different that their c++ STL counterparts.
38 // They are bi-directional, and list_end points to the last element, not the empty space beyond the last elem.
39 void * list_begin(struct list * l, struct list_iterator * lit);
40 void * list_end(struct list * l, struct list_iterator * lit);
41 void * list_next(struct list_iterator * lit);
42 void * list_prev(struct list_iterator * lit);
43 void * list_erase(struct list_iterator * lit);
44 void * list_insert_after(struct list_iterator * lit, void * elem);
45 void * list_insert_before(struct list_iterator * lit, void * elem);
46 void * list_value(struct list_iterator * lit);
48 #endif