Use systematic approach to generate hash

The basic idea is to hash each class member and then mix them with xor
operation.
However the `seed` must be handled with care, it should only be
introduced once when mixing the hashes of each class member, otherwise
under some circumstances the `seed` might xor with itself and thus break
the intended effect.
This commit is contained in:
Chocobo1 2020-01-27 04:04:02 +08:00 committed by sledgehammer999
parent 21922ed3b4
commit fbb01a36e6
No known key found for this signature in database
GPG key ID: 6E4A2D025B7CC9A2
2 changed files with 2 additions and 2 deletions

View file

@ -162,5 +162,5 @@ bool BitTorrent::operator==(const TrackerEntry &left, const TrackerEntry &right)
uint BitTorrent::qHash(const TrackerEntry &key, const uint seed)
{
return (::qHash(key.url(), seed) ^ key.tier());
return (::qHash(key.url(), seed) ^ ::qHash(key.tier()));
}

View file

@ -348,7 +348,7 @@ Net::ServiceID Net::ServiceID::fromURL(const QUrl &url)
uint Net::qHash(const ServiceID &serviceID, const uint seed)
{
return ::qHash(serviceID.hostName, seed) ^ serviceID.port;
return ::qHash(serviceID.hostName, seed) ^ ::qHash(serviceID.port);
}
bool Net::operator==(const ServiceID &lhs, const ServiceID &rhs)