Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Zwinkau
libfirm
Commits
96120903
Commit
96120903
authored
Jun 08, 2007
by
Matthias Braun
Browse files
don't shrink a set below its minimum size
[r14378]
parent
c3323fd9
Changes
1
Hide whitespace changes
Inline
Side-by-side
ir/adt/hashset.c
View file @
96120903
...
...
@@ -144,12 +144,15 @@
#ifndef HT_OCCUPANCY_FLT
/** how full before we double size */
#define HT_OCCUPANCY_FLT
0.5f
#define HT_OCCUPANCY_FLT
(x) ((x)/2)
#endif
/* HT_OCCUPANCY_FLT */
#ifndef HT_1_DIV_OCCUPANCY_FLT
#define HT_1_DIV_OCCUPANCY_FLT 2
#endif
#ifndef HT_EMPTY_FLT
/** how empty before we half size */
#define HT_EMPTY_FLT
(
0.4f * (HT_OCCUPANCY_FLT)
)
#define HT_EMPTY_FLT
(x)
(
(x)/5
)
#endif
/* HT_EMPTY_FLT */
#ifndef HT_MIN_BUCKETS
...
...
@@ -302,8 +305,8 @@ void insert_new(HashSet *self, unsigned hash, ValueType value)
static
INLINE
void
reset_thresholds
(
HashSet
*
self
)
{
self
->
enlarge_threshold
=
(
size_t
)
(
self
->
num_buckets
*
HT_OCCUPANCY_FLT
);
self
->
shrink_threshold
=
(
size_t
)
(
self
->
num_buckets
*
HT_EMPTY_FLT
);
self
->
enlarge_threshold
=
(
size_t
)
HT_OCCUPANCY_FLT
(
self
->
num_buckets
);
self
->
shrink_threshold
=
(
size_t
)
HT_EMPTY_FLT
(
self
->
num_buckets
);
self
->
consider_shrink
=
0
;
}
...
...
@@ -378,6 +381,9 @@ void maybe_shrink(HashSet *self)
self
->
consider_shrink
=
0
;
size
=
hashset_size
(
self
);
if
(
size
<=
HT_MIN_BUCKETS
)
return
;
if
(
LIKELY
(
size
>
self
->
shrink_threshold
))
return
;
...
...
@@ -544,7 +550,7 @@ void hashset_init_size(HashSet *self, size_t expected_elements)
abort
();
}
needed_size
=
expected_elements
*
(
int
)(
1
.
0
/
HT
_OCCUPANCY_FLT
)
;
needed_size
=
expected_elements
*
HT_1_DIV
_OCCUPANCY_FLT
;
po2size
=
ceil_po2
(
needed_size
);
init_size
(
self
,
po2size
);
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment