Implement proper equal operators

This commit is contained in:
Chocobo1 2019-08-08 23:19:53 +08:00
parent d639c16f72
commit 94f7a095bb
No known key found for this signature in database
GPG key ID: 210D9C873253A68C
3 changed files with 20 additions and 19 deletions

View file

@ -43,16 +43,6 @@ static const int ANNOUNCE_INTERVAL = 1800; // 30min
using namespace BitTorrent;
// Peer
bool Peer::operator!=(const Peer &other) const
{
return uid() != other.uid();
}
bool Peer::operator==(const Peer &other) const
{
return uid() == other.uid();
}
QString Peer::uid() const
{
return ip.toString() + ':' + QString::number(port);
@ -69,6 +59,16 @@ lt::entry Peer::toEntry(const bool noPeerId) const
return lt::entry(peerMap);
}
bool BitTorrent::operator==(const Peer &left, const Peer &right)
{
return left.uid() == right.uid();
}
bool BitTorrent::operator!=(const Peer &left, const Peer &right)
{
return !(left == right);
}
// Tracker
Tracker::Tracker(QObject *parent)

View file

@ -52,12 +52,13 @@ namespace BitTorrent
QByteArray peerId;
int port;
bool operator!=(const Peer &other) const;
bool operator==(const Peer &other) const;
QString uid() const;
lt::entry toEntry(bool noPeerId) const;
};
bool operator==(const Peer &left, const Peer &right);
bool operator!=(const Peer &left, const Peer &right);
struct TrackerAnnounceRequest
{
QByteArray infoHash;

View file

@ -50,18 +50,18 @@ public:
TriStateBool &operator=(const TriStateBool &other) = default; // add constexpr when using C++17
constexpr bool operator==(const TriStateBool &other) const
constexpr friend bool operator==(const TriStateBool &left, const TriStateBool &right)
{
return (m_value == other.m_value);
}
constexpr bool operator!=(const TriStateBool &other) const
{
return !operator==(other);
return (left.m_value == right.m_value);
}
private:
signed char m_value = -1; // Undefined by default
};
constexpr bool operator!=(const TriStateBool &left, const TriStateBool &right)
{
return !(left == right);
}
#endif // TRISTATEBOOL_H