diff options
Diffstat (limited to 'test/testutils/foreach.c')
-rw-r--r-- | test/testutils/foreach.c | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/test/testutils/foreach.c b/test/testutils/foreach.c new file mode 100644 index 0000000..c3868df --- /dev/null +++ b/test/testutils/foreach.c @@ -0,0 +1,96 @@ +/* + * This file is part of libdom test suite. + * Licensed under the MIT License, + * http://www.opensource.org/licenses/mit-license.php + * Copyright 2009 Bo Yang <struggleyb.nku@gmail.com> + */ + +#include <stdbool.h> + +#include "foreach.h" +#include "list.h" + +#include <dom/dom.h> + +/** + * Please see foreach.h for the usage of the following functions + */ + +void foreach_initialise_domnodelist(dom_nodelist *list, unsigned int *iterator) +{ + *iterator = 0; +} + +void foreach_initialise_list(list *list, unsigned int *iterator) +{ + *iterator = 0; +} + +void foreach_initialise_domnamednodemap(dom_namednodemap *map, unsigned int *iterator) +{ + *iterator = 0; +} + + +bool _get_next_domnodelist(dom_nodelist *list, unsigned int *iterator, dom_node **ret) +{ + dom_exception err; + unsigned long len; + + err = dom_nodelist_get_length(list, &len); + if (err != DOM_NO_ERR) + return false; + + if (*iterator >= len) + return false; + + err = dom_nodelist_item(list, (*iterator), ret); + if (err != DOM_NO_ERR) + return false; + + (*iterator)++; + return true; +} + +bool get_next_list(list *list, unsigned int *iterator, void **ret) +{ + unsigned int len = *iterator; + unsigned int i = 0; + struct list_elt *elt = list->head; + + for (; i < len; i++) { + if (elt == NULL) + return false; + elt = elt->next; + } + + if (elt == NULL) + return false; + + *ret = elt->data; + + (*iterator)++; + + return true; +} + +bool _get_next_domnamednodemap(dom_namednodemap *map, unsigned int *iterator, dom_node **ret) +{ + dom_exception err; + unsigned long len; + + err = dom_namednodemap_get_length(map, &len); + if (err != DOM_NO_ERR) + return false; + + if (*iterator >= len) + return false; + + err = dom_namednodemap_item(map, (*iterator), ret); + if (err != DOM_NO_ERR) + return false; + + (*iterator)++; + + return true; +} |