#ifndef __VXGG_REWRITE___LL_H___305861098005___ #define __VXGG_REWRITE___LL_H___305861098005___ /*////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WA // // RNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING // // BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WA // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*//* // // // dlinkedlist functions should be considered X_ALLOC functions, as they call xcalloc to initialize new nodes. This is not // // reflected in their naming, which could change later, but as of now it is something to keep in mind. This means ABSOLUETLY NO // // USE OF DLINKEDLIST FUNCTIONS INSIDE ENCRYPTION FUNCTIONS, OR ANYTHING THAT SHOULD BE CONSIDERED ATOMIC OR SEMI-ATOMIC. IF // // XCALLOC ERRORS FOR ANY REASON, AND YOU'RE DOING SOMETHING WITH THESE IN AN (SEMI)ATOMIC FUNCTION, YOU WILL BREAK SHIT // // // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*//* // BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WA // // RNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING // // BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WARNING BIG WA // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/ /* TODO: Implement a way to register a set of alloc functions to a linked list so I can give it arenas for memory allocation // instead of just xcalloc */ typedef void (*dll_freecb)(void*); typedef struct dlinked dlinkedlist; dlinkedlist * dlinkedlist_init(void); void dlinkedlist_free(dlinkedlist *ll); int dlinkedlist_append(dlinkedlist * const ll, void *data, dll_freecb fcb); int dlinkedlist_prepend(dlinkedlist * const ll, void *data, dll_freecb fcb); int dlinkedlist_insert(dlinkedlist * const ll, void *data, dll_freecb fcb, int index); void* dlinkedlist_get(const dlinkedlist * const ll, int index); int dlinkedlist_remove(dlinkedlist * const ll, int index); int dlinkedlist_size(const dlinkedlist * const ll); #define dlinkedlist_isempty(ll) (dlinkedlist_size((ll)) == 0) int dlinkedlist_foreach(dlinkedlist *ll, int (*callback)(void*)); #endif