Move the hasher to the inner HashMap
#22
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is an alternate to #21 that gives
HashMap
control of most hashing, by introducing a privateNodeKey<K, V>
type around the node pointer that only looks atK
for equality and hashing. A privateNodeQ
wrapper also works to enable the genericK: Borrow<Q>
relationship while havingNodeKey
in the middle.As with #21,
LinkedHashMap::reserve
andtry_reserve
are now constrained such thatK
can be (re)hashed withS
, which is needed when hashbrown tries to move them to a new allocation. The newtest_reserve
demonstrates a case that would have previously failed.In addition,
OccupiedEntry
andRawOccupiedEntryMut
now carry theS
parameter as well, sincehashbrown
's entry type needs it now that it's not justNullHasher
(which has been removed).