From 94f7a095bb8e9ecbc7ce55dcf6f9d4a9b06f1dcc Mon Sep 17 00:00:00 2001 From: Chocobo1 Date: Thu, 8 Aug 2019 23:19:53 +0800 Subject: [PATCH] Implement proper equal operators --- src/base/bittorrent/tracker.cpp | 20 ++++++++++---------- src/base/bittorrent/tracker.h | 5 +++-- src/base/tristatebool.h | 14 +++++++------- 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/base/bittorrent/tracker.cpp b/src/base/bittorrent/tracker.cpp index e9d140dc5..24fc7b434 100644 --- a/src/base/bittorrent/tracker.cpp +++ b/src/base/bittorrent/tracker.cpp @@ -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) diff --git a/src/base/bittorrent/tracker.h b/src/base/bittorrent/tracker.h index b4db4c0ce..58174d0b7 100644 --- a/src/base/bittorrent/tracker.h +++ b/src/base/bittorrent/tracker.h @@ -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; diff --git a/src/base/tristatebool.h b/src/base/tristatebool.h index 086bf4af4..7a74eae9f 100644 --- a/src/base/tristatebool.h +++ b/src/base/tristatebool.h @@ -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