|
72 | 72 | /* function declarations */
|
73 | 73 | #define SH_CREATE SH_MAKE_NAME(create)
|
74 | 74 | #define SH_DESTROY SH_MAKE_NAME(destroy)
|
| 75 | +#define SH_RESET SH_MAKE_NAME(reset) |
75 | 76 | #define SH_INSERT SH_MAKE_NAME(insert)
|
76 | 77 | #define SH_DELETE SH_MAKE_NAME(delete)
|
77 | 78 | #define SH_LOOKUP SH_MAKE_NAME(lookup)
|
@@ -140,6 +141,7 @@ typedef struct SH_ITERATOR
|
140 | 141 | SH_SCOPE SH_TYPE *SH_CREATE(MemoryContext ctx, uint32 nelements,
|
141 | 142 | void *private_data);
|
142 | 143 | SH_SCOPE void SH_DESTROY(SH_TYPE * tb);
|
| 144 | +SH_SCOPE void SH_RESET(SH_TYPE * tb); |
143 | 145 | SH_SCOPE void SH_GROW(SH_TYPE * tb, uint32 newsize);
|
144 | 146 | SH_SCOPE SH_ELEMENT_TYPE *SH_INSERT(SH_TYPE * tb, SH_KEY_TYPE key, bool *found);
|
145 | 147 | SH_SCOPE SH_ELEMENT_TYPE *SH_LOOKUP(SH_TYPE * tb, SH_KEY_TYPE key);
|
@@ -368,6 +370,14 @@ SH_DESTROY(SH_TYPE * tb)
|
368 | 370 | pfree(tb);
|
369 | 371 | }
|
370 | 372 |
|
| 373 | +/* reset the contents of a previously created hash table */ |
| 374 | +SH_SCOPE void |
| 375 | +SH_RESET(SH_TYPE * tb) |
| 376 | +{ |
| 377 | + memset(tb->data, 0, sizeof(SH_ELEMENT_TYPE) * tb->size); |
| 378 | + tb->members = 0; |
| 379 | +} |
| 380 | + |
371 | 381 | /*
|
372 | 382 | * Grow a hash table to at least `newsize` buckets.
|
373 | 383 | *
|
@@ -959,6 +969,7 @@ SH_STAT(SH_TYPE * tb)
|
959 | 969 | /* external function names */
|
960 | 970 | #undef SH_CREATE
|
961 | 971 | #undef SH_DESTROY
|
| 972 | +#undef SH_RESET |
962 | 973 | #undef SH_INSERT
|
963 | 974 | #undef SH_DELETE
|
964 | 975 | #undef SH_LOOKUP
|
|
0 commit comments