|
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);
|
@@ -356,6 +358,14 @@ SH_DESTROY(SH_TYPE * tb)
|
356 | 358 | pfree(tb);
|
357 | 359 | }
|
358 | 360 |
|
| 361 | +/* reset the contents of a previously created hash table */ |
| 362 | +SH_SCOPE void |
| 363 | +SH_RESET(SH_TYPE * tb) |
| 364 | +{ |
| 365 | + memset(tb->data, 0, sizeof(SH_ELEMENT_TYPE) * tb->size); |
| 366 | + tb->members = 0; |
| 367 | +} |
| 368 | + |
359 | 369 | /*
|
360 | 370 | * Grow a hash table to at least `newsize` buckets.
|
361 | 371 | *
|
@@ -946,6 +956,7 @@ SH_STAT(SH_TYPE * tb)
|
946 | 956 | /* external function names */
|
947 | 957 | #undef SH_CREATE
|
948 | 958 | #undef SH_DESTROY
|
| 959 | +#undef SH_RESET |
949 | 960 | #undef SH_INSERT
|
950 | 961 | #undef SH_DELETE
|
951 | 962 | #undef SH_LOOKUP
|
|
0 commit comments