Don't construct a temporary peer just for searching. Clean up some duplicate code.

This commit is contained in:
Daniel Wallin 2009-05-25 10:15:35 +00:00
parent 0f6a89f0c0
commit 757b0437e9
2 changed files with 29 additions and 74 deletions

View File

@ -276,10 +276,19 @@ namespace libtorrent
int num_peers() const { return m_peers.size(); } 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 bool operator()(
{ return lhs->address() < rhs->address(); } 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<peer*> peers_t; typedef std::deque<peer*> peers_t;
@ -293,36 +302,14 @@ namespace libtorrent
std::pair<iterator, iterator> find_peers(address const& a) std::pair<iterator, iterator> find_peers(address const& a)
{ {
peer_ptr_compare cmp; return std::equal_range(
#if TORRENT_USE_IPV6 m_peers.begin(), m_peers.end(), a, peer_address_compare());
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);
}
} }
std::pair<const_iterator, const_iterator> find_peers(address const& a) const std::pair<const_iterator, const_iterator> find_peers(address const& a) const
{ {
peer_ptr_compare cmp; return std::equal_range(
#if TORRENT_USE_IPV6 m_peers.begin(), m_peers.end(), a, peer_address_compare());
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);
}
} }
bool connect_one_peer(int session_time); bool connect_one_peer(int session_time);

View File

@ -706,21 +706,11 @@ namespace libtorrent
} }
else else
{ {
peer_ptr_compare cmp; iter = std::lower_bound(
#if TORRENT_USE_IPV6 m_peers.begin(), m_peers.end()
if (c.remote().address().is_v6()) , c.remote().address(), peer_address_compare()
{ );
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);
}
if (iter != m_peers.end() && (*iter)->address() == c.remote().address()) found = true; if (iter != m_peers.end() && (*iter)->address() == c.remote().address()) found = true;
} }
@ -950,21 +940,10 @@ namespace libtorrent
} }
else else
{ {
peer_ptr_compare cmp; iter = std::lower_bound(
#if TORRENT_USE_IPV6 m_peers.begin(), m_peers.end()
if (remote.address().is_v6()) , remote.address(), peer_address_compare()
{ );
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);
}
if (iter != m_peers.end() && (*iter)->address() == remote.address()) found = true; 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 // since some peers were removed, we need to
// update the iterator to make it valid again // update the iterator to make it valid again
peer_ptr_compare cmp; iter = std::lower_bound(
#if TORRENT_USE_IPV6 m_peers.begin(), m_peers.end()
if (remote.address().is_v6()) , remote.address(), peer_address_compare()
{ );
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);
}
} }
if (m_round_robin > iter - m_peers.begin()) ++m_round_robin; if (m_round_robin > iter - m_peers.begin()) ++m_round_robin;