35 static int ListUnlink(
List* aList,
void* content,
int(*callback)(
void*,
void*),
int freeContent);
44 memset(newl,
'\0',
sizeof(
List));
74 if (aList->
first == NULL)
122 if ( newel->
prev != NULL )
125 aList->
first = newel;
159 (callback != NULL && callback(aList->
current->
content, content))))
168 if (callback == NULL)
170 if (current->
content == content)
178 if (callback(current->
content, content))
201 static int ListUnlink(
List* aList,
void* content,
int(*callback)(
void*,
void*),
int freeContent)
205 int saveddeleted = 0;
270 void *content = NULL;
271 if (aList->
count > 0)
276 if (aList->
last == first)
308 void* content = NULL;
309 if (aList->
count > 0)
314 if (aList->
first == last)
337 return ListUnlink(aList, content, callback, 0);
351 return ListUnlink(aList, content, callback, 1);
361 while (aList->
first != NULL)
394 while (aList->
first != NULL)
413 return *pos = (*pos == NULL) ? aList->
first : (*pos)->
next;
426 return *pos = (*pos == NULL) ? aList->
last : (*pos)->
prev;
438 return *((
int*)a) == *((
int*)b);
450 return strcmp((
char*)a, (
char*)b) == 0;
454 #if defined(UNIT_TESTS) 457 int main(
int argc,
char *argv[])
459 int i, *ip, *todelete;
462 printf(
"List initialized\n");
464 for (i = 0; i < 10; i++)
471 printf(
"List element appended %d\n", *((
int*)(l->
last->
content)));
474 printf(
"List contents:\n");
477 printf(
"List element: %d\n", *((
int*)(current->
content)));
479 printf(
"List contents in reverse order:\n");
482 printf(
"List element: %d\n", *((
int*)(current->
content)));
486 printf(
"List contents having deleted element %d:\n", *todelete);
490 printf(
"List element: %d\n", *((
int*)(current->
content)));
494 printf(
"List contents having deleted another element, %d, size now %d:\n", i, l->
size);
497 printf(
"List element: %d\n", *((
int*)(current->
content)));
500 printf(
"List freed\n");
void ListZero(List *newl)
int ListRemove(List *aList, void *content)
struct ListElementStruct * next
int ListDetach(List *aList, void *content)
int stringcompare(void *a, void *b)
ListElement * ListInsert(List *aList, void *content, size_t size, ListElement *index)
void ListEmpty(List *aList)
void * ListDetachHead(List *aList)
void ListAppendNoMalloc(List *aList, void *content, ListElement *newel, size_t size)
ListElement * ListNextElement(List *aList, ListElement **pos)
void * ListPopTail(List *aList)
int ListRemoveItem(List *aList, void *content, int(*callback)(void *, void *))
static int ListUnlink(List *aList, void *content, int(*callback)(void *, void *), int freeContent)
struct ListElementStruct * prev
ListElement * ListAppend(List *aList, void *content, size_t size)
ListElement * ListPrevElement(List *aList, ListElement **pos)
int ListRemoveHead(List *aList)
List * ListInitialize(void)
int ListDetachItem(List *aList, void *content, int(*callback)(void *, void *))
void ListFreeNoContent(List *aList)
ListElement * ListFindItem(List *aList, void *content, int(*callback)(void *, void *))
ListElement * ListFind(List *aList, void *content)
int intcompare(void *a, void *b)
void ListFree(List *aList)
int main(int argc, char **argv)