diff --git a/include/element_list.h b/include/element_list.h new file mode 100644 index 0000000..51f9cd4 --- /dev/null +++ b/include/element_list.h @@ -0,0 +1,17 @@ +#ifndef __ELEMENT_LIST_H__ +#define __ELEMENT_LIST_H__ + + +typedef struct element_list_node element_list_node_t; + +struct element_list_node { + element_list_node_t *first; + element_list_node_t *last; + element_list_node_t *next; + element_list_node_t *prev; + cfglr_element_t *element; +}; + +element_list_node_t *element_list_add(element_list_node_t *list, element_list_node_t *node); + +#endif diff --git a/src/element_list.c b/src/element_list.c new file mode 100644 index 0000000..74b7620 --- /dev/null +++ b/src/element_list.c @@ -0,0 +1,21 @@ +#include "configulator.h" +#include "element_list.h" + + +element_list_node_t *element_list_add(element_list_node_t *list, element_list_node_t *node) { + element_list_node_t *last = list->last; + + node->first = list->first; + node->prev = last; + + last->next = node; + + element_list_node_t *next = node; + + while(next) { + next->last = node; + next = next->prev; + } + + return node; +}