diff --git a/src/basic/hashmap.h b/src/basic/hashmap.h index 4aa8fbb003..52d3f45f0a 100644 --- a/src/basic/hashmap.h +++ b/src/basic/hashmap.h @@ -6,6 +6,7 @@ #include #include "hash-funcs.h" +#include "iterator.h" #include "macro.h" /* @@ -35,23 +36,6 @@ typedef struct Set Set; /* Stores just keys */ typedef struct IteratedCache IteratedCache; /* Caches the iterated order of one of the above */ -/* Ideally the Iterator would be an opaque struct, but it is instantiated - * by hashmap users, so the definition has to be here. Do not use its fields - * directly. */ -typedef struct Iterator { - const void *next_key; /* expected value of that entry's key pointer */ - unsigned idx; /* index of an entry to be iterated next */ -#if ENABLE_DEBUG_HASHMAP - unsigned put_count; /* hashmap's put_count recorded at start of iteration */ - unsigned rem_count; /* hashmap's rem_count in previous iteration */ - unsigned prev_idx; /* idx in previous iteration */ -#endif -} Iterator; - -#define _IDX_ITERATOR_FIRST (UINT_MAX - 1) -#define ITERATOR_FIRST ((Iterator) { .idx = _IDX_ITERATOR_FIRST, .next_key = NULL }) -#define ITERATOR_IS_FIRST(i) ((i).idx == _IDX_ITERATOR_FIRST) - /* Macros for type checking */ #define PTR_COMPATIBLE_WITH_HASHMAP_BASE(h) \ (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \ diff --git a/src/basic/iterator.h b/src/basic/iterator.h new file mode 100644 index 0000000000..87cdd3c655 --- /dev/null +++ b/src/basic/iterator.h @@ -0,0 +1,19 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +#pragma once + +/* Ideally the Iterator would be an opaque struct, but it is instantiated + * by hashmap users, so the definition has to be here. Do not use its fields + * directly. */ +typedef struct Iterator { + const void *next_key; /* expected value of that entry's key pointer */ + unsigned idx; /* index of an entry to be iterated next */ +#if ENABLE_DEBUG_HASHMAP + unsigned put_count; /* hashmap's put_count recorded at start of iteration */ + unsigned rem_count; /* hashmap's rem_count in previous iteration */ + unsigned prev_idx; /* idx in previous iteration */ +#endif +} Iterator; + +#define _IDX_ITERATOR_FIRST (UINT_MAX - 1) +#define ITERATOR_FIRST ((Iterator) { .idx = _IDX_ITERATOR_FIRST, .next_key = NULL }) +#define ITERATOR_IS_FIRST(i) ((i).idx == _IDX_ITERATOR_FIRST)