forked from premiere/premiere-libtorrent
Don't construct a temporary peer just for searching. Clean up some duplicate code.
This commit is contained in:
parent
0f6a89f0c0
commit
757b0437e9
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue