aboutsummaryrefslogtreecommitdiff
path: root/src/supplemental/idhash/idhash.c
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2023-12-29 17:43:50 -0800
committerGarrett D'Amore <garrett@damore.org>2023-12-29 18:25:04 -0800
commit3298ac1e93742e7a1ef5c4dc2e9b603dfa89d3cb (patch)
treea1051ba1a3edcd5bc6c75c9a1f43ae1a14813b45 /src/supplemental/idhash/idhash.c
parent5954332f1690e95c329b991a25b2d89b9a44ef02 (diff)
downloadnng-3298ac1e93742e7a1ef5c4dc2e9b603dfa89d3cb.tar.gz
nng-3298ac1e93742e7a1ef5c4dc2e9b603dfa89d3cb.tar.bz2
nng-3298ac1e93742e7a1ef5c4dc2e9b603dfa89d3cb.zip
fixes #1740 Public ID hash API
This includes a manual page documenting the entire set of functions in one step. The hash is 64-bit based for now, to be maximally flexible. An internal 32-bit convenience for the common internal use is also provided (not public). The public API includes a test suite.
Diffstat (limited to 'src/supplemental/idhash/idhash.c')
-rw-r--r--src/supplemental/idhash/idhash.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/supplemental/idhash/idhash.c b/src/supplemental/idhash/idhash.c
new file mode 100644
index 00000000..051b686a
--- /dev/null
+++ b/src/supplemental/idhash/idhash.c
@@ -0,0 +1,60 @@
+//
+// Copyright 2023 Staysail Systems, Inc. <info@staysail.tech>
+//
+// This software is supplied under the terms of the MIT License, a
+// copy of which should be located in the distribution where this
+// file was obtained (LICENSE.txt). A copy of the license may also be
+// found online at https://opensource.org/licenses/MIT.
+//
+
+#include "supplemental/idhash/idhash.h"
+#include "core/nng_impl.h"
+
+struct nng_id_map_s {
+ nni_id_map m;
+};
+
+int
+nng_id_map_alloc(nng_id_map **map, uint64_t lo, uint64_t hi, int flags)
+{
+ nng_id_map *m;
+
+ if ((m = NNI_ALLOC_STRUCT(m)) == NULL) {
+ return (NNG_ENOMEM);
+ }
+ nni_id_map_init(
+ &m->m, lo, hi, (flags & NNG_MAP_RANDOM) ? true : false);
+ *map = m;
+ return (0);
+}
+
+void
+nng_id_map_free(nng_id_map *map)
+{
+ nni_id_map_fini(&map->m);
+ NNI_FREE_STRUCT(map);
+}
+
+void *
+nng_id_get(nng_id_map *map, uint64_t id)
+{
+ return (nni_id_get(&map->m, id));
+}
+
+int
+nng_id_set(nng_id_map *map, uint64_t id, void *val)
+{
+ return (nni_id_set(&map->m, id, val));
+}
+
+int
+nng_id_remove(nng_id_map *map, uint64_t id)
+{
+ return (nni_id_remove(&map->m, id));
+}
+
+int
+nng_id_alloc(nng_id_map *map, uint64_t *id, void *val)
+{
+ return (nni_id_alloc(&map->m, id, val));
+}