From: Daan De Meyer Date: Wed, 14 May 2025 20:59:06 +0000 (+0200) Subject: hashmap: Split out iterator.h X-Git-Tag: v258-rc1~605 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3b21af5234b91588f77ee86ff5564ffaa3e550d7;p=thirdparty%2Fsystemd.git hashmap: Split out iterator.h As preparation for #37344, let's split out iterator.h so we can avoid including the entirety of hashmap.h where it's not needed. --- diff --git a/src/basic/hashmap.h b/src/basic/hashmap.h index 4aa8fbb0038..52d3f45f0a9 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 00000000000..87cdd3c6559 --- /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)