source: trunk/module-datastruct-llist.h@ 4149

Last change on this file since 4149 was 4066, checked in by schlocke, 13 years ago

cccam: fixed dup cards check

File size: 1.8 KB
Line 
1
2/* singularly linked-list */
3
4#ifndef DATASTRUCT_LLIST_H_
5#define DATASTRUCT_LLIST_H_
6
7#include <pthread.h>
8
9typedef struct llnode LL_NODE;
10struct llnode {
11 void *obj;
12 LL_NODE *nxt, *prv;
13};
14
15typedef struct llist LLIST;
16struct llist {
17 void *obj;
18 LL_NODE *initial;
19 pthread_mutex_t lock;
20};
21
22typedef struct lliter LL_ITER;
23struct lliter {
24 LLIST *l;
25 LL_NODE *cur;
26};
27
28LLIST *ll_create(); // create llist, return ptr to llist
29void ll_destroy(LLIST *l); // same as ll_clear_abstract() but frees up LLIST mem as well
30void ll_destroy_data(LLIST *l); // same as ll_clear_data() but frees up obj allocations as well
31void ll_clear(LLIST *l); // frees up all llnodes nodes but not data held in obj ptrs
32void ll_clear_data(LLIST *l); // same as ll_clear_data() but frees up obj allocations as well
33
34void ll_append(LLIST *l, void *obj); // append obj to llist
35void ll_insert_at(LLIST *l, void *obj, int pos); // insert at pos
36
37LL_ITER *ll_iter_create(LLIST *l); // return ptr to iterator obj
38void ll_iter_release(LL_ITER *it); // free up the iterator obj
39void *ll_iter_next(LL_ITER *it); // iterate to and return next llnode obj, returns NULL at end
40void *ll_iter_peek(LL_ITER *it, int offset); // return obj at offset from iterator but do not iterate
41void ll_iter_reset(LL_ITER *it); // reset itrerator to first llnode
42void ll_iter_insert(LL_ITER *it, void *obj); // insert obj at iterator node
43void *ll_iter_remove(LL_ITER *it); // remove llnode at iterator, returns ptr to the llnode obj removed
44void ll_iter_remove_data(LL_ITER *it); // remove llnode and free llnode obj
45
46int ll_count(LLIST *l); // return number of items in list
47void *ll_has_elements(LLIST *l);
48
49#endif
Note: See TracBrowser for help on using the repository browser.