From 4ed1d04aff349c0749a6dcf50809483b2eaf978c Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Tue, 11 Mar 2025 09:46:28 +0100 Subject: [PATCH] libnm-glib-aux: add nm_puint64_hash()/nm_puint64_equal() The two new functions can be used as GHashFunc and GEqualFunc when creating hash tables whose keys are pointers to a guint64. --- src/libnm-glib-aux/nm-hash-utils.c | 21 +++++++++++++++++++++ src/libnm-glib-aux/nm-hash-utils.h | 3 +++ 2 files changed, 24 insertions(+) diff --git a/src/libnm-glib-aux/nm-hash-utils.c b/src/libnm-glib-aux/nm-hash-utils.c index 973422a198..7f25e9ac3e 100644 --- a/src/libnm-glib-aux/nm-hash-utils.c +++ b/src/libnm-glib-aux/nm-hash-utils.c @@ -190,6 +190,27 @@ nm_pint_equal(gconstpointer a, gconstpointer b) return s1 == s2 || (s1 && s2 && *s1 == *s2); } +/* GHashFunc for GHashTable keys that are a pointer to a guint64 */ +guint +nm_puint64_hash(gconstpointer p) +{ + const guint64 *s = p; + + if (!s) + return nm_hash_static(298377461u); + return nm_hash_val(1208815757u, *s); +} + +/* GEqualFunc for GHashTable keys that are a pointer to a guint64 */ +gboolean +nm_puint64_equal(gconstpointer a, gconstpointer b) +{ + const guint64 *s1 = a; + const guint64 *s2 = a; + + return s1 == s2 || (s1 && s2 && *s1 == *s2); +} + guint nm_pdirect_hash(gconstpointer p) { diff --git a/src/libnm-glib-aux/nm-hash-utils.h b/src/libnm-glib-aux/nm-hash-utils.h index 6d7cc271bc..34690eabc5 100644 --- a/src/libnm-glib-aux/nm-hash-utils.h +++ b/src/libnm-glib-aux/nm-hash-utils.h @@ -266,6 +266,9 @@ gboolean nm_pstr_equal(gconstpointer a, gconstpointer b); guint nm_pint_hash(gconstpointer p); gboolean nm_pint_equal(gconstpointer a, gconstpointer b); +guint nm_puint64_hash(gconstpointer p); +gboolean nm_puint64_equal(gconstpointer a, gconstpointer b); + G_STATIC_ASSERT(sizeof(int) == sizeof(guint32)); #define nm_puint32_hash nm_pint_hash #define nm_puint32_equal nm_pint_equal