projects
/
cparser
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
636b0ce
)
don't grow the hashset if it just clobbered with deleted entries
author
Matthias Braun
<matze@braunis.de>
Mon, 26 Nov 2012 16:12:29 +0000
(17:12 +0100)
committer
Matthias Braun
<matze@braunis.de>
Mon, 26 Nov 2012 16:12:29 +0000
(17:12 +0100)
adt/hashset.c.inl
patch
|
blob
|
history
diff --git
a/adt/hashset.c.inl
b/adt/hashset.c.inl
index
e0cf70c
..
0e7ce35
100644
(file)
--- a/
adt/hashset.c.inl
+++ b/
adt/hashset.c.inl
@@
-346,13
+346,20
@@
static inline void resize(HashSet *self, size_t new_size);
*/
static inline void maybe_grow(HashSet *self)
{
*/
static inline void maybe_grow(HashSet *self)
{
- size_t resize_to;
-
if (LIKELY(self->num_elements + 1 <= self->enlarge_threshold))
return;
if (LIKELY(self->num_elements + 1 <= self->enlarge_threshold))
return;
- /* double table size */
- resize_to = self->num_buckets * 2;
+ size_t resize_to;
+ if (self->num_elements - self->num_deleted + 2 > self->enlarge_threshold) {
+ /* double table size */
+ resize_to = self->num_buckets * 2;
+ if (resize_to <= self->num_buckets) {
+ abort();
+ }
+ } else {
+ /* no need to resize, we just clean up the deleted entries */
+ resize_to = self->num_buckets;
+ }
resize(self, resize_to);
}
resize(self, resize_to);
}