#include "list.h"
#include <stdlib.h>
typedef struct s_element
{
void* data;
struct s_element* next;
} element;
struct s_list
{
element *top,
*curr;
};
list* listCreate()
{
list* res = (list*)malloc(sizeof(list));
res->curr = res->top = (element*)calloc(1, sizeof(element));
return res;
}
void listDelete(list* src)
{
while ((src->curr = src->top->next))
{
free(src->top);
src->top = src->curr;
}
free(src->top);
free(src);
}
void listAdd(list* src, const void* data)
{
element* nE = (element*)malloc(sizeof(element));
nE->data = (void*)data;
nE->next = src->curr->next;
src->curr = src->curr->next = nE;
}
void listRemove(list* src)
{
element* tmp = src->curr;
if (src->top == tmp)
tmp = tmp->next;
if (src->top->next == tmp)
src->top->next = tmp->next;
src->curr = tmp->next;
free(tmp);
}
void* listGet(list* src)
{
return src->curr->data;
}
int listNext(list* src)
{
if (src->curr->next)
{
src->curr = src->curr->next;
return 1;
}
return 0;
}
void listStart(list* src)
{
src->curr = src->top;
}
int listCount(list* src)
{
int res = 0;
element* tmp = src->top;
while ((tmp = tmp->next))
++res;
return res;
}
int listIsEmpty(list* src)
{
if (src->top->next)
return 0;
return 1;
}