aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndres Freund <andres@anarazel.de>2019-02-09 00:35:57 -0800
committerAndres Freund <andres@anarazel.de>2019-02-09 01:05:50 -0800
commit350b0a40375e5fa171da15bd3062de83c54cd099 (patch)
tree6629f89db8f1dcd6c6c62f3927e76054fc94cd9b
parent9cf37a527cf83e94f8f166d380baf53287a0337b (diff)
downloadpostgresql-350b0a40375e5fa171da15bd3062de83c54cd099.tar.gz
postgresql-350b0a40375e5fa171da15bd3062de83c54cd099.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
-rw-r--r--src/include/lib/simplehash.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/include/lib/simplehash.h b/src/include/lib/simplehash.h
index 5273d494600..673284fd3af 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);
@@ -356,6 +358,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.
*
@@ -946,6 +956,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