8 #define ITERATOR_MAGIC "ITR"
10 int is_iterator(const void *ptr)
12 const iterator_t *it = ptr;
13 return strncmp(it->magic, ITERATOR_MAGIC, sizeof(ITERATOR_MAGIC)) == 0;
16 static void *it_pset_start(void *collection)
18 return pset_first(collection);
21 static void *it_pset_next(void *collection, void *curr)
23 return pset_next(collection);
26 static void it_pset_finish(void *collection, void *curr)
30 static const iterator_t iterator_pset = {
37 const iterator_t *it_pset = &iterator_pset;
40 static void *it_list_next(void *coll, void *it)
42 struct list_head *head = coll;
43 struct list_head *curr = it;
44 return curr->next != head ? curr->next : NULL;
47 static void *it_list_start(void *coll)
49 return it_list_next(coll, coll);
52 static void it_list_finish(void *coll, void *curr)
56 static const iterator_t iterator_list = {
63 const iterator_t *it_list = &iterator_list;