/* * This file is part of libdom test suite. * Licensed under the MIT License, * http://www.opensource.org/licenses/mit-license.php * Copyright 2007 James Shaw */ #include #include #include #include "list.h" struct list* list_new(void) { struct list* list = malloc(sizeof(struct list)); list->size = 0; list->head = NULL; list->tail = NULL; return list; } void list_destroy(struct list* list) { struct list_elt* elt = list->head; while (elt != NULL) { struct list_elt* nextElt = elt->next; free(elt); elt = nextElt; } free(list); } void list_add(struct list* list, void* data) { struct list_elt* elt = malloc(sizeof(struct list_elt)); elt->data = data; elt->next = NULL; struct list_elt* tail = list->tail; // if tail was set, make its 'next' ptr point to elt if (tail != NULL) { tail->next = elt; } // make elt the new tail list->tail = elt; if (list->head == NULL) { list->head = elt; } // inc the size of the list list->size++; } bool list_contains(struct list* list, void* data, int (*comparator)(const void* a, const void* b)) { struct list_elt* elt = list->head; while (elt != NULL) { if (comparator(elt->data, data) == 0) { return true; } elt = elt->next; } return false; }