diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn index 35f1f61c48..27a7471b12 100644 --- a/rtc_base/BUILD.gn +++ b/rtc_base/BUILD.gn @@ -620,6 +620,7 @@ rtc_static_library("rtc_numerics") { ":checks", ":rtc_base_approved", ":safe_compare", + "//third_party/abseil-cpp/absl/algorithm:container", "//third_party/abseil-cpp/absl/types:optional", ] } @@ -800,6 +801,7 @@ rtc_static_library("rtc_base") { "system:file_wrapper", "third_party/base64", "third_party/sigslot", + "//third_party/abseil-cpp/absl/algorithm:container", "//third_party/abseil-cpp/absl/memory", "//third_party/abseil-cpp/absl/strings", "//third_party/abseil-cpp/absl/types:optional", @@ -1107,6 +1109,7 @@ rtc_source_set("rtc_base_tests_utils") { ":rtc_base", "../api/units:time_delta", "third_party/sigslot", + "//third_party/abseil-cpp/absl/algorithm:container", "//third_party/abseil-cpp/absl/memory", ] } @@ -1340,6 +1343,7 @@ if (rtc_include_tests) { ":rtc_base_tests_main", ":rtc_numerics", "../test:test_support", + "//third_party/abseil-cpp/absl/algorithm:container", ] } @@ -1414,6 +1418,7 @@ if (rtc_include_tests) { "../test:test_support", "synchronization:synchronization_unittests", "third_party/sigslot", + "//third_party/abseil-cpp/absl/algorithm:container", "//third_party/abseil-cpp/absl/memory", "//third_party/abseil-cpp/absl/types:optional", ] diff --git a/rtc_base/file_rotating_stream.cc b/rtc_base/file_rotating_stream.cc index 86b852fdcf..80c9edf7c8 100644 --- a/rtc_base/file_rotating_stream.cc +++ b/rtc_base/file_rotating_stream.cc @@ -10,7 +10,6 @@ #include "rtc_base/file_rotating_stream.h" -#include #include #include #include @@ -24,6 +23,7 @@ #include #endif // WEBRTC_WIN +#include "absl/algorithm/container.h" #include "absl/strings/match.h" #include "absl/types/optional.h" #include "rtc_base/checks.h" @@ -391,8 +391,7 @@ FileRotatingStreamReader::FileRotatingStreamReader( // Plain sort of the file names would sort by age, i.e., oldest last. Using // std::greater gives us the desired chronological older, oldest first. - std::sort(file_names_.begin(), file_names_.end(), - std::greater()); + absl::c_sort(file_names_, std::greater()); } FileRotatingStreamReader::~FileRotatingStreamReader() = default; diff --git a/rtc_base/firewall_socket_server.cc b/rtc_base/firewall_socket_server.cc index ec5a85709e..f73da99ab7 100644 --- a/rtc_base/firewall_socket_server.cc +++ b/rtc_base/firewall_socket_server.cc @@ -13,9 +13,9 @@ #include #include #include -#include #include +#include "absl/algorithm/container.h" #include "rtc_base/async_socket.h" #include "rtc_base/checks.h" #include "rtc_base/logging.h" @@ -198,8 +198,7 @@ void FirewallSocketServer::SetUnbindableIps( } bool FirewallSocketServer::IsBindableIp(const rtc::IPAddress& ip) { - return std::find(unbindable_ips_.begin(), unbindable_ips_.end(), ip) == - unbindable_ips_.end(); + return !absl::c_linear_search(unbindable_ips_, ip); } Socket* FirewallSocketServer::CreateSocket(int family, int type) { diff --git a/rtc_base/message_queue.cc b/rtc_base/message_queue.cc index abb01b3e9d..f827db47f6 100644 --- a/rtc_base/message_queue.cc +++ b/rtc_base/message_queue.cc @@ -7,10 +7,10 @@ * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ -#include #include #include +#include "absl/algorithm/container.h" #include "rtc_base/atomic_ops.h" #include "rtc_base/checks.h" #include "rtc_base/logging.h" @@ -78,8 +78,7 @@ void MessageQueueManager::RemoveInternal(MessageQueue* message_queue) { // Prevent changes while the list of message queues is processed. RTC_DCHECK_EQ(processing_, 0); std::vector::iterator iter; - iter = std::find(message_queues_.begin(), message_queues_.end(), - message_queue); + iter = absl::c_find(message_queues_, message_queue); if (iter != message_queues_.end()) { message_queues_.erase(iter); } diff --git a/rtc_base/network.cc b/rtc_base/network.cc index 9c9bc57770..6dddbc0caa 100644 --- a/rtc_base/network.cc +++ b/rtc_base/network.cc @@ -31,9 +31,11 @@ #include -#include #include +#include "absl/algorithm/container.h" +#include "absl/strings/match.h" +#include "absl/strings/string_view.h" #include "rtc_base/checks.h" #include "rtc_base/logging.h" #include "rtc_base/network_monitor.h" @@ -187,14 +189,13 @@ std::string MakeNetworkKey(const std::string& name, } // Test if the network name matches the type pattern, e.g. eth0. The // matching is case-sensitive. -bool MatchTypeNameWithIndexPattern(const std::string& network_name, - const std::string& type_name) { - if (network_name.find(type_name) != 0) { +bool MatchTypeNameWithIndexPattern(absl::string_view network_name, + absl::string_view type_name) { + if (!absl::StartsWith(network_name, type_name)) { return false; } - return std::find_if(network_name.begin() + type_name.size(), - network_name.end(), - [](char c) { return !isdigit(c); }) == network_name.end(); + return absl::c_none_of(network_name.substr(type_name.size()), + [](char c) { return !isdigit(c); }); } // A cautious note that this method may not provide an accurate adapter type @@ -319,7 +320,7 @@ void NetworkManagerBase::MergeNetworkList(const NetworkList& new_networks, // with the same key. std::map consolidated_address_list; NetworkList list(new_networks); - std::sort(list.begin(), list.end(), CompareNetworks); + absl::c_sort(list, CompareNetworks); // First, build a set of network-keys to the ipaddresses. for (Network* network : list) { bool might_add_to_merged_list = false; @@ -400,11 +401,10 @@ void NetworkManagerBase::MergeNetworkList(const NetworkList& new_networks, for (const auto& kv : networks_map_) { Network* network = kv.second; // If |network| is in the newly generated |networks_|, it is active. - bool found = std::find(networks_.begin(), networks_.end(), network) != - networks_.end(); + bool found = absl::c_linear_search(networks_, network); network->set_active(found); } - std::sort(networks_.begin(), networks_.end(), SortNetworks); + absl::c_sort(networks_, SortNetworks); // Now network interfaces are sorted, we should set the preference value // for each of the interfaces we are planning to use. // Preference order of network interfaces might have changed from previous @@ -459,10 +459,9 @@ Network* NetworkManagerBase::GetNetworkFromAddress( const rtc::IPAddress& ip) const { for (Network* network : networks_) { const auto& ips = network->GetIPs(); - if (std::find_if(ips.begin(), ips.end(), - [ip](const InterfaceAddress& existing_ip) { - return ip == static_cast(existing_ip); - }) != ips.end()) { + if (absl::c_any_of(ips, [&](const InterfaceAddress& existing_ip) { + return ip == static_cast(existing_ip); + })) { return network; } } @@ -1004,7 +1003,7 @@ bool Network::SetIPs(const std::vector& ips, bool changed) { changed = changed || ips.size() != ips_.size(); if (!changed) { for (const InterfaceAddress& ip : ips) { - if (std::find(ips_.begin(), ips_.end(), ip) == ips_.end()) { + if (!absl::c_linear_search(ips_, ip)) { changed = true; break; } diff --git a/rtc_base/network_unittest.cc b/rtc_base/network_unittest.cc index 1ba573e935..08ffb6e909 100644 --- a/rtc_base/network_unittest.cc +++ b/rtc_base/network_unittest.cc @@ -24,10 +24,16 @@ #include "rtc_base/ifaddrs_converter.h" #endif // defined(WEBRTC_POSIX) #include "rtc_base/gunit.h" +#include "test/gmock.h" #if defined(WEBRTC_WIN) #include "rtc_base/logging.h" // For RTC_LOG_GLE #endif +using ::testing::Contains; +using ::testing::Not; +using ::testing::UnorderedElementsAre; +using ::testing::UnorderedElementsAreArray; + namespace rtc { namespace { @@ -478,12 +484,8 @@ TEST_F(NetworkTest, TestIPv6MergeNetworkList) { EXPECT_EQ(stats.ipv4_network_count, 0); NetworkManager::NetworkList list; manager.GetNetworks(&list); - EXPECT_EQ(original_list.size(), list.size()); // Verify that the original members are in the merged list. - for (NetworkManager::NetworkList::iterator it = original_list.begin(); - it != original_list.end(); ++it) { - EXPECT_NE(list.end(), std::find(list.begin(), list.end(), *it)); - } + EXPECT_THAT(list, UnorderedElementsAreArray(original_list)); } // Tests that when two network lists that describe the same set of networks are @@ -506,18 +508,11 @@ TEST_F(NetworkTest, TestNoChangeMerge) { EXPECT_FALSE(changed); NetworkManager::NetworkList resulting_list; manager.GetNetworks(&resulting_list); - EXPECT_EQ(original_list.size(), resulting_list.size()); // Verify that the original members are in the merged list. - for (NetworkManager::NetworkList::iterator it = original_list.begin(); - it != original_list.end(); ++it) { - EXPECT_NE(resulting_list.end(), - std::find(resulting_list.begin(), resulting_list.end(), *it)); - } + EXPECT_THAT(resulting_list, UnorderedElementsAreArray(original_list)); // Doublecheck that the new networks aren't in the list. - for (NetworkManager::NetworkList::iterator it = second_list.begin(); - it != second_list.end(); ++it) { - EXPECT_EQ(resulting_list.end(), - std::find(resulting_list.begin(), resulting_list.end(), *it)); + for (const Network* network : second_list) { + EXPECT_THAT(resulting_list, Not(Contains(network))); } } @@ -554,7 +549,7 @@ TEST_F(NetworkTest, MergeWithChangedIP) { manager.GetNetworks(&list); EXPECT_EQ(original_list.size(), list.size()); // Make sure the original network is still in the merged list. - EXPECT_NE(list.end(), std::find(list.begin(), list.end(), network_to_change)); + EXPECT_THAT(list, Contains(network_to_change)); EXPECT_EQ(changed_ip, network_to_change->GetIPs().at(0)); } @@ -598,18 +593,12 @@ TEST_F(NetworkTest, TestMultipleIPMergeNetworkList) { // This should be the same network object as before. EXPECT_EQ((*it), original_list[2]); // But with two addresses now. - EXPECT_EQ(2U, (*it)->GetIPs().size()); - EXPECT_NE((*it)->GetIPs().end(), - std::find((*it)->GetIPs().begin(), (*it)->GetIPs().end(), - InterfaceAddress(check_ip))); - EXPECT_NE((*it)->GetIPs().end(), - std::find((*it)->GetIPs().begin(), (*it)->GetIPs().end(), - InterfaceAddress(ip))); + EXPECT_THAT((*it)->GetIPs(), + UnorderedElementsAre(InterfaceAddress(check_ip), + InterfaceAddress(ip))); } else { // Check the IP didn't get added anywhere it wasn't supposed to. - EXPECT_EQ((*it)->GetIPs().end(), - std::find((*it)->GetIPs().begin(), (*it)->GetIPs().end(), - InterfaceAddress(ip))); + EXPECT_THAT((*it)->GetIPs(), Not(Contains(InterfaceAddress(ip)))); } } } @@ -650,9 +639,7 @@ TEST_F(NetworkTest, TestMultiplePublicNetworksOnOneInterfaceMerge) { EXPECT_EQ(ip, (*it)->GetIPs().at(0)); } else { // Check the IP didn't get added anywhere it wasn't supposed to. - EXPECT_EQ((*it)->GetIPs().end(), - std::find((*it)->GetIPs().begin(), (*it)->GetIPs().end(), - InterfaceAddress(ip))); + EXPECT_THAT((*it)->GetIPs(), Not(Contains(InterfaceAddress(ip)))); } } } diff --git a/rtc_base/numerics/percentile_filter_unittest.cc b/rtc_base/numerics/percentile_filter_unittest.cc index 8ed6d67960..456cb4cac2 100644 --- a/rtc_base/numerics/percentile_filter_unittest.cc +++ b/rtc_base/numerics/percentile_filter_unittest.cc @@ -9,11 +9,12 @@ */ #include -#include +#include #include #include #include +#include "absl/algorithm/container.h" #include "rtc_base/constructor_magic.h" #include "rtc_base/numerics/percentile_filter.h" #include "test/gtest.h" @@ -110,14 +111,13 @@ TEST_P(PercentileFilterTest, DuplicateElements) { } TEST_P(PercentileFilterTest, InsertAndEraseTenValuesInRandomOrder) { - int64_t zero_to_nine[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; + std::array zero_to_nine = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; // The percentile value of the ten values above. const int64_t expected_value = static_cast(GetParam() * 9); // Insert two sets of |zero_to_nine| in random order. for (int i = 0; i < 2; ++i) { - std::shuffle(zero_to_nine, zero_to_nine + 10, - std::mt19937(std::random_device()())); + absl::c_shuffle(zero_to_nine, std::mt19937(std::random_device()())); for (int64_t value : zero_to_nine) filter_.Insert(value); // After inserting a full set of |zero_to_nine|, the percentile should @@ -127,13 +127,11 @@ TEST_P(PercentileFilterTest, InsertAndEraseTenValuesInRandomOrder) { // Insert and erase sets of |zero_to_nine| in random order a few times. for (int i = 0; i < 3; ++i) { - std::shuffle(zero_to_nine, zero_to_nine + 10, - std::mt19937(std::random_device()())); + absl::c_shuffle(zero_to_nine, std::mt19937(std::random_device()())); for (int64_t value : zero_to_nine) filter_.Erase(value); EXPECT_EQ(expected_value, filter_.GetPercentileValue()); - std::shuffle(zero_to_nine, zero_to_nine + 10, - std::mt19937(std::random_device()())); + absl::c_shuffle(zero_to_nine, std::mt19937(std::random_device()())); for (int64_t value : zero_to_nine) filter_.Insert(value); EXPECT_EQ(expected_value, filter_.GetPercentileValue()); diff --git a/rtc_base/numerics/samples_stats_counter.cc b/rtc_base/numerics/samples_stats_counter.cc index 1348cbac07..4f6c6857bd 100644 --- a/rtc_base/numerics/samples_stats_counter.cc +++ b/rtc_base/numerics/samples_stats_counter.cc @@ -10,9 +10,10 @@ #include "rtc_base/numerics/samples_stats_counter.h" -#include #include +#include "absl/algorithm/container.h" + namespace webrtc { SamplesStatsCounter::SamplesStatsCounter() = default; @@ -42,7 +43,7 @@ double SamplesStatsCounter::GetPercentile(double percentile) { RTC_CHECK_GE(percentile, 0); RTC_CHECK_LE(percentile, 1); if (!sorted_) { - std::sort(samples_.begin(), samples_.end()); + absl::c_sort(samples_); sorted_ = true; } const double raw_rank = percentile * (samples_.size() - 1); diff --git a/rtc_base/numerics/samples_stats_counter_unittest.cc b/rtc_base/numerics/samples_stats_counter_unittest.cc index 3a6b3fb958..8634295c8e 100644 --- a/rtc_base/numerics/samples_stats_counter_unittest.cc +++ b/rtc_base/numerics/samples_stats_counter_unittest.cc @@ -11,10 +11,10 @@ #include "rtc_base/numerics/samples_stats_counter.h" #include -#include #include #include +#include "absl/algorithm/container.h" #include "test/gtest.h" namespace webrtc { @@ -25,7 +25,7 @@ SamplesStatsCounter CreateStatsFilledWithIntsFrom1ToN(int n) { for (int i = 1; i <= n; i++) { data.push_back(i); } - std::shuffle(data.begin(), data.end(), std::mt19937(std::random_device()())); + absl::c_shuffle(data, std::mt19937(std::random_device()())); SamplesStatsCounter stats; for (double v : data) { diff --git a/rtc_base/openssl_key_derivation_hkdf.cc b/rtc_base/openssl_key_derivation_hkdf.cc index 6b75e624ca..d82f07bc4a 100644 --- a/rtc_base/openssl_key_derivation_hkdf.cc +++ b/rtc_base/openssl_key_derivation_hkdf.cc @@ -10,7 +10,6 @@ #include "rtc_base/openssl_key_derivation_hkdf.h" -#include #include #include @@ -24,6 +23,7 @@ #include #include +#include "absl/algorithm/container.h" #include "rtc_base/buffer.h" #include "rtc_base/openssl.h" @@ -91,7 +91,7 @@ absl::optional> OpenSSLKeyDerivationHKDF::DeriveKey( rtc::Buffer salt_buffer; if (salt.data() == nullptr || salt.size() == 0) { salt_buffer.SetSize(SHA256_DIGEST_LENGTH); - std::fill(salt_buffer.begin(), salt_buffer.end(), 0); + absl::c_fill(salt_buffer, 0); salt = salt_buffer; } // This buffer will erase itself on release. diff --git a/rtc_base/proxy_server.cc b/rtc_base/proxy_server.cc index a1477c8721..ec76782682 100644 --- a/rtc_base/proxy_server.cc +++ b/rtc_base/proxy_server.cc @@ -11,7 +11,6 @@ #include "rtc_base/proxy_server.h" #include -#include #include "absl/memory/memory.h" #include "rtc_base/checks.h" diff --git a/rtc_base/ssl_certificate.cc b/rtc_base/ssl_certificate.cc index 8f6cfa2365..657561a32d 100644 --- a/rtc_base/ssl_certificate.cc +++ b/rtc_base/ssl_certificate.cc @@ -10,10 +10,10 @@ #include "rtc_base/ssl_certificate.h" -#include #include #include +#include "absl/algorithm/container.h" #include "absl/memory/memory.h" #include "rtc_base/checks.h" #include "rtc_base/openssl_certificate.h" @@ -89,8 +89,8 @@ SSLCertChain::~SSLCertChain() = default; std::unique_ptr SSLCertChain::Clone() const { std::vector> new_certs(certs_.size()); - std::transform( - certs_.begin(), certs_.end(), new_certs.begin(), + absl::c_transform( + certs_, new_certs.begin(), [](const std::unique_ptr& cert) -> std::unique_ptr { return cert->Clone(); }); return absl::make_unique(std::move(new_certs)); diff --git a/rtc_base/ssl_fingerprint.cc b/rtc_base/ssl_fingerprint.cc index 77b6149842..c607810192 100644 --- a/rtc_base/ssl_fingerprint.cc +++ b/rtc_base/ssl_fingerprint.cc @@ -11,10 +11,10 @@ #include "rtc_base/ssl_fingerprint.h" #include -#include #include #include +#include "absl/algorithm/container.h" #include "absl/memory/memory.h" #include "rtc_base/logging.h" #include "rtc_base/message_digest.h" @@ -113,8 +113,7 @@ bool SSLFingerprint::operator==(const SSLFingerprint& other) const { std::string SSLFingerprint::GetRfc4572Fingerprint() const { std::string fingerprint = rtc::hex_encode_with_delimiter(digest.data(), digest.size(), ':'); - std::transform(fingerprint.begin(), fingerprint.end(), fingerprint.begin(), - ::toupper); + absl::c_transform(fingerprint, fingerprint.begin(), ::toupper); return fingerprint; } diff --git a/rtc_base/test_echo_server.h b/rtc_base/test_echo_server.h index 4710560644..5f06a0eee5 100644 --- a/rtc_base/test_echo_server.h +++ b/rtc_base/test_echo_server.h @@ -13,10 +13,10 @@ #include #include -#include #include #include +#include "absl/algorithm/container.h" #include "rtc_base/async_packet_socket.h" #include "rtc_base/async_socket.h" #include "rtc_base/async_tcp_socket.h" @@ -55,8 +55,7 @@ class TestEchoServer : public sigslot::has_slots<> { socket->Send(buf, size, options); } void OnClose(AsyncPacketSocket* socket, int err) { - ClientList::iterator it = - std::find(client_sockets_.begin(), client_sockets_.end(), socket); + ClientList::iterator it = absl::c_find(client_sockets_, socket); client_sockets_.erase(it); Thread::Current()->Dispose(socket); } diff --git a/rtc_base/unique_id_generator_unittest.cc b/rtc_base/unique_id_generator_unittest.cc index 7ce192c05e..a8d7b9e244 100644 --- a/rtc_base/unique_id_generator_unittest.cc +++ b/rtc_base/unique_id_generator_unittest.cc @@ -8,10 +8,10 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include "algorithm" -#include "string" -#include "vector" +#include +#include +#include "absl/algorithm/container.h" #include "api/array_view.h" #include "rtc_base/gunit.h" #include "rtc_base/helpers.h" @@ -69,11 +69,11 @@ TYPED_TEST(UniqueIdGeneratorTest, KnownElementsAreNotGenerated) { values.push_back(generator2()); } EXPECT_THAT(values, ::testing::SizeIs(num_elements)); - std::sort(values.begin(), values.end()); - std::sort(known_values.begin(), known_values.end()); + absl::c_sort(values); + absl::c_sort(known_values); std::vector intersection; - std::set_intersection(values.begin(), values.end(), known_values.begin(), - known_values.end(), std::back_inserter(intersection)); + absl::c_set_intersection(values, known_values, + std::back_inserter(intersection)); EXPECT_THAT(intersection, IsEmpty()); } @@ -100,11 +100,11 @@ TYPED_TEST(UniqueIdGeneratorTest, AddedElementsAreNotGenerated) { values.push_back(generator2()); } EXPECT_THAT(values, ::testing::SizeIs(num_elements)); - std::sort(values.begin(), values.end()); - std::sort(known_values.begin(), known_values.end()); + absl::c_sort(values); + absl::c_sort(known_values); std::vector intersection; - std::set_intersection(values.begin(), values.end(), known_values.begin(), - known_values.end(), std::back_inserter(intersection)); + absl::c_set_intersection(values, known_values, + std::back_inserter(intersection)); EXPECT_THAT(intersection, IsEmpty()); } diff --git a/rtc_base/virtual_socket_server.cc b/rtc_base/virtual_socket_server.cc index 3255124b8e..0c621c9e5e 100644 --- a/rtc_base/virtual_socket_server.cc +++ b/rtc_base/virtual_socket_server.cc @@ -13,11 +13,11 @@ #include #include -#include #include #include #include +#include "absl/algorithm/container.h" #include "rtc_base/checks.h" #include "rtc_base/fake_clock.h" #include "rtc_base/logging.h" @@ -1108,7 +1108,7 @@ VirtualSocketServer::Function* VirtualSocketServer::Invert(Function* f) { for (Function::size_type i = 0; i < f->size(); ++i) std::swap((*f)[i].first, (*f)[i].second); - std::sort(f->begin(), f->end(), FunctionDomainCmp()); + absl::c_sort(*f, FunctionDomainCmp()); return f; } @@ -1129,8 +1129,7 @@ VirtualSocketServer::Function* VirtualSocketServer::Resample(Function* f, } double VirtualSocketServer::Evaluate(Function* f, double x) { - Function::iterator iter = - std::lower_bound(f->begin(), f->end(), x, FunctionDomainCmp()); + Function::iterator iter = absl::c_lower_bound(*f, x, FunctionDomainCmp()); if (iter == f->begin()) { return (*f)[0].second; } else if (iter == f->end()) {