Changeset 3584
- Timestamp:
- 10/17/10 12:48:02 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/datastruct-llist.h
r3577 r3584 2 2 /* singularly linked-list */ 3 3 4 typedef struct llnode LLNODE; 4 #ifndef DATASTRUCT_LLIST_H_ 5 #define DATASTRUCT_LLIST_H_ 6 7 #include <pthread.h> 8 9 typedef struct llnode LL_NODE; 5 10 struct llnode { 6 11 void *obj; 7 LL NODE *nxt;12 LL_NODE *nxt, *prv; 8 13 }; 9 14 … … 11 16 struct llist { 12 17 void *obj; 13 LL NODE *initial;18 LL_NODE *initial; 14 19 pthread_mutex_t lock; 15 20 }; 16 21 17 typedef struct lliter LL ITER;22 typedef struct lliter LL_ITER; 18 23 struct lliter { 19 24 LLIST *l; 20 LL NODE *current;25 LL_NODE *cur; 21 26 }; 22 27 23 LLIST *ll_create(); 24 void ll_destroy _abstract(LLIST *l);// same as ll_clear_abstract() but frees up LLIST mem as well25 void ll_destroy_data(LLIST *l); 26 void ll_clear _abstract(LLIST *l);// frees up all llnodes nodes but not data held in obj ptrs27 void ll_clear_data(LLIST *l); 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 28 33 29 34 void ll_append(LLIST *l, void *obj); // append obj to llist 30 35 31 LL ITER *ll_iter_create(LLIST *l);// return ptr to iterator obj32 void ll_iter_release(LL ITER *it);// free up the iterator obj33 void *ll_iter_next(LL ITER *it);// iterate to and return next llnode obj, returns NULL at end34 void ll_iter_reset(LL ITER *it);// reset itrerator to first llnode35 void ll_iter_insert(LL ITER *it, void *obj); // insert obj at iterator node36 void *ll_iter_remove(LL ITER *it); // remove llnode at iterator, returns ptr toobj removed37 void ll_iter_remove_data(LL ITER *it);// remove llnode and free llnode obj36 LL_ITER *ll_iter_create(LLIST *l); // return ptr to iterator obj 37 void ll_iter_release(LL_ITER *it); // free up the iterator obj 38 void *ll_iter_next(LL_ITER *it); // iterate to and return next llnode obj, returns NULL at end 39 void ll_iter_reset(LL_ITER *it); // reset itrerator to first llnode 40 void ll_iter_insert(LL_ITER *it, void *obj); // insert obj at iterator node 41 void *ll_iter_remove(LL_ITER *it); // remove llnode at iterator, returns ptr to the llnode obj removed 42 void ll_iter_remove_data(LL_ITER *it); // remove llnode and free llnode obj 38 43 39 44 int ll_count(LLIST *l); // return number of items in list 45 46 #endif
Note:
See TracChangeset
for help on using the changeset viewer.