Add documentation to Unhasher impl for Fingerprint.

This commit is contained in:
Michael Woerister 2021-02-04 10:37:11 +01:00
parent 6a4878f61f
commit d4d8bdf52b

View file

@ -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));
}
}