summaryrefslogtreecommitdiff
path: root/src/ll.h
blob: 497d47b09b04edaf3279c016b4f333c399437df3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#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 int (*dll_freecb)(void*);
typedef struct dlinked dlinkedlist;

dlinkedlist * dlinkedlist_init(void);
int 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)

#endif