Use Abseil container algorithms in p2p/
Bug: None
Change-Id: I02dd19efa201bd9d55d0f7c2e1496693017a6848
Reviewed-on: https://webrtc-review.googlesource.com/c/120001
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Qingsi Wang <qingsi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#26455}
diff --git a/p2p/BUILD.gn b/p2p/BUILD.gn
index 633dc95..94aab36 100644
--- a/p2p/BUILD.gn
+++ b/p2p/BUILD.gn
@@ -141,6 +141,7 @@
"../rtc_base:rtc_base_tests_utils",
"../rtc_base/third_party/sigslot",
"../test:test_support",
+ "//third_party/abseil-cpp/absl/algorithm:container",
"//third_party/abseil-cpp/absl/memory",
"//third_party/abseil-cpp/absl/types:optional",
]
@@ -191,6 +192,7 @@
"../system_wrappers:metrics",
"../test:test_support",
"//testing/gtest",
+ "//third_party/abseil-cpp/absl/algorithm:container",
"//third_party/abseil-cpp/absl/memory",
]
if (!build_with_chromium && is_clang) {
@@ -216,6 +218,7 @@
"../rtc_base:rtc_base",
"../rtc_base:rtc_base_tests_utils",
"../rtc_base/third_party/sigslot",
+ "//third_party/abseil-cpp/absl/algorithm:container",
"//third_party/abseil-cpp/absl/memory",
]
}
diff --git a/p2p/base/fake_ice_transport.h b/p2p/base/fake_ice_transport.h
index 45fe6f3..1b95a55 100644
--- a/p2p/base/fake_ice_transport.h
+++ b/p2p/base/fake_ice_transport.h
@@ -15,6 +15,7 @@
#include <string>
#include <utility>
+#include "absl/algorithm/container.h"
#include "absl/types/optional.h"
#include "p2p/base/ice_transport_internal.h"
#include "rtc_base/async_invoker.h"
@@ -181,8 +182,7 @@
remote_candidates_.push_back(candidate);
}
void RemoveRemoteCandidate(const Candidate& candidate) override {
- auto it = std::find(remote_candidates_.begin(), remote_candidates_.end(),
- candidate);
+ auto it = absl::c_find(remote_candidates_, candidate);
if (it == remote_candidates_.end()) {
RTC_LOG(LS_INFO) << "Trying to remove a candidate which doesn't exist.";
return;
diff --git a/p2p/base/p2p_transport_channel.cc b/p2p/base/p2p_transport_channel.cc
index 89f9199..5d1b73f 100644
--- a/p2p/base/p2p_transport_channel.cc
+++ b/p2p/base/p2p_transport_channel.cc
@@ -1095,10 +1095,10 @@
void P2PTransportChannel::OnCandidateResolved(
rtc::AsyncResolverInterface* resolver) {
- auto p = std::find_if(resolvers_.begin(), resolvers_.end(),
- [resolver](const CandidateAndResolver& cr) {
- return cr.resolver_ == resolver;
- });
+ auto p =
+ absl::c_find_if(resolvers_, [resolver](const CandidateAndResolver& cr) {
+ return cr.resolver_ == resolver;
+ });
if (p == resolvers_.end()) {
RTC_LOG(LS_ERROR) << "Unexpected AsyncResolver signal";
RTC_NOTREACHED();
@@ -1211,8 +1211,7 @@
}
}
- if ((origin_port != NULL) &&
- std::find(ports_.begin(), ports_.end(), origin_port) == ports_.end()) {
+ if ((origin_port != NULL) && !absl::c_linear_search(ports_, origin_port)) {
if (CreateConnection(origin_port, remote_candidate, origin_port))
created = true;
}
@@ -1268,9 +1267,7 @@
}
bool P2PTransportChannel::FindConnection(Connection* connection) const {
- std::vector<Connection*>::const_iterator citer =
- std::find(connections_.begin(), connections_.end(), connection);
- return citer != connections_.end();
+ return absl::c_linear_search(connections_, connection);
}
uint32_t P2PTransportChannel::GetRemoteCandidateGeneration(
@@ -1621,12 +1618,11 @@
}
bool P2PTransportChannel::IsPortPruned(const Port* port) const {
- return std::find(ports_.begin(), ports_.end(), port) == ports_.end();
+ return !absl::c_linear_search(ports_, port);
}
bool P2PTransportChannel::IsRemoteCandidatePruned(const Candidate& cand) const {
- return std::find(remote_candidates_.begin(), remote_candidates_.end(), cand)
- == remote_candidates_.end();
+ return !absl::c_linear_search(remote_candidates_, cand);
}
int P2PTransportChannel::CompareConnections(
@@ -1694,15 +1690,15 @@
// one whose estimated latency is lowest. So it is the only one that we
// need to consider switching to.
// TODO(honghaiz): Don't sort; Just use std::max_element in the right places.
- std::stable_sort(connections_.begin(), connections_.end(),
- [this](const Connection* a, const Connection* b) {
- int cmp = CompareConnections(a, b, absl::nullopt, nullptr);
- if (cmp != 0) {
- return cmp > 0;
- }
- // Otherwise, sort based on latency estimate.
- return a->rtt() < b->rtt();
- });
+ absl::c_stable_sort(
+ connections_, [this](const Connection* a, const Connection* b) {
+ int cmp = CompareConnections(a, b, absl::nullopt, nullptr);
+ if (cmp != 0) {
+ return cmp > 0;
+ }
+ // Otherwise, sort based on latency estimate.
+ return a->rtt() < b->rtt();
+ });
RTC_LOG(LS_VERBOSE) << "Sorting " << connections_.size()
<< " available connections";
@@ -2124,19 +2120,17 @@
// Rule 2.1: Among such connections, pick the one with the earliest
// last-ping-sent time.
if (weak()) {
- auto selectable_connections = GetBestWritableConnectionPerNetwork();
std::vector<Connection*> pingable_selectable_connections;
- std::copy_if(selectable_connections.begin(), selectable_connections.end(),
- std::back_inserter(pingable_selectable_connections),
- [this, now](Connection* conn) {
- return WritableConnectionPastPingInterval(conn, now);
- });
- auto iter = std::min_element(pingable_selectable_connections.begin(),
- pingable_selectable_connections.end(),
- [](Connection* conn1, Connection* conn2) {
- return conn1->last_ping_sent() <
- conn2->last_ping_sent();
- });
+ absl::c_copy_if(GetBestWritableConnectionPerNetwork(),
+ std::back_inserter(pingable_selectable_connections),
+ [this, now](Connection* conn) {
+ return WritableConnectionPastPingInterval(conn, now);
+ });
+ auto iter = absl::c_min_element(pingable_selectable_connections,
+ [](Connection* conn1, Connection* conn2) {
+ return conn1->last_ping_sent() <
+ conn2->last_ping_sent();
+ });
if (iter != pingable_selectable_connections.end()) {
return *iter;
}
@@ -2157,10 +2151,9 @@
// Otherwise, treat everything as unpinged.
// TODO(honghaiz): Instead of adding two separate vectors, we can add a state
// "pinged" to filter out unpinged connections.
- if (std::find_if(unpinged_connections_.begin(), unpinged_connections_.end(),
- [this, now](Connection* conn) {
- return this->IsPingable(conn, now);
- }) == unpinged_connections_.end()) {
+ if (absl::c_none_of(unpinged_connections_, [this, now](Connection* conn) {
+ return this->IsPingable(conn, now);
+ })) {
unpinged_connections_.insert(pinged_connections_.begin(),
pinged_connections_.end());
pinged_connections_.clear();
@@ -2168,19 +2161,18 @@
// Among un-pinged pingable connections, "more pingable" takes precedence.
std::vector<Connection*> pingable_connections;
- std::copy_if(unpinged_connections_.begin(), unpinged_connections_.end(),
- std::back_inserter(pingable_connections),
- [this, now](Connection* conn) { return IsPingable(conn, now); });
- auto iter =
- std::max_element(pingable_connections.begin(), pingable_connections.end(),
- [this](Connection* conn1, Connection* conn2) {
- // Some implementations of max_element compare an
- // element with itself.
- if (conn1 == conn2) {
- return false;
- }
- return MorePingable(conn1, conn2) == conn2;
- });
+ absl::c_copy_if(
+ unpinged_connections_, std::back_inserter(pingable_connections),
+ [this, now](Connection* conn) { return IsPingable(conn, now); });
+ auto iter = absl::c_max_element(pingable_connections,
+ [this](Connection* conn1, Connection* conn2) {
+ // Some implementations of max_element
+ // compare an element with itself.
+ if (conn1 == conn2) {
+ return false;
+ }
+ return MorePingable(conn1, conn2) == conn2;
+ });
if (iter != pingable_connections.end()) {
return *iter;
}
@@ -2289,11 +2281,10 @@
// use it.
// Remove this connection from the list.
- std::vector<Connection*>::iterator iter =
- std::find(connections_.begin(), connections_.end(), connection);
+ auto iter = absl::c_find(connections_, connection);
RTC_DCHECK(iter != connections_.end());
- pinged_connections_.erase(*iter);
- unpinged_connections_.erase(*iter);
+ pinged_connections_.erase(connection);
+ unpinged_connections_.erase(connection);
connections_.erase(iter);
RTC_LOG(LS_INFO) << ToString() << ": Removed connection " << connection
@@ -2367,7 +2358,7 @@
}
bool P2PTransportChannel::PrunePort(PortInterface* port) {
- auto it = std::find(ports_.begin(), ports_.end(), port);
+ auto it = absl::c_find(ports_, port);
// Don't need to do anything if the port has been deleted from the port list.
if (it == ports_.end()) {
return false;
@@ -2487,10 +2478,9 @@
// During the initial state when nothing has been pinged yet, return the first
// one in the ordered |connections_|.
- return *(std::find_if(connections_.begin(), connections_.end(),
- [conn1, conn2](Connection* conn) {
- return conn == conn1 || conn == conn2;
- }));
+ return *(absl::c_find_if(connections_, [conn1, conn2](Connection* conn) {
+ return conn == conn1 || conn == conn2;
+ }));
}
void P2PTransportChannel::SetWritable(bool writable) {
diff --git a/p2p/base/p2p_transport_channel_unittest.cc b/p2p/base/p2p_transport_channel_unittest.cc
index 10b07b1..acd66c1 100644
--- a/p2p/base/p2p_transport_channel_unittest.cc
+++ b/p2p/base/p2p_transport_channel_unittest.cc
@@ -8,7 +8,6 @@
* be found in the AUTHORS file in the root of the source tree.
*/
-#include <algorithm>
#include <list>
#include <memory>
@@ -44,6 +43,7 @@
using rtc::SocketAddress;
using ::testing::_;
using ::testing::Assign;
+using ::testing::Contains;
using ::testing::DoAll;
using ::testing::InSequence;
using ::testing::InvokeWithoutArgs;
@@ -1989,12 +1989,10 @@
// pooled sessions.
auto pooled_ports_1 = pooled_session_1->ReadyPorts();
auto pooled_ports_2 = pooled_session_2->ReadyPorts();
- EXPECT_NE(pooled_ports_1.end(),
- std::find(pooled_ports_1.begin(), pooled_ports_1.end(),
- ep1_ch1()->selected_connection()->port()));
- EXPECT_NE(pooled_ports_2.end(),
- std::find(pooled_ports_2.begin(), pooled_ports_2.end(),
- ep2_ch1()->selected_connection()->port()));
+ EXPECT_THAT(pooled_ports_1,
+ Contains(ep1_ch1()->selected_connection()->port()));
+ EXPECT_THAT(pooled_ports_2,
+ Contains(ep2_ch1()->selected_connection()->port()));
}
// Test that a connection succeeds when the P2PTransportChannel uses a pooled
@@ -2034,12 +2032,10 @@
// pooled sessions.
auto pooled_ports_1 = pooled_session_1->ReadyPorts();
auto pooled_ports_2 = pooled_session_2->ReadyPorts();
- EXPECT_NE(pooled_ports_1.end(),
- std::find(pooled_ports_1.begin(), pooled_ports_1.end(),
- ep1_ch1()->selected_connection()->port()));
- EXPECT_NE(pooled_ports_2.end(),
- std::find(pooled_ports_2.begin(), pooled_ports_2.end(),
- ep2_ch1()->selected_connection()->port()));
+ EXPECT_THAT(pooled_ports_1,
+ Contains(ep1_ch1()->selected_connection()->port()));
+ EXPECT_THAT(pooled_ports_2,
+ Contains(ep2_ch1()->selected_connection()->port()));
}
// Test that when the "presume_writable_when_fully_relayed" flag is set to
diff --git a/p2p/base/port.cc b/p2p/base/port.cc
index 1977408..238becb 100644
--- a/p2p/base/port.cc
+++ b/p2p/base/port.cc
@@ -16,6 +16,7 @@
#include <utility>
#include <vector>
+#include "absl/algorithm/container.h"
#include "absl/memory/memory.h"
#include "absl/strings/match.h"
#include "p2p/base/port_allocator.h"
@@ -1526,8 +1527,8 @@
// So if we're not already, become writable. We may be bringing a pruned
// connection back to life, but if we don't really want it, we can always
// prune it again.
- auto iter = std::find_if(
- pings_since_last_response_.begin(), pings_since_last_response_.end(),
+ auto iter = absl::c_find_if(
+ pings_since_last_response_,
[request_id](const SentPing& ping) { return ping.id == request_id; });
if (iter != pings_since_last_response_.end() &&
iter->nomination > acked_nomination_) {
diff --git a/p2p/base/relay_server.cc b/p2p/base/relay_server.cc
index 80b51b2..7214fa1 100644
--- a/p2p/base/relay_server.cc
+++ b/p2p/base/relay_server.cc
@@ -17,6 +17,7 @@
#include <algorithm>
#include <utility>
+#include "absl/algorithm/container.h"
#include "rtc_base/async_tcp_socket.h"
#include "rtc_base/checks.h"
#include "rtc_base/helpers.h"
@@ -107,16 +108,13 @@
}
void RelayServer::AddInternalSocket(rtc::AsyncPacketSocket* socket) {
- RTC_DCHECK(internal_sockets_.end() == std::find(internal_sockets_.begin(),
- internal_sockets_.end(),
- socket));
+ RTC_DCHECK(!absl::c_linear_search(internal_sockets_, socket));
internal_sockets_.push_back(socket);
socket->SignalReadPacket.connect(this, &RelayServer::OnInternalPacket);
}
void RelayServer::RemoveInternalSocket(rtc::AsyncPacketSocket* socket) {
- auto iter =
- std::find(internal_sockets_.begin(), internal_sockets_.end(), socket);
+ auto iter = absl::c_find(internal_sockets_, socket);
RTC_DCHECK(iter != internal_sockets_.end());
internal_sockets_.erase(iter);
removed_sockets_.push_back(socket);
@@ -124,16 +122,13 @@
}
void RelayServer::AddExternalSocket(rtc::AsyncPacketSocket* socket) {
- RTC_DCHECK(external_sockets_.end() == std::find(external_sockets_.begin(),
- external_sockets_.end(),
- socket));
+ RTC_DCHECK(!absl::c_linear_search(external_sockets_, socket));
external_sockets_.push_back(socket);
socket->SignalReadPacket.connect(this, &RelayServer::OnExternalPacket);
}
void RelayServer::RemoveExternalSocket(rtc::AsyncPacketSocket* socket) {
- auto iter =
- std::find(external_sockets_.begin(), external_sockets_.end(), socket);
+ auto iter = absl::c_find(external_sockets_, socket);
RTC_DCHECK(iter != external_sockets_.end());
external_sockets_.erase(iter);
removed_sockets_.push_back(socket);
diff --git a/p2p/base/tcp_port.cc b/p2p/base/tcp_port.cc
index af49389..f98322a 100644
--- a/p2p/base/tcp_port.cc
+++ b/p2p/base/tcp_port.cc
@@ -67,9 +67,9 @@
#include "p2p/base/tcp_port.h"
#include <errno.h>
-#include <algorithm>
#include <vector>
+#include "absl/algorithm/container.h"
#include "p2p/base/p2p_constants.h"
#include "rtc_base/checks.h"
#include "rtc_base/ip_address.h"
@@ -357,13 +357,10 @@
RTC_LOG(LS_VERBOSE) << ToString() << ": socket ipaddr: "
<< socket_->GetLocalAddress().ToString()
<< ", port() Network:" << port->Network()->ToString();
- const std::vector<rtc::InterfaceAddress>& desired_addresses =
- port_->Network()->GetIPs();
- RTC_DCHECK(std::find_if(desired_addresses.begin(), desired_addresses.end(),
- [this](const rtc::InterfaceAddress& addr) {
- return socket_->GetLocalAddress().ipaddr() ==
- addr;
- }) != desired_addresses.end());
+ RTC_DCHECK(absl::c_any_of(
+ port_->Network()->GetIPs(), [this](const rtc::InterfaceAddress& addr) {
+ return socket_->GetLocalAddress().ipaddr() == addr;
+ }));
ConnectSocketSignals(socket);
}
}
@@ -444,12 +441,10 @@
// Note that, aside from minor differences in log statements, this logic is
// identical to that in TurnPort.
const rtc::SocketAddress& socket_address = socket->GetLocalAddress();
- const std::vector<rtc::InterfaceAddress>& desired_addresses =
- port_->Network()->GetIPs();
- if (std::find_if(desired_addresses.begin(), desired_addresses.end(),
- [socket_address](const rtc::InterfaceAddress& addr) {
- return socket_address.ipaddr() == addr;
- }) != desired_addresses.end()) {
+ if (absl::c_any_of(port_->Network()->GetIPs(),
+ [socket_address](const rtc::InterfaceAddress& addr) {
+ return socket_address.ipaddr() == addr;
+ })) {
RTC_LOG(LS_VERBOSE) << ToString() << ": Connection established to "
<< socket->GetRemoteAddress().ToSensitiveString();
} else {
diff --git a/p2p/base/transport_description.h b/p2p/base/transport_description.h
index c3c14a6..b13defb 100644
--- a/p2p/base/transport_description.h
+++ b/p2p/base/transport_description.h
@@ -11,11 +11,11 @@
#ifndef P2P_BASE_TRANSPORT_DESCRIPTION_H_
#define P2P_BASE_TRANSPORT_DESCRIPTION_H_
-#include <algorithm>
#include <memory>
#include <string>
#include <vector>
+#include "absl/algorithm/container.h"
#include "p2p/base/p2p_constants.h"
#include "rtc_base/ssl_fingerprint.h"
@@ -104,8 +104,7 @@
// TODO(deadbeef): Rename to HasIceOption, etc.
bool HasOption(const std::string& option) const {
- return (std::find(transport_options.begin(), transport_options.end(),
- option) != transport_options.end());
+ return absl::c_linear_search(transport_options, option);
}
void AddOption(const std::string& option) {
transport_options.push_back(option);
diff --git a/p2p/base/transport_description_factory_unittest.cc b/p2p/base/transport_description_factory_unittest.cc
index af91a21..cf04964 100644
--- a/p2p/base/transport_description_factory_unittest.cc
+++ b/p2p/base/transport_description_factory_unittest.cc
@@ -9,7 +9,6 @@
*/
#include <stddef.h>
-#include <algorithm>
#include <memory>
#include <string>
#include <vector>
@@ -22,11 +21,14 @@
#include "rtc_base/ssl_certificate.h"
#include "rtc_base/ssl_fingerprint.h"
#include "rtc_base/ssl_identity.h"
+#include "test/gmock.h"
#include "test/gtest.h"
-using cricket::TransportDescriptionFactory;
using cricket::TransportDescription;
+using cricket::TransportDescriptionFactory;
using cricket::TransportOptions;
+using ::testing::Contains;
+using ::testing::Not;
class TransportDescriptionFactoryTest : public testing::Test {
public:
@@ -116,31 +118,30 @@
// The initial offer / answer exchange.
std::unique_ptr<TransportDescription> offer =
f1_.CreateOffer(options, nullptr, &ice_credentials_);
+ ASSERT_TRUE(offer);
+ EXPECT_THAT(offer->transport_options, Not(Contains("renomination")));
+
std::unique_ptr<TransportDescription> answer = f2_.CreateAnswer(
offer.get(), options, true, nullptr, &ice_credentials_);
- VerifyRenomination(offer.get(), false);
- VerifyRenomination(answer.get(), false);
+ ASSERT_TRUE(answer);
+ EXPECT_THAT(answer->transport_options, Not(Contains("renomination")));
options.enable_ice_renomination = true;
std::unique_ptr<TransportDescription> renomination_offer =
f1_.CreateOffer(options, offer.get(), &ice_credentials_);
- VerifyRenomination(renomination_offer.get(), true);
+ ASSERT_TRUE(renomination_offer);
+ EXPECT_THAT(renomination_offer->transport_options,
+ Contains("renomination"));
std::unique_ptr<TransportDescription> renomination_answer =
f2_.CreateAnswer(renomination_offer.get(), options, true, answer.get(),
&ice_credentials_);
- VerifyRenomination(renomination_answer.get(), true);
+ ASSERT_TRUE(renomination_answer);
+ EXPECT_THAT(renomination_answer->transport_options,
+ Contains("renomination"));
}
protected:
- void VerifyRenomination(TransportDescription* desc,
- bool renomination_expected) {
- ASSERT_TRUE(desc != nullptr);
- std::vector<std::string>& options = desc->transport_options;
- auto iter = std::find(options.begin(), options.end(), "renomination");
- EXPECT_EQ(renomination_expected, iter != options.end());
- }
-
void SetDtls(bool dtls) {
if (dtls) {
f1_.set_secure(cricket::SEC_ENABLED);
diff --git a/p2p/base/turn_port.cc b/p2p/base/turn_port.cc
index bfaf45b..6a93090 100644
--- a/p2p/base/turn_port.cc
+++ b/p2p/base/turn_port.cc
@@ -10,11 +10,11 @@
#include "p2p/base/turn_port.h"
-#include <algorithm>
#include <functional>
#include <utility>
#include <vector>
+#include "absl/algorithm/container.h"
#include "absl/memory/memory.h"
#include "absl/types/optional.h"
#include "p2p/base/stun.h"
@@ -434,12 +434,10 @@
// Note that, aside from minor differences in log statements, this logic is
// identical to that in TcpPort.
const rtc::SocketAddress& socket_address = socket->GetLocalAddress();
- const std::vector<rtc::InterfaceAddress>& desired_addresses =
- Network()->GetIPs();
- if (std::find_if(desired_addresses.begin(), desired_addresses.end(),
- [socket_address](const rtc::InterfaceAddress& addr) {
- return socket_address.ipaddr() == addr;
- }) == desired_addresses.end()) {
+ if (absl::c_none_of(Network()->GetIPs(),
+ [socket_address](const rtc::InterfaceAddress& addr) {
+ return socket_address.ipaddr() == addr;
+ })) {
if (socket->GetLocalAddress().IsLoopbackIP()) {
RTC_LOG(LS_WARNING) << "Socket is bound to the address:"
<< socket_address.ipaddr().ToString()
@@ -1121,30 +1119,26 @@
}
bool TurnPort::HasPermission(const rtc::IPAddress& ipaddr) const {
- return (std::find_if(entries_.begin(), entries_.end(),
- [&ipaddr](const TurnEntry* e) {
- return e->address().ipaddr() == ipaddr;
- }) != entries_.end());
+ return absl::c_any_of(entries_, [&ipaddr](const TurnEntry* e) {
+ return e->address().ipaddr() == ipaddr;
+ });
}
TurnEntry* TurnPort::FindEntry(const rtc::SocketAddress& addr) const {
- auto it = std::find_if(
- entries_.begin(), entries_.end(),
- [&addr](const TurnEntry* e) { return e->address() == addr; });
+ auto it = absl::c_find_if(
+ entries_, [&addr](const TurnEntry* e) { return e->address() == addr; });
return (it != entries_.end()) ? *it : NULL;
}
TurnEntry* TurnPort::FindEntry(int channel_id) const {
- auto it = std::find_if(entries_.begin(), entries_.end(),
- [&channel_id](const TurnEntry* e) {
- return e->channel_id() == channel_id;
- });
+ auto it = absl::c_find_if(entries_, [&channel_id](const TurnEntry* e) {
+ return e->channel_id() == channel_id;
+ });
return (it != entries_.end()) ? *it : NULL;
}
bool TurnPort::EntryExists(TurnEntry* e) {
- auto it = std::find(entries_.begin(), entries_.end(), e);
- return it != entries_.end();
+ return absl::c_linear_search(entries_, e);
}
bool TurnPort::CreateOrRefreshEntry(const rtc::SocketAddress& addr,
diff --git a/p2p/base/turn_server.cc b/p2p/base/turn_server.cc
index 62ef5d9..1b2903d 100644
--- a/p2p/base/turn_server.cc
+++ b/p2p/base/turn_server.cc
@@ -13,6 +13,7 @@
#include <tuple> // for std::tie
#include <utility>
+#include "absl/algorithm/container.h"
#include "absl/memory/memory.h"
#include "p2p/base/async_stun_tcp_socket.h"
#include "p2p/base/packet_socket_factory.h"
@@ -959,14 +960,13 @@
}
void TurnServerAllocation::OnPermissionDestroyed(Permission* perm) {
- PermissionList::iterator it = std::find(perms_.begin(), perms_.end(), perm);
+ auto it = absl::c_find(perms_, perm);
RTC_DCHECK(it != perms_.end());
perms_.erase(it);
}
void TurnServerAllocation::OnChannelDestroyed(Channel* channel) {
- ChannelList::iterator it =
- std::find(channels_.begin(), channels_.end(), channel);
+ auto it = absl::c_find(channels_, channel);
RTC_DCHECK(it != channels_.end());
channels_.erase(it);
}
diff --git a/p2p/client/basic_port_allocator.cc b/p2p/client/basic_port_allocator.cc
index 6dc5dfc..83c8bf2 100644
--- a/p2p/client/basic_port_allocator.cc
+++ b/p2p/client/basic_port_allocator.cc
@@ -16,6 +16,7 @@
#include <string>
#include <vector>
+#include "absl/algorithm/container.h"
#include "p2p/base/basic_packet_socket_factory.h"
#include "p2p/base/port.h"
#include "p2p/base/relay_port.h"
@@ -313,13 +314,12 @@
if (!port.has_pairable_candidate()) {
continue;
}
- const auto& candidates = port.port()->Candidates();
// Setting a filter may cause a ready port to become non-ready
// if it no longer has any pairable candidates.
- if (!std::any_of(candidates.begin(), candidates.end(),
- [this, &port](const Candidate& candidate) {
- return CandidatePairable(candidate, port.port());
- })) {
+ if (absl::c_none_of(port.port()->Candidates(),
+ [this, &port](const Candidate& candidate) {
+ return CandidatePairable(candidate, port.port());
+ })) {
port.set_has_pairable_candidate(false);
}
}
@@ -417,8 +417,7 @@
// regathers ports and candidates.
for (AllocationSequence* sequence : sequences_) {
if (!sequence->network_failed() &&
- std::find(failed_networks.begin(), failed_networks.end(),
- sequence->network()) != failed_networks.end()) {
+ absl::c_linear_search(failed_networks, sequence->network())) {
sequence->set_network_failed();
}
}
@@ -553,18 +552,17 @@
}
// Check that all port allocation sequences are complete (not running).
- if (std::any_of(sequences_.begin(), sequences_.end(),
- [](const AllocationSequence* sequence) {
- return sequence->state() == AllocationSequence::kRunning;
- })) {
+ if (absl::c_any_of(sequences_, [](const AllocationSequence* sequence) {
+ return sequence->state() == AllocationSequence::kRunning;
+ })) {
return false;
}
// If all allocated ports are no longer gathering, session must have got all
// expected candidates. Session will trigger candidates allocation complete
// signal.
- return std::none_of(ports_.begin(), ports_.end(),
- [](const PortData& port) { return port.inprogress(); });
+ return absl::c_none_of(
+ ports_, [](const PortData& port) { return port.inprogress(); });
}
void BasicPortAllocatorSession::OnMessage(rtc::Message* message) {
@@ -828,8 +826,7 @@
// Mark the sequence as "network failed" if its network is not in
// |networks|.
if (!sequence->network_failed() &&
- std::find(networks.begin(), networks.end(), sequence->network()) ==
- networks.end()) {
+ !absl::c_linear_search(networks, sequence->network())) {
sequence->OnNetworkFailed();
failed_networks.push_back(sequence->network());
}
@@ -1159,8 +1156,7 @@
std::vector<PortData*> unpruned_ports;
for (PortData& port : ports_) {
if (!port.pruned() &&
- std::find(networks.begin(), networks.end(),
- port.sequence()->network()) != networks.end()) {
+ absl::c_linear_search(networks, port.sequence()->network())) {
unpruned_ports.push_back(&port);
}
}
@@ -1263,18 +1259,20 @@
// This can happen if, say, there's a network change event right before an
// application-triggered ICE restart. Hopefully this problem will just go
// away if we get rid of the gathering "phases" though, which is planned.
- if (std::any_of(session_->ports_.begin(), session_->ports_.end(),
- [this](const BasicPortAllocatorSession::PortData& p) {
- return p.port()->Network() == network_ &&
- p.port()->GetProtocol() == PROTO_UDP && !p.error();
- })) {
+ if (absl::c_any_of(session_->ports_,
+ [this](const BasicPortAllocatorSession::PortData& p) {
+ return p.port()->Network() == network_ &&
+ p.port()->GetProtocol() == PROTO_UDP &&
+ !p.error();
+ })) {
*flags |= PORTALLOCATOR_DISABLE_UDP;
}
- if (std::any_of(session_->ports_.begin(), session_->ports_.end(),
- [this](const BasicPortAllocatorSession::PortData& p) {
- return p.port()->Network() == network_ &&
- p.port()->GetProtocol() == PROTO_TCP && !p.error();
- })) {
+ if (absl::c_any_of(session_->ports_,
+ [this](const BasicPortAllocatorSession::PortData& p) {
+ return p.port()->Network() == network_ &&
+ p.port()->GetProtocol() == PROTO_TCP &&
+ !p.error();
+ })) {
*flags |= PORTALLOCATOR_DISABLE_TCP;
}
@@ -1619,7 +1617,7 @@
return;
}
- auto it = std::find(relay_ports_.begin(), relay_ports_.end(), port);
+ auto it = absl::c_find(relay_ports_, port);
if (it != relay_ports_.end()) {
relay_ports_.erase(it);
} else {
diff --git a/p2p/client/basic_port_allocator_unittest.cc b/p2p/client/basic_port_allocator_unittest.cc
index 5ecb81b..e9fd506 100644
--- a/p2p/client/basic_port_allocator_unittest.cc
+++ b/p2p/client/basic_port_allocator_unittest.cc
@@ -8,10 +8,10 @@
* be found in the AUTHORS file in the root of the source tree.
*/
-#include <algorithm>
#include <memory>
#include <ostream> // no-presubmit-check TODO(webrtc:8982)
+#include "absl/algorithm/container.h"
#include "p2p/base/basic_packet_socket_factory.h"
#include "p2p/base/p2p_constants.h"
#include "p2p/base/stun_port.h"
@@ -41,10 +41,13 @@
#include "rtc_base/thread.h"
#include "rtc_base/virtual_socket_server.h"
#include "system_wrappers/include/metrics.h"
+#include "test/gmock.h"
#include "test/gtest.h"
using rtc::IPAddress;
using rtc::SocketAddress;
+using ::testing::Contains;
+using ::testing::Not;
#define MAYBE_SKIP_IPV4 \
if (!rtc::HasIPv4Enabled()) { \
@@ -310,9 +313,8 @@
const std::string& type,
ProtocolType protocol,
const SocketAddress& client_addr) {
- return std::count_if(
- ports.begin(), ports.end(),
- [type, protocol, client_addr](PortInterface* port) {
+ return absl::c_count_if(
+ ports, [type, protocol, client_addr](PortInterface* port) {
return port->Type() == type && port->GetProtocol() == protocol &&
port->Network()->GetBestIP() == client_addr.ipaddr();
});
@@ -322,11 +324,11 @@
const std::string& type,
const std::string& proto,
const SocketAddress& addr) {
- return std::count_if(candidates.begin(), candidates.end(),
- [type, proto, addr](const Candidate& c) {
- return c.type() == type && c.protocol() == proto &&
- AddressMatch(c.address(), addr);
- });
+ return absl::c_count_if(
+ candidates, [type, proto, addr](const Candidate& c) {
+ return c.type() == type && c.protocol() == proto &&
+ AddressMatch(c.address(), addr);
+ });
}
// Find a candidate and return it.
@@ -335,11 +337,11 @@
const std::string& proto,
const SocketAddress& addr,
Candidate* found) {
- auto it = std::find_if(candidates.begin(), candidates.end(),
- [type, proto, addr](const Candidate& c) {
- return c.type() == type && c.protocol() == proto &&
- AddressMatch(c.address(), addr);
- });
+ auto it =
+ absl::c_find_if(candidates, [type, proto, addr](const Candidate& c) {
+ return c.type() == type && c.protocol() == proto &&
+ AddressMatch(c.address(), addr);
+ });
if (it != candidates.end() && found) {
*found = *it;
}
@@ -361,14 +363,12 @@
const std::string& proto,
const SocketAddress& addr,
const SocketAddress& related_addr) {
- auto it =
- std::find_if(candidates.begin(), candidates.end(),
- [type, proto, addr, related_addr](const Candidate& c) {
- return c.type() == type && c.protocol() == proto &&
- AddressMatch(c.address(), addr) &&
- AddressMatch(c.related_address(), related_addr);
- });
- return it != candidates.end();
+ return absl::c_any_of(
+ candidates, [type, proto, addr, related_addr](const Candidate& c) {
+ return c.type() == type && c.protocol() == proto &&
+ AddressMatch(c.address(), addr) &&
+ AddressMatch(c.related_address(), related_addr);
+ });
}
static bool CheckPort(const rtc::SocketAddress& addr,
@@ -414,8 +414,7 @@
ports_.push_back(port);
// Make sure the new port is added to ReadyPorts.
auto ready_ports = ses->ReadyPorts();
- EXPECT_NE(ready_ports.end(),
- std::find(ready_ports.begin(), ready_ports.end(), port));
+ EXPECT_THAT(ready_ports, Contains(port));
}
void OnPortsPruned(PortAllocatorSession* ses,
const std::vector<PortInterface*>& pruned_ports) {
@@ -425,8 +424,7 @@
for (PortInterface* port : pruned_ports) {
new_end = std::remove(ports_.begin(), new_end, port);
// Make sure the pruned port is not in ReadyPorts.
- EXPECT_EQ(ready_ports.end(),
- std::find(ready_ports.begin(), ready_ports.end(), port));
+ EXPECT_THAT(ready_ports, Not(Contains(port)));
}
ports_.erase(new_end, ports_.end());
}
@@ -442,9 +440,7 @@
// Make sure the new candidates are added to Candidates.
auto ses_candidates = ses->ReadyCandidates();
for (const Candidate& candidate : candidates) {
- EXPECT_NE(
- ses_candidates.end(),
- std::find(ses_candidates.begin(), ses_candidates.end(), candidate));
+ EXPECT_THAT(ses_candidates, Contains(candidate));
}
}