X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fadt%2Fiterator.h;h=bf74c1106d8a09d014169681002ed1025c9e1c14;hb=0f08af6110e629451b65376c720731385ea4b8f1;hp=1e984462da62240e6a261f215aec4fc8812e2305;hpb=a59dd7aa7ca55ee52f0c0e775d937f1cc9d3a79b;p=libfirm diff --git a/ir/adt/iterator.h b/ir/adt/iterator.h index 1e984462d..bf74c1106 100644 --- a/ir/adt/iterator.h +++ b/ir/adt/iterator.h @@ -4,27 +4,38 @@ * @author Sebastian Hack * @date 29.11.2004 */ +#ifndef _ITERATOR_H +#define _ITERATOR_H + +#include "fourcc.h" + +/** + * The iterator magic word. + */ +#define ITERATOR_MAGIC FOURCC('I', 'T', 'E', 'R') /** * Check, if some memory object appears to be an iterator. - * @param ptr SOme memory. + * @param ptr Some memory. * @return 1, if that memory area appears to be an iterator, 0 if not. */ -int is_iterator(const void *ptr); +#define is_iterator(ptr) (((const iterator_t *) (ptr))->magic == ITERATOR_MAGIC) typedef struct _iterator_t { - char magic[4]; + unsigned magic; void *(*start)(void *collection); void *(*next)(void *collection, void *curr); void (*finish)(void *collection, void *curr); } iterator_t; /** - * An iterator implementation for psets. + * An iterator implementation for linked lists. */ -extern const iterator_t *it_pset; +extern const iterator_t *list_iterator; /** - * An iterator implementation for linked lists. + * An iterator implementation for psets. */ -extern const iterator_t *it_list; +extern const iterator_t *pset_iterator; + +#endif