From 9f2c703137661473c7362f9c9d6a9df8bedce862 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 12 Feb 2020 15:07:15 -0500 Subject: address_arbiter: Simplify GetThreadsWaitingOnAddress() Simplifies the overall function and also allows for it to become a const-qualified member function. --- src/core/hle/kernel/address_arbiter.cpp | 17 ++++++++--------- src/core/hle/kernel/address_arbiter.h | 2 +- 2 files changed, 9 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/core/hle/kernel/address_arbiter.cpp b/src/core/hle/kernel/address_arbiter.cpp index 2ea3dcb61..a1287de93 100644 --- a/src/core/hle/kernel/address_arbiter.cpp +++ b/src/core/hle/kernel/address_arbiter.cpp @@ -228,15 +228,14 @@ void AddressArbiter::RemoveThread(std::shared_ptr thread) { UNREACHABLE(); } -std::vector> AddressArbiter::GetThreadsWaitingOnAddress(VAddr address) { - std::vector> result; - std::list>& thread_list = arb_threads[address]; - auto it = thread_list.begin(); - while (it != thread_list.end()) { - std::shared_ptr current_thread = *it; - result.push_back(std::move(current_thread)); - ++it; +std::vector> AddressArbiter::GetThreadsWaitingOnAddress( + VAddr address) const { + const auto iter = arb_threads.find(address); + if (iter == arb_threads.cend()) { + return {}; } - return result; + + const std::list>& thread_list = iter->second; + return {thread_list.cbegin(), thread_list.cend()}; } } // namespace Kernel diff --git a/src/core/hle/kernel/address_arbiter.h b/src/core/hle/kernel/address_arbiter.h index 386983e54..f958eee5a 100644 --- a/src/core/hle/kernel/address_arbiter.h +++ b/src/core/hle/kernel/address_arbiter.h @@ -86,7 +86,7 @@ private: void RemoveThread(std::shared_ptr thread); // Gets the threads waiting on an address. - std::vector> GetThreadsWaitingOnAddress(VAddr address); + std::vector> GetThreadsWaitingOnAddress(VAddr address) const; /// List of threads waiting for a address arbiter std::unordered_map>> arb_threads; -- cgit v1.2.3