diff options
author | Nikias Bassen | 2011-06-13 18:30:37 +0200 |
---|---|---|
committer | Nikias Bassen | 2011-06-13 18:30:37 +0200 |
commit | c7412d4813ccb994fdd219f421eaba8bb37831dd (patch) | |
tree | 5b7f3016ceb337b31afdd62c9fee646f33e8b271 /libcnary/node_iterator.c | |
parent | 3277a11f0beedda8b5d65ffccb05fabd4e8ded28 (diff) | |
download | libplist-c7412d4813ccb994fdd219f421eaba8bb37831dd.tar.gz libplist-c7412d4813ccb994fdd219f421eaba8bb37831dd.tar.bz2 |
Bundle libcnary for better packaging1.5
Diffstat (limited to 'libcnary/node_iterator.c')
-rw-r--r-- | libcnary/node_iterator.c | 64 |
1 files changed, 64 insertions, 0 deletions
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 <stdio.h> +#include <stdlib.h> +#include <string.h> + +#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; +} |