Commit 2b6e15cd authored by Ghislain MARY's avatar Ghislain MARY
Browse files

Improve list API.

parent 9daabd3d
...@@ -31,7 +31,11 @@ typedef struct _bctbx_list { ...@@ -31,7 +31,11 @@ typedef struct _bctbx_list {
void *data; void *data;
} bctbx_list_t; } bctbx_list_t;
typedef int (*bctbx_compare_func)(const void *, const void*); typedef int (*bctbx_compare_func)(const void *, const void*);
typedef void (*bctbx_list_iterate_func)(void *);
typedef void (*bctbx_list_iterate2_func)(void *, void *);
typedef void (*bctbx_list_free_func)(void *);
typedef void* (*bctbx_list_copy_func)(void *);
BCTBX_PUBLIC bctbx_list_t * bctbx_list_new(void *data); BCTBX_PUBLIC bctbx_list_t * bctbx_list_new(void *data);
BCTBX_PUBLIC bctbx_list_t * bctbx_list_append(bctbx_list_t * elem, void * data); BCTBX_PUBLIC bctbx_list_t * bctbx_list_append(bctbx_list_t * elem, void * data);
...@@ -46,14 +50,14 @@ BCTBX_PUBLIC bctbx_list_t * bctbx_list_remove(bctbx_list_t * first, void *data); ...@@ -46,14 +50,14 @@ BCTBX_PUBLIC bctbx_list_t * bctbx_list_remove(bctbx_list_t * first, void *data);
BCTBX_PUBLIC bctbx_list_t * bctbx_list_remove_custom(bctbx_list_t *first, bctbx_compare_func compare_func, const void *user_data); BCTBX_PUBLIC bctbx_list_t * bctbx_list_remove_custom(bctbx_list_t *first, bctbx_compare_func compare_func, const void *user_data);
BCTBX_PUBLIC bctbx_list_t * bctbx_list_pop_front(bctbx_list_t *list, void **front_data); BCTBX_PUBLIC bctbx_list_t * bctbx_list_pop_front(bctbx_list_t *list, void **front_data);
BCTBX_PUBLIC size_t bctbx_list_size(const bctbx_list_t * first); BCTBX_PUBLIC size_t bctbx_list_size(const bctbx_list_t * first);
BCTBX_PUBLIC void bctbx_list_for_each(const bctbx_list_t * list, void (*func)(void *)); BCTBX_PUBLIC void bctbx_list_for_each(const bctbx_list_t * list, bctbx_list_iterate_func func);
BCTBX_PUBLIC void bctbx_list_for_each2(const bctbx_list_t * list, void (*func)(void *, void *), void *user_data); BCTBX_PUBLIC void bctbx_list_for_each2(const bctbx_list_t * list, bctbx_list_iterate2_func func, void *user_data);
BCTBX_PUBLIC bctbx_list_t * bctbx_list_remove_link(bctbx_list_t * list, bctbx_list_t * elem); BCTBX_PUBLIC bctbx_list_t * bctbx_list_remove_link(bctbx_list_t * list, bctbx_list_t * elem);
BCTBX_PUBLIC bctbx_list_t * bctbx_list_delete_link(bctbx_list_t * list, bctbx_list_t * elem); BCTBX_PUBLIC bctbx_list_t * bctbx_list_delete_link(bctbx_list_t * list, bctbx_list_t * elem);
BCTBX_PUBLIC bctbx_list_t * bctbx_list_find(bctbx_list_t * list, void *data); BCTBX_PUBLIC bctbx_list_t * bctbx_list_find(bctbx_list_t * list, void *data);
BCTBX_PUBLIC bctbx_list_t * bctbx_list_free(bctbx_list_t *list); BCTBX_PUBLIC bctbx_list_t * bctbx_list_free(bctbx_list_t *list);
/*frees list elements and associated data, using the supplied function pointer*/ /*frees list elements and associated data, using the supplied function pointer*/
BCTBX_PUBLIC bctbx_list_t * bctbx_list_free_with_data(bctbx_list_t *list, void (*freefunc)(void*)); BCTBX_PUBLIC bctbx_list_t * bctbx_list_free_with_data(bctbx_list_t *list, bctbx_list_free_func freefunc);
BCTBX_PUBLIC bctbx_list_t * bctbx_list_find_custom(const bctbx_list_t * list, bctbx_compare_func cmp, const void *user_data); BCTBX_PUBLIC bctbx_list_t * bctbx_list_find_custom(const bctbx_list_t * list, bctbx_compare_func cmp, const void *user_data);
BCTBX_PUBLIC void * bctbx_list_nth_data(const bctbx_list_t * list, int index); BCTBX_PUBLIC void * bctbx_list_nth_data(const bctbx_list_t * list, int index);
...@@ -63,7 +67,7 @@ BCTBX_PUBLIC bctbx_list_t * bctbx_list_insert_sorted(bctbx_list_t * list, void * ...@@ -63,7 +67,7 @@ BCTBX_PUBLIC bctbx_list_t * bctbx_list_insert_sorted(bctbx_list_t * list, void *
BCTBX_PUBLIC bctbx_list_t * bctbx_list_insert(bctbx_list_t * list, bctbx_list_t * before, void *data); BCTBX_PUBLIC bctbx_list_t * bctbx_list_insert(bctbx_list_t * list, bctbx_list_t * before, void *data);
BCTBX_PUBLIC bctbx_list_t * bctbx_list_copy(const bctbx_list_t * list); BCTBX_PUBLIC bctbx_list_t * bctbx_list_copy(const bctbx_list_t * list);
/*copy list elements and associated data, using the supplied function pointer*/ /*copy list elements and associated data, using the supplied function pointer*/
BCTBX_PUBLIC bctbx_list_t* bctbx_list_copy_with_data(const bctbx_list_t* list, void* (*copyfunc)(void*)); BCTBX_PUBLIC bctbx_list_t* bctbx_list_copy_with_data(const bctbx_list_t* list, bctbx_list_copy_func copyfunc);
BCTBX_PUBLIC bctbx_list_t* bctbx_list_next(const bctbx_list_t *elem); BCTBX_PUBLIC bctbx_list_t* bctbx_list_next(const bctbx_list_t *elem);
BCTBX_PUBLIC void* bctbx_list_get_data(const bctbx_list_t *elem); BCTBX_PUBLIC void* bctbx_list_get_data(const bctbx_list_t *elem);
......
...@@ -111,7 +111,7 @@ bctbx_list_t* bctbx_list_free(bctbx_list_t* list){ ...@@ -111,7 +111,7 @@ bctbx_list_t* bctbx_list_free(bctbx_list_t* list){
return NULL; return NULL;
} }
bctbx_list_t * bctbx_list_free_with_data(bctbx_list_t *list, void (*freefunc)(void*)){ bctbx_list_t * bctbx_list_free_with_data(bctbx_list_t *list, bctbx_list_free_func freefunc){
bctbx_list_t* elem = list; bctbx_list_t* elem = list;
bctbx_list_t* tmp; bctbx_list_t* tmp;
if (list==NULL) return NULL; if (list==NULL) return NULL;
...@@ -163,13 +163,13 @@ size_t bctbx_list_size(const bctbx_list_t* first){ ...@@ -163,13 +163,13 @@ size_t bctbx_list_size(const bctbx_list_t* first){
return n; return n;
} }
void bctbx_list_for_each(const bctbx_list_t* list, void (*func)(void *)){ void bctbx_list_for_each(const bctbx_list_t* list, bctbx_list_iterate_func func){
for(;list!=NULL;list=list->next){ for(;list!=NULL;list=list->next){
func(list->data); func(list->data);
} }
} }
void bctbx_list_for_each2(const bctbx_list_t* list, void (*func)(void *, void *), void *user_data){ void bctbx_list_for_each2(const bctbx_list_t* list, bctbx_list_iterate2_func func, void *user_data){
for(;list!=NULL;list=list->next){ for(;list!=NULL;list=list->next){
func(list->data,user_data); func(list->data,user_data);
} }
...@@ -258,7 +258,7 @@ int bctbx_list_index(const bctbx_list_t* list, void *data){ ...@@ -258,7 +258,7 @@ int bctbx_list_index(const bctbx_list_t* list, void *data){
return -1; return -1;
} }
bctbx_list_t* bctbx_list_insert_sorted(bctbx_list_t* list, void *data, int (*compare_func)(const void *, const void*)){ bctbx_list_t* bctbx_list_insert_sorted(bctbx_list_t* list, void *data, bctbx_compare_func compare_func){
bctbx_list_t* it,*previt=NULL; bctbx_list_t* it,*previt=NULL;
bctbx_list_t* nelem; bctbx_list_t* nelem;
bctbx_list_t* ret=list; bctbx_list_t* ret=list;
...@@ -313,7 +313,7 @@ bctbx_list_t* bctbx_list_copy(const bctbx_list_t* list){ ...@@ -313,7 +313,7 @@ bctbx_list_t* bctbx_list_copy(const bctbx_list_t* list){
return copy; return copy;
} }
bctbx_list_t* bctbx_list_copy_with_data(const bctbx_list_t* list, void* (*copyfunc)(void*)){ bctbx_list_t* bctbx_list_copy_with_data(const bctbx_list_t* list, bctbx_list_copy_func copyfunc){
bctbx_list_t* copy=NULL; bctbx_list_t* copy=NULL;
const bctbx_list_t* iter; const bctbx_list_t* iter;
for(iter=list;iter!=NULL;iter=bctbx_list_next(iter)){ for(iter=list;iter!=NULL;iter=bctbx_list_next(iter)){
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment