LO41/List/Element.c

58 lines
1.2 KiB
C

//
// Created by Antoine Bartuccio on 22/05/2018.
//
#include <string.h>
#include "List.h"
GETTER(Element, Element*, next)
GETTER(Element, Element*, previous)
GETTER(Element, void*, data)
SETTER(Element, Element*, previous)
SETTER(Element, Element*, next)
void $_free__Element(THIS(Element)){
List * list = this->list;
if (list != NULL) {
if (list->head == this && list->tail == this) {
list->head = NULL;
list->tail = NULL;
} else if (list->head == this) {
list->head = this->next;
this->previous = NULL;
} else if (list->tail == this) {
list->tail = this->previous;
this->previous->next = NULL;
} else {
this->next->previous = this->previous;
this->previous->next = this->next;
}
list->size --;
}
if (this->data != NULL)
free(this->data);
free(this);
}
Element *_init_element(void *data, size_t size, List *list){
Element *el = (Element*) malloc_or_die(sizeof(Element));
void *newData = malloc_or_die(sizeof(size));
memcpy(newData, data, size);
el->list = list;
el->data = newData;
el->previous = NULL;
el->next = NULL;
LINK_ALL(Element, el,
get_next,
get_previous,
get_data,
set_next,
set_previous
)
return el;
}