/**
* @file LinkedList.c
* @author Davidthefat
* @date 10/27/12
* @version 1.0
*/
#include "LinkedList.h"
void *get(int index)
{
if(index >= self->size)
return NULL;
int i = 0;
self->iterator = self->head;
while(i++<index)
self->iterator = self->iterator->next;
return self->iterator->data;
}
LList *construct()
{
self = (LList*)malloc(sizeof(LList));
self->size = 2;
self->head = (Node*)malloc(sizeof(Node));
self->tail = (Node*)malloc(sizeof(Node));
self->head->next = self->tail;
self->tail->next = NULL;
self->head->data = NULL;
self->tail->data = NULL;
self->get = &get;
self->add = &add;
self->addEnd = &addEnd;
self->addBeg = &addBeg;
self->del = &del;
self->set = &set;
self->destruct = &destruct;
return self;
}
void add(void *in, int index)
{
if(index >= self->size && self->size != 0)
return (void)printf("Index out of bounds\n");
if(index == 0 && self->size == 0) {
self->head->data = in;
return;
} else if(index == 0)
return addBeg(in);
int i = 0;
Node *temp = (Node*)malloc(sizeof(Node));
temp->data = in;
self->iterator = self->head;
while(i++<index-1)
self->iterator = self->iterator->next;
temp->next = self->iterator->next;
self->iterator->next = temp;
self->size++;
}
void addEnd(void *in)
{
Node *temp = (Node*)malloc(sizeof(Node));
temp->data = in;
temp->next = NULL;
self->tail->next = temp;
self->tail = temp;
self->size++;
}
void addBeg(void *in)
{
Node *temp = (Node*)malloc(sizeof(Node));
temp->data = in;
temp->next = self->head;
self->head = temp;
self->size++;
}
char del(int index)
{
Node *temp;
if(index >= self->size)
return 0*printf("Index out of bounds\n");
int i = 0;
self->iterator = self->head;
while(i++<index-1)
self->iterator = self->iterator->next;
temp = self->iterator;
self->iterator = self->iterator->next;
temp->next = self->iterator->next;
free(self->iterator->data);
free(self->iterator);
self->size--;
return 1;
}
void set(void *in, int index)
{
if(index >= self->size)
return (void)printf("Index out of bounds\n");
int i = 0;
self->iterator = self->head;
while(i++<index)
self->iterator = self->iterator->next;
self->iterator->data = in;
}
void destruct()
{
while(self->head->next && del(self->size-1))
;
}