From 3faae3025e08a7bc6f01245eeb9373ade41fccc5 Mon Sep 17 00:00:00 2001 From: Stephen Seo Date: Mon, 11 Feb 2019 11:33:35 +0900 Subject: [PATCH] Add support for zero-size unitSize in HashMap --- src/UDPC_HashMap.c | 23 ++++++++++++++++++++--- src/UDPC_HashMap.h | 3 +++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/UDPC_HashMap.c b/src/UDPC_HashMap.c index 8533037..ef09703 100644 --- a/src/UDPC_HashMap.c +++ b/src/UDPC_HashMap.c @@ -94,7 +94,10 @@ void* UDPC_HashMap_insert(UDPC_HashMap *hm, uint32_t key, void *data) char *temp = malloc(sizeof(uint32_t) + hm->unitSize); memcpy(temp, &key, sizeof(uint32_t)); - memcpy(temp + sizeof(uint32_t), data, hm->unitSize); + if(hm->unitSize > 0) + { + memcpy(temp + sizeof(uint32_t), data, hm->unitSize); + } if(UDPC_Deque_get_available(hm->buckets[hash]) != 0) { @@ -185,7 +188,14 @@ void* UDPC_HashMap_get(UDPC_HashMap *hm, uint32_t key) &key, sizeof(uint32_t)) == 0) { - return ptr + sizeof(uint32_t); + if(hm->unitSize > 0) + { + return ptr + sizeof(uint32_t); + } + else + { + return ptr; + } } } @@ -197,7 +207,14 @@ void* UDPC_HashMap_get(UDPC_HashMap *hm, uint32_t key) &key, sizeof(uint32_t)) == 0) { - return ptr + sizeof(uint32_t); + if(hm->unitSize > 0) + { + return ptr + sizeof(uint32_t); + } + else + { + return ptr; + } } } diff --git a/src/UDPC_HashMap.h b/src/UDPC_HashMap.h index 9739b89..3aadd9c 100644 --- a/src/UDPC_HashMap.h +++ b/src/UDPC_HashMap.h @@ -58,6 +58,9 @@ int UDPC_HashMap_remove(UDPC_HashMap *hm, uint32_t key); /*! * \brief Returns a pointer to data with the given key + * Note if unitSize == 0, then the returned pointer will point to a copy of + * its integer key, which should not be changed manually (otherwise, the hash + * map would not be able to find it). * \return non-NULL if data was found */ void* UDPC_HashMap_get(UDPC_HashMap *hm, uint32_t key);