diff --git a/ChangeLog b/ChangeLog index e5771f35..2ed743a0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2010-11-20 Tatsuhiro Tsujikawa + + Added BtSeederStateChoke::PeerEntry::swap(). Also added + non-member swap for it, which is friend function for + BtSeederStateChoke because PeerEntry is private. + * src/BtSeederStateChoke.cc + * src/BtSeederStateChoke.h + 2010-11-20 Tatsuhiro Tsujikawa Added BtLeecherStateChoke::PeerEntry::swap(). Also added diff --git a/src/BtSeederStateChoke.cc b/src/BtSeederStateChoke.cc index c465b346..08671072 100644 --- a/src/BtSeederStateChoke.cc +++ b/src/BtSeederStateChoke.cc @@ -71,6 +71,16 @@ BtSeederStateChoke::PeerEntry::PeerEntry(const PeerEntry& c) BtSeederStateChoke::PeerEntry::~PeerEntry() {} +void BtSeederStateChoke::PeerEntry::swap(PeerEntry& c) +{ + using std::swap; + swap(peer_, c.peer_); + swap(outstandingUpload_, c.outstandingUpload_); + swap(lastAmUnchoking_, c.lastAmUnchoking_); + swap(recentUnchoking_, c.recentUnchoking_); + swap(uploadSpeed_, c.uploadSpeed_); +} + BtSeederStateChoke::PeerEntry& BtSeederStateChoke::PeerEntry::operator= (const PeerEntry& c) { @@ -176,4 +186,21 @@ BtSeederStateChoke::executeChoke } } +void swap +(BtSeederStateChoke::PeerEntry& a, + BtSeederStateChoke::PeerEntry& b) +{ + a.swap(b); +} + } // namespace aria2 + +namespace std { +template<> +void swap +(aria2::BtSeederStateChoke::PeerEntry& a, + aria2::BtSeederStateChoke::PeerEntry& b) +{ + a.swap(b); +} +} // namespace std diff --git a/src/BtSeederStateChoke.h b/src/BtSeederStateChoke.h index d6b3da14..dacfd465 100644 --- a/src/BtSeederStateChoke.h +++ b/src/BtSeederStateChoke.h @@ -66,6 +66,8 @@ private: PeerEntry(const PeerEntry& c); ~PeerEntry(); + void swap(PeerEntry& c); + PeerEntry& operator=(const PeerEntry& c); bool operator<(const PeerEntry& rhs) const; @@ -99,8 +101,22 @@ public: void executeChoke(const std::vector >& peerSet); const Timer& getLastRound() const { return lastRound_; } + + friend void swap(PeerEntry& a, PeerEntry& b); + friend void std::swap(PeerEntry& a, PeerEntry& b); }; +void swap +(BtSeederStateChoke::PeerEntry& a, + BtSeederStateChoke::PeerEntry& b); + } // namespace aria2 +namespace std { +template<> +void swap +(aria2::BtSeederStateChoke::PeerEntry& a, + aria2::BtSeederStateChoke::PeerEntry& b); +} // namespace std + #endif // D_BT_SEEDER_STATE_CHOKE_H