diff --git a/include/libtorrent/policy.hpp b/include/libtorrent/policy.hpp index 8a7a76f8a..bc3e86f97 100644 --- a/include/libtorrent/policy.hpp +++ b/include/libtorrent/policy.hpp @@ -276,10 +276,19 @@ namespace libtorrent int num_peers() const { return m_peers.size(); } - struct peer_ptr_compare + struct peer_address_compare { - bool operator()(peer const* lhs, peer const* rhs) const - { return lhs->address() < rhs->address(); } + bool operator()( + peer const* lhs, libtorrent::address const& rhs) const + { + return lhs->address() < rhs; + } + + bool operator()( + libtorrent::address const& lhs, peer const* rhs) const + { + return lhs < rhs->address(); + } }; typedef std::deque peers_t; @@ -293,36 +302,14 @@ namespace libtorrent std::pair find_peers(address const& a) { - peer_ptr_compare cmp; -#if TORRENT_USE_IPV6 - if (a.is_v6()) - { - ipv6_peer tmp(a); - return std::equal_range(m_peers.begin(), m_peers.end(), &tmp, cmp); - } - else -#endif - { - ipv4_peer tmp(a); - return std::equal_range(m_peers.begin(), m_peers.end(), &tmp, cmp); - } + return std::equal_range( + m_peers.begin(), m_peers.end(), a, peer_address_compare()); } std::pair find_peers(address const& a) const { - peer_ptr_compare cmp; -#if TORRENT_USE_IPV6 - if (a.is_v6()) - { - ipv6_peer tmp(a); - return std::equal_range(m_peers.begin(), m_peers.end(), &tmp, cmp); - } - else -#endif - { - ipv4_peer tmp(a); - return std::equal_range(m_peers.begin(), m_peers.end(), &tmp, cmp); - } + return std::equal_range( + m_peers.begin(), m_peers.end(), a, peer_address_compare()); } bool connect_one_peer(int session_time); diff --git a/src/policy.cpp b/src/policy.cpp index d93d59be2..c845082be 100644 --- a/src/policy.cpp +++ b/src/policy.cpp @@ -706,21 +706,11 @@ namespace libtorrent } else { - peer_ptr_compare cmp; -#if TORRENT_USE_IPV6 - if (c.remote().address().is_v6()) - { - ipv6_peer tmp(c.remote().address()); - iter = std::lower_bound(m_peers.begin(), m_peers.end() - , &tmp, cmp); - } - else -#endif - { - ipv4_peer tmp(c.remote().address()); - iter = std::lower_bound(m_peers.begin(), m_peers.end() - , &tmp, cmp); - } + iter = std::lower_bound( + m_peers.begin(), m_peers.end() + , c.remote().address(), peer_address_compare() + ); + if (iter != m_peers.end() && (*iter)->address() == c.remote().address()) found = true; } @@ -950,21 +940,10 @@ namespace libtorrent } else { - peer_ptr_compare cmp; -#if TORRENT_USE_IPV6 - if (remote.address().is_v6()) - { - ipv6_peer tmp(remote.address()); - iter = std::lower_bound(m_peers.begin(), m_peers.end() - , &tmp, cmp); - } - else -#endif - { - ipv4_peer tmp(remote.address()); - iter = std::lower_bound(m_peers.begin(), m_peers.end() - , &tmp, cmp); - } + iter = std::lower_bound( + m_peers.begin(), m_peers.end() + , remote.address(), peer_address_compare() + ); if (iter != m_peers.end() && (*iter)->address() == remote.address()) found = true; } @@ -982,21 +961,10 @@ namespace libtorrent // since some peers were removed, we need to // update the iterator to make it valid again - peer_ptr_compare cmp; -#if TORRENT_USE_IPV6 - if (remote.address().is_v6()) - { - ipv6_peer tmp(remote.address()); - iter = std::lower_bound(m_peers.begin(), m_peers.end() - , &tmp, cmp); - } - else -#endif - { - ipv4_peer tmp(remote.address()); - iter = std::lower_bound(m_peers.begin(), m_peers.end() - , &tmp, cmp); - } + iter = std::lower_bound( + m_peers.begin(), m_peers.end() + , remote.address(), peer_address_compare() + ); } if (m_round_robin > iter - m_peers.begin()) ++m_round_robin;