00001
00002
00003
00004
00005
00006
00007
00008 #ifndef LIST_H
00009 #define LIST_H
00010
00013
00014
00015
00016
00017
00018
00019
00020
00021 #define list_delete cctools_list_delete
00022 #define list_free cctools_list_free
00023 #define list_pop_head cctools_list_pop_head
00024 #define list_peek_head cctools_list_peek_head
00025 #define list_pop_tail cctools_list_pop_tail
00026 #define list_peek_tail cctools_list_peek_tail
00027 #define list_remove cctools_list_remove
00028 #define list_find cctools_list_find
00029 #define list_create cctools_list_create
00030 #define list_splice cctools_list_splice
00031 #define list_split cctools_list_split
00032 #define list_size cctools_list_size
00033 #define list_push_priority cctools_list_push_priority
00034 #define list_push_head cctools_list_push_head
00035 #define list_push_tail cctools_list_push_tail
00036 #define list_iterate cctools_list_iterate
00037 #define list_iterate_reverse cctools_list_iterate_reverse
00038 #define list_first_item cctools_list_first_item
00039 #define list_next_item cctools_list_next_item
00040
00041 struct list_node {
00042 void *data;
00043 struct list_node *next;
00044 struct list_node *prev;
00045 int priority;
00046 };
00047
00048 struct list {
00049 struct list_node *head;
00050 struct list_node *tail;
00051 struct list_node *iter;
00052 int size;
00053 };
00054
00055 typedef int (*list_op_t) ( void *item, const void *arg );
00056
00061 struct list * list_create();
00062
00070 struct list* list_duplicate( struct list *list );
00071
00078 void list_delete( struct list *list );
00079
00085 void list_free( struct list *list );
00086
00093 struct list * list_splice( struct list *top, struct list *bottom );
00094
00104 struct list * list_split( struct list *src, list_op_t cmp, const void *arg );
00105
00111 int list_size( struct list *list );
00112
00119 int list_push_priority( struct list *list, void *item, int prio );
00120
00126 int list_push_head( struct list *list, void *item );
00127
00132 void * list_pop_head( struct list *list );
00133
00138 void * list_peek_head( struct list *list );
00139
00145 int list_push_tail( struct list *list, void *item );
00146
00151 void * list_pop_tail( struct list *list );
00152
00157 void * list_peek_tail( struct list *list );
00158
00167 void * list_find( struct list *list, list_op_t cmp, const void *arg );
00168
00176 void * list_remove( struct list *list, const void *value );
00177
00184 void list_first_item( struct list *list );
00185
00193 void * list_next_item( struct list *list );
00194
00202 int list_iterate( struct list *list, list_op_t op, const void *arg );
00203
00210 int list_iterate_reverse( struct list *list, list_op_t op, const void *arg );
00211
00217 struct list* list_sort( struct list *list, int (*comparator) (const void *, const void *));
00218
00219 #endif