X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;ds=sidebyside;f=libsysfs%2Fdlist.h;h=62eaa9fec4f304ea38066d690388c873afaa5fb1;hb=733677e2c21b1ea3789c5296c84c1730d9ce498d;hp=83f67e8d4458c9203cb54cf393ab7de9916ea6a3;hpb=bf0314e326319354c857a7e9150460ec239fb07d;p=elogind.git diff --git a/libsysfs/dlist.h b/libsysfs/dlist.h index 83f67e8d4..62eaa9fec 100644 --- a/libsysfs/dlist.h +++ b/libsysfs/dlist.h @@ -50,8 +50,10 @@ * Just use the dlist_(insert|delete)_(before|after) macros if you do not want * to think about it. - */ + +#include + typedef struct dl_node { struct dl_node *prev; struct dl_node *next; @@ -73,16 +75,17 @@ void *_dlist_mark_move(Dlist *list,int direction); void *dlist_mark(Dlist *); void dlist_start(Dlist *); void dlist_end(Dlist *); - +void dlist_move(struct dlist *source, struct dlist *dest, struct dl_node *target,int direction); void *dlist_insert(Dlist *,void *,int) ; -void *dlist_insert_sorted(struct dlist *list, void *new, int (*sorter)(void *, void *)); +void *dlist_insert_sorted(struct dlist *list, void *new_elem, int (*sorter)(void *, void *)); void dlist_delete(Dlist *,int); void dlist_push(Dlist *,void *); void dlist_unshift(Dlist *,void *); +void dlist_unshift_sorted(Dlist *,void *,int (*sorter)(void *, void *)); void *dlist_pop(Dlist *); @@ -90,7 +93,15 @@ void *dlist_shift(Dlist *); void dlist_destroy(Dlist *); +int _dlist_merge(struct dlist *listsource, struct dlist *listdest, unsigned int passcount, int (*compare)(void *, void *)); + void *dlist_find_custom(struct dlist *list, void *target, int (*comp)(void *, void *)); + +void dlist_sort_custom(struct dlist *list, int (*compare)(void *, void *)); + + +void _dlist_swap(struct dlist *list, struct dl_node *a, struct dl_node *b); + void dlist_transform(struct dlist *list, void (*node_operation)(void *)); @@ -99,6 +110,7 @@ void dlist_transform(struct dlist *list, void (*node_operation)(void *)); * _dlist_mark_move is for internal use only */ void *_dlist_remove(struct dlist *,struct dl_node *,int ); +void *_dlist_insert_dlnode(struct dlist *list,struct dl_node *new_node,int direction); #define dlist_prev(A) _dlist_mark_move((A),0) #define dlist_next(A) _dlist_mark_move((A),1)