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