diff options
| author | Garrett D'Amore <garrett@damore.org> | 2023-12-29 17:43:50 -0800 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2023-12-29 18:25:04 -0800 |
| commit | 3298ac1e93742e7a1ef5c4dc2e9b603dfa89d3cb (patch) | |
| tree | a1051ba1a3edcd5bc6c75c9a1f43ae1a14813b45 /src/supplemental/idhash/idhash.c | |
| parent | 5954332f1690e95c329b991a25b2d89b9a44ef02 (diff) | |
| download | nng-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.c | 60 |
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)); +} |
