#include <alloc.h> #include <list.h> void memset(void *buffer, uint8_t byte, uint32_t count) { uint8_t *byteBuffer = buffer; for (uint32_t i = 0; i < count; i++) { byteBuffer[i] = byte; } } void listAdd(ListElement **list, void *data) { ListElement *element = *list; if (element == NULL) { *list = malloc(sizeof(ListElement)); element = *list; } else { for (; element->next; element = element->next) { } element->next = malloc(sizeof(ListElement)); element = element->next; } element->next = NULL; element->data = data; } void listAddSet(ListElement **list, void *data) { ListElement *element = *list; if (element == NULL) { *list = malloc(sizeof(ListElement)); element = *list; } else { for (; element->next; element = element->next) { if (element->data == data) { return; } } element->next = malloc(sizeof(ListElement)); element = element->next; } element->next = NULL; element->data = data; } uint32_t listCount(ListElement *list) { int count = 0; for (ListElement *current = list; current; current = current->next) { count++; } return count; } void *popBeginning(ListElement **list) { if (*list == NULL) { return NULL; } ListElement *element = *list; void *result = (*list)->data; *list = (*list)->next; free(element); return result; } void *listPopEnd(ListElement **list) { if (list == NULL) { return NULL; } ListElement *before = NULL; ListElement *current = *list; for (; current->next; current = current->next) { before = current; } void *result = current->data; free(current); if (before != NULL) { before->next = NULL; } else { *list = NULL; } return result; } void *listGet(ListElement **list, uint32_t index) { ListElement *current = *list; if (!current) { return NULL; } for (uint32_t i = 0; i < index && current; i++) { current = current->next; } if (!current) { return NULL; } return current->data; } void listClear(ListElement **list, bool freeData) { ListElement *current = *list, *next; while (current) { next = current->next; if (freeData) { free(current->data); } free(current); current = next; } *list = NULL; }