7136c6187208c050a7e460c716feb62819a458fa
[libfirm] / ir / adt / iterator.c
1
2 #include <string.h>
3
4 #include "pset.h"
5 #include "list.h"
6 #include "iterator.h"
7
8 #define ITERATOR_MAGIC "ITR"
9
10 int is_iterator(const void *ptr)
11 {
12         const iterator_t *it = ptr;
13         return strncmp(it->magic, ITERATOR_MAGIC, sizeof(ITERATOR_MAGIC)) == 0;
14 }
15
16 static void *it_pset_start(void *collection)
17 {
18         return pset_first(collection);
19 }
20
21 static void *it_pset_next(void *collection, void *curr)
22 {
23         return pset_next(collection);
24 }
25
26 static void it_pset_finish(void *collection, void *curr)
27 {
28 }
29
30 static const iterator_t iterator_pset = {
31         ITERATOR_MAGIC,
32         it_pset_start,
33         it_pset_next,
34         it_pset_finish
35 };
36
37 const iterator_t *it_pset = &iterator_pset;
38
39
40 static void *it_list_next(void *coll, void *it)
41 {
42         struct list_head *head = coll;
43         struct list_head *curr = it;
44         return curr->next != head ? curr->next : NULL;
45 }
46
47 static void *it_list_start(void *coll)
48 {
49         return it_list_next(coll, coll);
50 }
51
52 static void it_list_finish(void *coll, void *curr)
53 {
54 }
55
56 static const iterator_t iterator_list = {
57         ITERATOR_MAGIC,
58         it_list_start,
59         it_list_next,
60         it_list_finish
61 };
62
63 const iterator_t *it_list = &iterator_list;