Add documentation to Unhasher impl for Fingerprint.
This commit is contained in:
parent
6a4878f61f
commit
d4d8bdf52b
1 changed files with 12 additions and 1 deletions
|
@ -103,7 +103,18 @@ impl<H: Hasher> FingerprintHasher for H {
|
|||
impl FingerprintHasher for crate::unhash::Unhasher {
|
||||
#[inline]
|
||||
fn write_fingerprint(&mut self, fingerprint: &Fingerprint) {
|
||||
// `Unhasher` only wants a single `u64`
|
||||
// Even though both halves of the fingerprint are expected to be good
|
||||
// quality hash values, let's still combine the two values because the
|
||||
// Fingerprints in DefPathHash have the StableCrateId portion which is
|
||||
// the same for all DefPathHashes from the same crate. Combining the
|
||||
// two halfs makes sure we get a good quality hash in such cases too.
|
||||
//
|
||||
// Since `Unhasher` is used only in the context of HashMaps, it is OK
|
||||
// to combine the two components in an order-independent way (which is
|
||||
// cheaper than the more robust Fingerprint::to_smaller_hash()). For
|
||||
// HashMaps we don't really care if Fingerprint(x,y) and
|
||||
// Fingerprint(y, x) result in the same hash value. Collision
|
||||
// probability will still be much better than with FxHash.
|
||||
self.write_u64(fingerprint.0.wrapping_add(fingerprint.1));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue