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(); }
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<peer*> peers_t;
@ -293,36 +302,14 @@ namespace libtorrent
std::pair<iterator, iterator> 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<const_iterator, const_iterator> 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);

View File

@ -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;