#include "generic_sllist.h"
void init_sllist(sllist * list, int type_size)
{
list->first = NULL;
list->last = NULL;
list->type_size = type_size;
}
void push_back(sllist * list, void * val)
{
if(list->first == NULL)
{
list->first = malloc(sizeof(struct sllist_node_t));
list->first->value = malloc(list->type_size);
memcpy(list->first->value, val, list->type_size);
list->first->next = NULL;
list->last = list->first;
}
else
{
list->last->next = malloc(sizeof(struct sllist_node_t));
list->last = list->last->next;
list->last->next = NULL;
list->last->value = malloc(list->type_size);
memcpy(list->last->value, val, list->type_size);
}
}
void free_list(sllist * list)
{
pnode iter = list->first;
pnode prev = iter;
while(iter->next != NULL)
{
iter = iter->next;
free(prev->value);
free(prev);
prev = iter;
}
free(iter->value);
free(iter);
}
int iterate(sllist * list, pnode * iter, void * value)
{
if((*iter) == NULL)
return false;
memcpy(value, (*iter)->value, list->type_size);
(*iter) = (*iter)->next;
return true;
}