From 50e4dc5dbad3993d00b1c4d0d4a02d3c40edc0fc Mon Sep 17 00:00:00 2001 From: Lioncash Date: Tue, 12 Dec 2023 13:24:40 -0500 Subject: [PATCH 01/11] Watches: Make use of std::erase_if --- Source/Core/Common/Debug/Watches.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Source/Core/Common/Debug/Watches.cpp b/Source/Core/Common/Debug/Watches.cpp index c476665a41..beeab99086 100644 --- a/Source/Core/Common/Debug/Watches.cpp +++ b/Source/Core/Common/Debug/Watches.cpp @@ -43,9 +43,7 @@ const std::vector& Watches::GetWatches() const void Watches::UnsetWatch(u32 address) { - m_watches.erase(std::remove_if(m_watches.begin(), m_watches.end(), - [address](const auto& watch) { return watch.address == address; }), - m_watches.end()); + std::erase_if(m_watches, [address](const auto& watch) { return watch.address == address; }); } void Watches::UpdateWatch(std::size_t index, u32 address, std::string name) From 84ae0c1c7e43a2517a01f7e8a6cbc037277c6fc1 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Tue, 12 Dec 2023 13:25:26 -0500 Subject: [PATCH 02/11] ActionReplay: Make use of std::erase_if --- Source/Core/Core/ActionReplay.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/Source/Core/Core/ActionReplay.cpp b/Source/Core/Core/ActionReplay.cpp index c3004cf148..b0fac62621 100644 --- a/Source/Core/Core/ActionReplay.cpp +++ b/Source/Core/Core/ActionReplay.cpp @@ -997,13 +997,11 @@ void RunAllActive(const Core::CPUThreadGuard& cpu_guard) // are only atomic ops unless contested. It should be rare for this to // be contested. std::lock_guard guard(s_lock); - s_active_codes.erase(std::remove_if(s_active_codes.begin(), s_active_codes.end(), - [&cpu_guard](const ARCode& code) { - bool success = RunCodeLocked(cpu_guard, code); - LogInfo("\n"); - return !success; - }), - s_active_codes.end()); + std::erase_if(s_active_codes, [&cpu_guard](const ARCode& code) { + const bool success = RunCodeLocked(cpu_guard, code); + LogInfo("\n"); + return !success; + }); s_disable_logging = true; } From ff0e7fbf08e1417472fae0bb4677d1ac22a49e9c Mon Sep 17 00:00:00 2001 From: Lioncash Date: Tue, 12 Dec 2023 13:26:16 -0500 Subject: [PATCH 03/11] GeckoCodeConfig: Make use of std::erase_if --- Source/Core/Core/GeckoCodeConfig.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Source/Core/Core/GeckoCodeConfig.cpp b/Source/Core/Core/GeckoCodeConfig.cpp index 350edc3e31..ec16d96e06 100644 --- a/Source/Core/Core/GeckoCodeConfig.cpp +++ b/Source/Core/Core/GeckoCodeConfig.cpp @@ -138,9 +138,7 @@ std::vector LoadCodes(const Common::IniFile& globalIni, const Common: GeckoCode gcode; - lines.erase(std::remove_if(lines.begin(), lines.end(), - [](const auto& line) { return line.empty() || line[0] == '#'; }), - lines.end()); + std::erase_if(lines, [](const auto& line) { return line.empty() || line[0] == '#'; }); for (auto& line : lines) { From df227aa03c2194a977d23f3f6c20863f57c9bc14 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Tue, 12 Dec 2023 13:26:47 -0500 Subject: [PATCH 04/11] I2CBus: Make use of std::erase_if --- Source/Core/Core/HW/WiimoteEmu/I2CBus.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Core/Core/HW/WiimoteEmu/I2CBus.cpp b/Source/Core/Core/HW/WiimoteEmu/I2CBus.cpp index 19202350fd..1c231f7944 100644 --- a/Source/Core/Core/HW/WiimoteEmu/I2CBus.cpp +++ b/Source/Core/Core/HW/WiimoteEmu/I2CBus.cpp @@ -14,7 +14,7 @@ void I2CBus::AddSlave(I2CSlave* slave) void I2CBus::RemoveSlave(I2CSlave* slave) { - m_slaves.erase(std::remove(m_slaves.begin(), m_slaves.end(), slave), m_slaves.end()); + std::erase(m_slaves, slave); } void I2CBus::Reset() From e7f7dde546c5ae8e68d7abc3fbe84b27dea021fd Mon Sep 17 00:00:00 2001 From: Lioncash Date: Tue, 12 Dec 2023 13:27:17 -0500 Subject: [PATCH 05/11] Formats: Make use of std::erase_if --- Source/Core/Core/IOS/ES/Formats.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Source/Core/Core/IOS/ES/Formats.cpp b/Source/Core/Core/IOS/ES/Formats.cpp index d740f249bb..2826f7aed5 100644 --- a/Source/Core/Core/IOS/ES/Formats.cpp +++ b/Source/Core/Core/IOS/ES/Formats.cpp @@ -614,9 +614,7 @@ std::string SharedContentMap::AddSharedContent(const std::array& sha1) bool SharedContentMap::DeleteSharedContent(const std::array& sha1) { - m_entries.erase(std::remove_if(m_entries.begin(), m_entries.end(), - [&sha1](const auto& entry) { return entry.sha1 == sha1; }), - m_entries.end()); + std::erase_if(m_entries, [&sha1](const auto& entry) { return entry.sha1 == sha1; }); return WriteEntries(); } From 96eac73d11cc96c4a6b0c46e59aa73899f2db6ea Mon Sep 17 00:00:00 2001 From: Lioncash Date: Tue, 12 Dec 2023 13:27:54 -0500 Subject: [PATCH 06/11] NetKDRequest: Make use of std::erase --- Source/Core/Core/IOS/Network/KD/NetKDRequest.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Core/Core/IOS/Network/KD/NetKDRequest.cpp b/Source/Core/Core/IOS/Network/KD/NetKDRequest.cpp index 8bc813a96b..0b7e7de9a2 100644 --- a/Source/Core/Core/IOS/Network/KD/NetKDRequest.cpp +++ b/Source/Core/Core/IOS/Network/KD/NetKDRequest.cpp @@ -556,7 +556,7 @@ NWC24::ErrorCode NetKDRequestDevice::KDSendMail() { LogError(ErrorType::SendMail, res); } - mails.erase(std::remove(mails.begin(), mails.end(), file_index), mails.end()); + std::erase(mails, file_index); continue; } @@ -574,7 +574,7 @@ NWC24::ErrorCode NetKDRequestDevice::KDSendMail() LogError(ErrorType::SendMail, res); } - mails.erase(std::remove(mails.begin(), mails.end(), file_index), mails.end()); + std::erase(mails, file_index); continue; } From e69ac2d43e2644591753c3f313dfded14d6d1718 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Tue, 12 Dec 2023 13:29:33 -0500 Subject: [PATCH 07/11] Socket: Make use of std::erase_if --- Source/Core/Core/IOS/Network/Socket.cpp | 101 +++++++++++------------- 1 file changed, 48 insertions(+), 53 deletions(-) diff --git a/Source/Core/Core/IOS/Network/Socket.cpp b/Source/Core/Core/IOS/Network/Socket.cpp index caa461a8cd..9f198e18ea 100644 --- a/Source/Core/Core/IOS/Network/Socket.cpp +++ b/Source/Core/Core/IOS/Network/Socket.cpp @@ -1047,66 +1047,61 @@ void WiiSockMan::UpdatePollCommands() auto& system = Core::System::GetInstance(); auto& memory = system.GetMemory(); - pending_polls.erase( - std::remove_if( - pending_polls.begin(), pending_polls.end(), - [&system, &memory, this](PollCommand& pcmd) { - const auto request = Request(system, pcmd.request_addr); - auto& pfds = pcmd.wii_fds; - int ret = 0; + std::erase_if(pending_polls, [&system, &memory, this](PollCommand& pcmd) { + const auto request = Request(system, pcmd.request_addr); + auto& pfds = pcmd.wii_fds; + int ret = 0; - // Happens only on savestate load - if (pfds[0].revents & error_event) - { - ret = static_cast(pfds.size()); - } - else - { - // Make the behavior of poll consistent across platforms by not passing: - // - Set with invalid fds, revents is set to 0 (Linux) or POLLNVAL (Windows) - // - Set without a valid socket, raises an error on Windows - std::vector original_order(pfds.size()); - std::iota(original_order.begin(), original_order.end(), 0); - // Select indices with valid fds - auto mid = std::partition(original_order.begin(), original_order.end(), [&](auto i) { - return GetHostSocket(memory.Read_U32(pcmd.buffer_out + 0xc * i)) >= 0; - }); - const auto n_valid = std::distance(original_order.begin(), mid); + // Happens only on savestate load + if (pfds[0].revents & error_event) + { + ret = static_cast(pfds.size()); + } + else + { + // Make the behavior of poll consistent across platforms by not passing: + // - Set with invalid fds, revents is set to 0 (Linux) or POLLNVAL (Windows) + // - Set without a valid socket, raises an error on Windows + std::vector original_order(pfds.size()); + std::iota(original_order.begin(), original_order.end(), 0); + // Select indices with valid fds + auto mid = std::partition(original_order.begin(), original_order.end(), [&](auto i) { + return GetHostSocket(memory.Read_U32(pcmd.buffer_out + 0xc * i)) >= 0; + }); + const auto n_valid = std::distance(original_order.begin(), mid); - // Move all the valid pollfds to the front of the vector - for (auto i = 0; i < n_valid; ++i) - std::swap(pfds[i], pfds[original_order[i]]); + // Move all the valid pollfds to the front of the vector + for (auto i = 0; i < n_valid; ++i) + std::swap(pfds[i], pfds[original_order[i]]); - if (n_valid > 0) - ret = poll(pfds.data(), n_valid, 0); - if (ret < 0) - ret = GetNetErrorCode(ret, "UpdatePollCommands", false); + if (n_valid > 0) + ret = poll(pfds.data(), n_valid, 0); + if (ret < 0) + ret = GetNetErrorCode(ret, "UpdatePollCommands", false); - // Move everything back to where they were - for (auto i = 0; i < n_valid; ++i) - std::swap(pfds[i], pfds[original_order[i]]); - } + // Move everything back to where they were + for (auto i = 0; i < n_valid; ++i) + std::swap(pfds[i], pfds[original_order[i]]); + } - if (ret == 0 && pcmd.timeout) - return false; + if (ret == 0 && pcmd.timeout) + return false; - // Translate native to Wii events, - for (u32 i = 0; i < pfds.size(); ++i) - { - const int revents = ConvertEvents(pfds[i].revents, ConvertDirection::NativeToWii); + // Translate native to Wii events, + for (u32 i = 0; i < pfds.size(); ++i) + { + const int revents = ConvertEvents(pfds[i].revents, ConvertDirection::NativeToWii); - // No need to change fd or events as they are input only. - // memory.Write_U32(ufds[i].fd, request.buffer_out + 0xc*i); //fd - // memory.Write_U32(events, request.buffer_out + 0xc*i + 4); //events - memory.Write_U32(revents, pcmd.buffer_out + 0xc * i + 8); // revents - DEBUG_LOG_FMT(IOS_NET, - "IOCTL_SO_POLL socket {} wevents {:08X} events {:08X} revents {:08X}", - i, revents, pfds[i].events, pfds[i].revents); - } - GetIOS()->EnqueueIPCReply(request, ret); - return true; - }), - pending_polls.end()); + // No need to change fd or events as they are input only. + // memory.Write_U32(ufds[i].fd, request.buffer_out + 0xc*i); //fd + // memory.Write_U32(events, request.buffer_out + 0xc*i + 4); //events + memory.Write_U32(revents, pcmd.buffer_out + 0xc * i + 8); // revents + DEBUG_LOG_FMT(IOS_NET, "IOCTL_SO_POLL socket {} wevents {:08X} events {:08X} revents {:08X}", + i, revents, pfds[i].events, pfds[i].revents); + } + GetIOS()->EnqueueIPCReply(request, ret); + return true; + }); } void WiiSockMan::ToNativeAddrIn(const u8* addr, sockaddr_in* to) From 01d15994fe06f112ea84b8340e409c3825bc688f Mon Sep 17 00:00:00 2001 From: Lioncash Date: Tue, 12 Dec 2023 13:30:08 -0500 Subject: [PATCH 08/11] PatchEngine: Make use of std::erase --- Source/Core/Core/PatchEngine.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Source/Core/Core/PatchEngine.cpp b/Source/Core/Core/PatchEngine.cpp index 456c2b008c..74fe5c7f7e 100644 --- a/Source/Core/Core/PatchEngine.cpp +++ b/Source/Core/Core/PatchEngine.cpp @@ -325,8 +325,7 @@ void AddMemoryPatch(std::size_t index) void RemoveMemoryPatch(std::size_t index) { std::lock_guard lock(s_on_frame_memory_mutex); - s_on_frame_memory.erase(std::remove(s_on_frame_memory.begin(), s_on_frame_memory.end(), index), - s_on_frame_memory.end()); + std::erase(s_on_frame_memory, index); } bool ApplyFramePatches() From 888a8692b49d393803a832782b1b74ae0621c952 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Tue, 12 Dec 2023 13:30:39 -0500 Subject: [PATCH 09/11] SysConf: Make use of std::erase_if --- Source/Core/Core/SysConf.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Source/Core/Core/SysConf.cpp b/Source/Core/Core/SysConf.cpp index d90a9d95e7..e3b44142b0 100644 --- a/Source/Core/Core/SysConf.cpp +++ b/Source/Core/Core/SysConf.cpp @@ -250,9 +250,7 @@ SysConf::Entry* SysConf::GetOrAddEntry(std::string_view key, Entry::Type type) void SysConf::RemoveEntry(std::string_view key) { - m_entries.erase(std::remove_if(m_entries.begin(), m_entries.end(), - [&key](const auto& entry) { return entry.name == key; }), - m_entries.end()); + std::erase_if(m_entries, [&key](const auto& entry) { return entry.name == key; }); } void SysConf::InsertDefaultEntries() From 196f8e51230f7e7ee02a4eec1f9671786a93e7d7 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Tue, 12 Dec 2023 13:31:18 -0500 Subject: [PATCH 10/11] MappingCommon: Make use of std::erase_if --- Source/Core/InputCommon/ControllerInterface/MappingCommon.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Source/Core/InputCommon/ControllerInterface/MappingCommon.cpp b/Source/Core/InputCommon/ControllerInterface/MappingCommon.cpp index 7b21cf78e0..56bab1a981 100644 --- a/Source/Core/InputCommon/ControllerInterface/MappingCommon.cpp +++ b/Source/Core/InputCommon/ControllerInterface/MappingCommon.cpp @@ -144,8 +144,7 @@ void RemoveSpuriousTriggerCombinations( }); }; - detections->erase(std::remove_if(detections->begin(), detections->end(), is_spurious), - detections->end()); + std::erase_if(*detections, is_spurious); } } // namespace ciface::MappingCommon From 9aea481e5915b9c615aa9bb40f1e45d4cb264e72 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Tue, 12 Dec 2023 13:31:58 -0500 Subject: [PATCH 11/11] ExpressionParser: Make use of std::erase_if --- .../InputCommon/ControlReference/ExpressionParser.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp b/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp index c93dcc5c3d..50e45d0ba1 100644 --- a/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp +++ b/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp @@ -963,11 +963,9 @@ static ParseResult ParseComplexExpression(const std::string& str) void RemoveInertTokens(std::vector* tokens) { - tokens->erase(std::remove_if(tokens->begin(), tokens->end(), - [](const Token& tok) { - return tok.type == TOK_COMMENT || tok.type == TOK_WHITESPACE; - }), - tokens->end()); + std::erase_if(*tokens, [](const Token& tok) { + return tok.type == TOK_COMMENT || tok.type == TOK_WHITESPACE; + }); } static std::unique_ptr ParseBarewordExpression(const std::string& str)