diff options
author | Andres Freund <andres@anarazel.de> | 2019-02-09 00:35:57 -0800 |
---|---|---|
committer | Andres Freund <andres@anarazel.de> | 2019-02-09 01:05:49 -0800 |
commit | 3b632a58e7985c6589dbd0e6c0f32ba007783cfa (patch) | |
tree | 9f96c6baf54ad4eb853089915d8c8759fd39f4d8 /src | |
parent | 5567d12ce030781a4f749c9cd2034b95a3b64424 (diff) | |
download | postgresql-3b632a58e7985c6589dbd0e6c0f32ba007783cfa.tar.gz postgresql-3b632a58e7985c6589dbd0e6c0f32ba007783cfa.zip |
simplehash: Add support for resetting a hashtable's contents.
A hashtable reset just reset the hashtable entries, but does not free
memory.
Author: Andres Freund
Discussion: https://postgr.es/m/20190114180423.ywhdg2iagzvh43we@alap3.anarazel.de
Bug: #15592 #15486
Backpatch: 11, this is a prerequisite for other fixes
Diffstat (limited to 'src')
-rw-r--r-- | src/include/lib/simplehash.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/include/lib/simplehash.h b/src/include/lib/simplehash.h index 3b30c185cdf..d36f15d4a14 100644 --- a/src/include/lib/simplehash.h +++ b/src/include/lib/simplehash.h @@ -72,6 +72,7 @@ /* function declarations */ #define SH_CREATE SH_MAKE_NAME(create) #define SH_DESTROY SH_MAKE_NAME(destroy) +#define SH_RESET SH_MAKE_NAME(reset) #define SH_INSERT SH_MAKE_NAME(insert) #define SH_DELETE SH_MAKE_NAME(delete) #define SH_LOOKUP SH_MAKE_NAME(lookup) @@ -140,6 +141,7 @@ typedef struct SH_ITERATOR SH_SCOPE SH_TYPE *SH_CREATE(MemoryContext ctx, uint32 nelements, void *private_data); SH_SCOPE void SH_DESTROY(SH_TYPE * tb); +SH_SCOPE void SH_RESET(SH_TYPE * tb); SH_SCOPE void SH_GROW(SH_TYPE * tb, uint32 newsize); SH_SCOPE SH_ELEMENT_TYPE *SH_INSERT(SH_TYPE * tb, SH_KEY_TYPE key, bool *found); SH_SCOPE SH_ELEMENT_TYPE *SH_LOOKUP(SH_TYPE * tb, SH_KEY_TYPE key); @@ -368,6 +370,14 @@ SH_DESTROY(SH_TYPE * tb) pfree(tb); } +/* reset the contents of a previously created hash table */ +SH_SCOPE void +SH_RESET(SH_TYPE * tb) +{ + memset(tb->data, 0, sizeof(SH_ELEMENT_TYPE) * tb->size); + tb->members = 0; +} + /* * Grow a hash table to at least `newsize` buckets. * @@ -959,6 +969,7 @@ SH_STAT(SH_TYPE * tb) /* external function names */ #undef SH_CREATE #undef SH_DESTROY +#undef SH_RESET #undef SH_INSERT #undef SH_DELETE #undef SH_LOOKUP |