diff options
author | kx <kx@radix.pro> | 2023-03-24 03:51:10 +0300 |
---|---|---|
committer | kx <kx@radix.pro> | 2023-03-24 03:51:10 +0300 |
commit | 05d292b208dfe01324826b4c87bbc4da3389a0d5 (patch) | |
tree | b10a2269e9320785f3b61189e75f6778fa167986 /cgitcgi/dlist.h | |
parent | 40ab18a661ff6ada40e73969be293918d346a2f5 (diff) | |
download | cgit-ui-05d292b208dfe01324826b4c87bbc4da3389a0d5.tar.xz |
Version 0.1.7
Diffstat (limited to 'cgitcgi/dlist.h')
-rw-r--r-- | cgitcgi/dlist.h | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/cgitcgi/dlist.h b/cgitcgi/dlist.h new file mode 100644 index 0000000..37f9e3f --- /dev/null +++ b/cgitcgi/dlist.h @@ -0,0 +1,71 @@ + +#ifndef __DLIST_H_ +#define __DLIST_H_ + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef void (*dlist_errfunc)( const char *fmt, ... ); + +extern void dlist_error( const char *fmt, ... ) __attribute__((format (printf,1,2))); +extern dlist_errfunc dlist_fatal; /* Default Fatal Error Function == dlist_error() */ + +struct dlist { + struct dlist *prev; + struct dlist *next; + + void *data; +}; + +typedef void (*DLFUNC) ( void *data, void *user_data ); +typedef int (*DLCMPF) ( const void *a, const void *b ); +typedef int (*DLCMPDF) ( const void *a, const void *b, void *user_data ); + +#define dlist_prev( list ) ( (list)->prev ) +#define dlist_next( list ) ( (list)->next ) + +extern struct dlist *__dlist_alloc( void ); +extern struct dlist *dlist_first( struct dlist *list ); +extern struct dlist *dlist_last( struct dlist *list ); +extern int dlist_length( struct dlist *list ); +extern struct dlist *dlist_nth( struct dlist *list, int n ); +extern void *dlist_nth_data( struct dlist *list, int n ); +extern int dlist_position( struct dlist *list, struct dlist *link ); +extern int dlist_index( struct dlist *list, const void *data ); +extern struct dlist *dlist_find( struct dlist *list, const void *data ); +extern struct dlist *dlist_find_data( struct dlist *list, DLCMPF func, const void *data ); + +extern struct dlist *dlist_append( struct dlist *list, void *data ); +extern struct dlist *dlist_prepend( struct dlist *list, void *data ); +extern struct dlist *dlist_insert( struct dlist *list, void *data, int position ); +extern struct dlist *dlist_insert_sorted( struct dlist *list, DLCMPF cmp_func, void *data ); +extern struct dlist *dlist_insert_sorted_with_data( struct dlist *list, DLCMPDF cmp_func, void *data, void *user_data ); +extern struct dlist *dlist_concat( struct dlist *list1, struct dlist *list2 ); +extern struct dlist *dlist_insert_list( struct dlist *list1, struct dlist *list2, int position ); + +extern struct dlist *__dlist_remove_link( struct dlist *list, struct dlist *link ); +extern struct dlist *dlist_remove( struct dlist *list, const void *data ); +extern struct dlist *dlist_remove_all( struct dlist *list, const void *data ); +extern struct dlist *dlist_remove_data( struct dlist *list, DLCMPF cmp_func, DLFUNC free_func, const void *data ); +extern struct dlist *dlist_remove_data_all( struct dlist *list, DLCMPF cmp_func, DLFUNC free_func, const void *data ); + +extern struct dlist *dlist_copy( struct dlist *list ); +extern struct dlist *dlist_reverse( struct dlist *list ); + +extern struct dlist *dlist_sort( struct dlist *list, DLCMPF cmp_func ); +extern struct dlist *dlist_sort_with_data( struct dlist *list, DLCMPDF cmp_func, void *user_data ); + +extern void dlist_foreach( struct dlist *list, DLFUNC func, void *user_data ); + + +extern void __dlist_free( struct dlist *list ); +extern void dlist_free( struct dlist *list, DLFUNC free_func ); + + +#ifdef __cplusplus +} /* ... extern "C" */ +#endif + +#endif /* __DLIST_H_ */ |