/* * This file Copyright (C) 2007-2008 Charles Kerr * * This file is licensed by the GPL version 2. Works owned by the * Transmission project are granted a special exemption to clause 2(b) * so that the bulk of its code can remain under the MIT license. * This exemption does not extend to derived works not owned by * the Transmission project. * * $Id$ */ #ifndef TR_LIST_H #define TR_LIST_H typedef struct tr_list { void * data; struct tr_list * next; struct tr_list * prev; } tr_list; typedef int ( *TrListCompareFunc )( const void * a, const void * b ); typedef void ( *TrListForeachFunc )( void * ); int tr_list_size( const tr_list * list ); void tr_list_free( tr_list ** list, TrListForeachFunc data_free_func ); void tr_list_append( tr_list ** list, void * data ); void tr_list_prepend( tr_list ** list, void * data ); void* tr_list_pop_front( tr_list ** list ); void* tr_list_remove_data( tr_list ** list, const void * data ); void* tr_list_remove( tr_list ** list, const void * b, TrListCompareFunc compare_func ); void tr_list_insert_sorted( tr_list ** list, void * data, TrListCompareFunc compare_func ); tr_list* tr_list_find( tr_list * list, const void * b, TrListCompareFunc compare_func ); tr_list* tr_list_find_data( tr_list * list, const void * data ); void tr_list_foreach( tr_list * list, TrListForeachFunc foreach_func ); #endif /* TR_LIST_H */