pidref: add pidref_hash_ops

This adds a "hash_ops" structure, which allows using PidRef structures
as keys in Hashmap and Set objects.
This commit is contained in:
Lennart Poettering
2023-09-28 23:22:58 +02:00
parent 837659825f
commit 9cb7e49f11
2 changed files with 17 additions and 0 deletions
+15
View File
@@ -239,3 +239,18 @@ int pidref_sigqueue(PidRef *pidref, int sig, int value) {
return -ESRCH;
}
static void pidref_hash_func(const PidRef *pidref, struct siphash *state) {
siphash24_compress(&pidref->pid, sizeof(pidref->pid), state);
}
static int pidref_compare_func(const PidRef *a, const PidRef *b) {
return CMP(a->pid, b->pid);
}
DEFINE_HASH_OPS_WITH_KEY_DESTRUCTOR(
pidref_hash_ops,
PidRef,
pidref_hash_func,
pidref_compare_func,
pidref_free);
+2
View File
@@ -52,3 +52,5 @@ int pidref_kill_and_sigcont(PidRef *pidref, int sig);
int pidref_sigqueue(PidRef *pidfref, int sig, int value);
#define TAKE_PIDREF(p) TAKE_GENERIC((p), PidRef, PIDREF_NULL)
extern const struct hash_ops pidref_hash_ops; /* Has destructor call for pidref_free(), i.e. expects heap allocated PidRef as keys */