From c7412d4813ccb994fdd219f421eaba8bb37831dd Mon Sep 17 00:00:00 2001 From: Nikias Bassen Date: Mon, 13 Jun 2011 18:30:37 +0200 Subject: Bundle libcnary for better packaging --- libcnary/node_iterator.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 libcnary/node_iterator.c (limited to 'libcnary/node_iterator.c') diff --git a/libcnary/node_iterator.c b/libcnary/node_iterator.c new file mode 100644 index 0000000..eef3a4f --- /dev/null +++ b/libcnary/node_iterator.c @@ -0,0 +1,64 @@ +/* + * node_iterator.c + * + * Created on: Mar 8, 2011 + * Author: posixninja + */ + +#include +#include +#include + +#include "node.h" +#include "node_list.h" +#include "node_iterator.h" + +void node_iterator_destroy(node_iterator_t* iterator) { + if(iterator) { + free(iterator); + } +} + +node_iterator_t* node_iterator_create(node_list_t* list) { + node_iterator_t* iterator = (node_iterator_t*) malloc(sizeof(node_iterator_t)); + if(iterator == NULL) { + return NULL; + } + memset(iterator, '\0', sizeof(node_iterator_t)); + + iterator->count = 0; + iterator->position = 0; + + iterator->end = NULL; + iterator->begin = NULL; + iterator->value = list->begin; + + iterator->list = NULL; + iterator->next = node_iterator_next; + iterator->bind = node_iterator_bind; + + + if(list != NULL) { + iterator->bind(iterator, list); + } + + return iterator; +} + +node_t* node_iterator_next(node_iterator_t* iterator) { + node_t* node = iterator->value; + if (node) { + iterator->value = node->next; + } + iterator->position++; + return node; +} + +int node_iterator_bind(node_iterator_t* iterator, node_list_t* list) { + iterator->position = 0; + iterator->end = list->end; + iterator->count = list->count; + iterator->begin = list->begin; + iterator->value = list->begin; + return 0; +} -- cgit v1.1-32-gdbae