[Lldb-commits] [PATCH] D152846: [lldb][NFCI] Remove custom matcher classes in Listener in favor of lambdas
This revision was automatically updated to reflect the committed changes. Closed by commit rG193c7d10cb30: [lldb][NFCI] Remove custom matcher classes in Listener in favor of lambdas (authored by bulbazord). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D152846/new/ https://reviews.llvm.org/D152846 Files: lldb/source/Utility/Listener.cpp Index: lldb/source/Utility/Listener.cpp === --- lldb/source/Utility/Listener.cpp +++ lldb/source/Utility/Listener.cpp @@ -18,20 +18,6 @@ using namespace lldb; using namespace lldb_private; -namespace { -class BroadcasterManagerWPMatcher { -public: - BroadcasterManagerWPMatcher(BroadcasterManagerSP manager_sp) - : m_manager_sp(std::move(manager_sp)) {} - bool operator()(const BroadcasterManagerWP _wp) const { -BroadcasterManagerSP input_sp = input_wp.lock(); -return (input_sp && input_sp == m_manager_sp); - } - - BroadcasterManagerSP m_manager_sp; -}; -} // anonymous namespace - Listener::Listener(const char *name) : m_name(name), m_broadcasters(), m_broadcasters_mutex(), m_events(), m_events_mutex(), m_is_shadow() { @@ -181,17 +167,12 @@ } void Listener::BroadcasterManagerWillDestruct(BroadcasterManagerSP manager_sp) { - // Just need to remove this broadcast manager from the list of managers: - broadcaster_manager_collection::iterator iter, - end_iter = m_broadcaster_managers.end(); - BroadcasterManagerWP manager_wp; - - BroadcasterManagerWPMatcher matcher(std::move(manager_sp)); - iter = std::find_if( - m_broadcaster_managers.begin(), end_iter, matcher); - if (iter != end_iter) -m_broadcaster_managers.erase(iter); + const auto manager_matcher = + [_sp](const BroadcasterManagerWP _wp) -> bool { +BroadcasterManagerSP input_sp = input_wp.lock(); +return (input_sp && input_sp == manager_sp); + }; + llvm::erase_if(m_broadcaster_managers, manager_matcher); } void Listener::AddEvent(EventSP _sp) { @@ -206,36 +187,6 @@ m_events_condition.notify_all(); } -class EventBroadcasterMatches { -public: - EventBroadcasterMatches(Broadcaster *broadcaster) - : m_broadcaster(broadcaster) {} - - bool operator()(const EventSP _sp) const { -return event_sp->BroadcasterIs(m_broadcaster); - } - -private: - Broadcaster *m_broadcaster; -}; - -class EventMatcher { -public: - EventMatcher(Broadcaster *broadcaster, uint32_t event_type_mask) - : m_broadcaster(broadcaster), m_event_type_mask(event_type_mask) {} - - bool operator()(const EventSP _sp) const { -if (m_broadcaster && !event_sp->BroadcasterIs(m_broadcaster)) - return false; - -return m_event_type_mask == 0 || m_event_type_mask & event_sp->GetType(); - } - -private: - Broadcaster *m_broadcaster; - const uint32_t m_event_type_mask; -}; - bool Listener::FindNextEventInternal( std::unique_lock , Broadcaster *broadcaster, // nullptr for any broadcaster @@ -249,14 +200,18 @@ if (m_events.empty()) return false; + const auto event_matcher = + [broadcaster, event_type_mask](const EventSP _sp) -> bool { +if (broadcaster && !event_sp->BroadcasterIs(broadcaster)) + return false; +return event_type_mask == 0 || event_type_mask & event_sp->GetType(); + }; Listener::event_collection::iterator pos = m_events.end(); - if (broadcaster == nullptr && event_type_mask == 0) { + if (broadcaster == nullptr && event_type_mask == 0) pos = m_events.begin(); - } else { -pos = std::find_if(m_events.begin(), m_events.end(), - EventMatcher(broadcaster, event_type_mask)); - } + else +pos = llvm::find_if(m_events, event_matcher); if (pos != m_events.end()) { event_sp = *pos; @@ -395,6 +350,11 @@ if (!manager_sp) return 0; + const auto manager_matcher = + [_sp](const BroadcasterManagerWP _wp) -> bool { +BroadcasterManagerSP input_sp = input_wp.lock(); +return (input_sp && input_sp == manager_sp); + }; // The BroadcasterManager mutex must be locked before m_broadcasters_mutex to // avoid violating the lock hierarchy (manager before broadcasters). std::lock_guard manager_guard( @@ -404,14 +364,9 @@ uint32_t bits_acquired = manager_sp->RegisterListenerForEvents( this->shared_from_this(), event_spec); if (bits_acquired) { -broadcaster_manager_collection::iterator iter, -end_iter = m_broadcaster_managers.end(); BroadcasterManagerWP manager_wp(manager_sp); -BroadcasterManagerWPMatcher matcher(manager_sp); -iter = std::find_if( -m_broadcaster_managers.begin(), end_iter, matcher); -if (iter == end_iter) +auto iter = llvm::find_if(m_broadcaster_managers, manager_matcher); +if (iter == m_broadcaster_managers.end()) m_broadcaster_managers.push_back(manager_wp); } ___ lldb-commits mailing list
[Lldb-commits] [PATCH] D152846: [lldb][NFCI] Remove custom matcher classes in Listener in favor of lambdas
bulbazord updated this revision to Diff 531407. bulbazord added a comment. Use STLExtras where appropriate Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D152846/new/ https://reviews.llvm.org/D152846 Files: lldb/source/Utility/Listener.cpp Index: lldb/source/Utility/Listener.cpp === --- lldb/source/Utility/Listener.cpp +++ lldb/source/Utility/Listener.cpp @@ -18,20 +18,6 @@ using namespace lldb; using namespace lldb_private; -namespace { -class BroadcasterManagerWPMatcher { -public: - BroadcasterManagerWPMatcher(BroadcasterManagerSP manager_sp) - : m_manager_sp(std::move(manager_sp)) {} - bool operator()(const BroadcasterManagerWP _wp) const { -BroadcasterManagerSP input_sp = input_wp.lock(); -return (input_sp && input_sp == m_manager_sp); - } - - BroadcasterManagerSP m_manager_sp; -}; -} // anonymous namespace - Listener::Listener(const char *name) : m_name(name), m_broadcasters(), m_broadcasters_mutex(), m_events(), m_events_mutex(), m_is_shadow() { @@ -181,17 +167,12 @@ } void Listener::BroadcasterManagerWillDestruct(BroadcasterManagerSP manager_sp) { - // Just need to remove this broadcast manager from the list of managers: - broadcaster_manager_collection::iterator iter, - end_iter = m_broadcaster_managers.end(); - BroadcasterManagerWP manager_wp; - - BroadcasterManagerWPMatcher matcher(std::move(manager_sp)); - iter = std::find_if( - m_broadcaster_managers.begin(), end_iter, matcher); - if (iter != end_iter) -m_broadcaster_managers.erase(iter); + const auto manager_matcher = + [_sp](const BroadcasterManagerWP _wp) -> bool { +BroadcasterManagerSP input_sp = input_wp.lock(); +return (input_sp && input_sp == manager_sp); + }; + llvm::erase_if(m_broadcaster_managers, manager_matcher); } void Listener::AddEvent(EventSP _sp) { @@ -206,36 +187,6 @@ m_events_condition.notify_all(); } -class EventBroadcasterMatches { -public: - EventBroadcasterMatches(Broadcaster *broadcaster) - : m_broadcaster(broadcaster) {} - - bool operator()(const EventSP _sp) const { -return event_sp->BroadcasterIs(m_broadcaster); - } - -private: - Broadcaster *m_broadcaster; -}; - -class EventMatcher { -public: - EventMatcher(Broadcaster *broadcaster, uint32_t event_type_mask) - : m_broadcaster(broadcaster), m_event_type_mask(event_type_mask) {} - - bool operator()(const EventSP _sp) const { -if (m_broadcaster && !event_sp->BroadcasterIs(m_broadcaster)) - return false; - -return m_event_type_mask == 0 || m_event_type_mask & event_sp->GetType(); - } - -private: - Broadcaster *m_broadcaster; - const uint32_t m_event_type_mask; -}; - bool Listener::FindNextEventInternal( std::unique_lock , Broadcaster *broadcaster, // nullptr for any broadcaster @@ -249,14 +200,18 @@ if (m_events.empty()) return false; + const auto event_matcher = + [broadcaster, event_type_mask](const EventSP _sp) -> bool { +if (broadcaster && !event_sp->BroadcasterIs(broadcaster)) + return false; +return event_type_mask == 0 || event_type_mask & event_sp->GetType(); + }; Listener::event_collection::iterator pos = m_events.end(); - if (broadcaster == nullptr && event_type_mask == 0) { + if (broadcaster == nullptr && event_type_mask == 0) pos = m_events.begin(); - } else { -pos = std::find_if(m_events.begin(), m_events.end(), - EventMatcher(broadcaster, event_type_mask)); - } + else +pos = llvm::find_if(m_events, event_matcher); if (pos != m_events.end()) { event_sp = *pos; @@ -395,6 +350,11 @@ if (!manager_sp) return 0; + const auto manager_matcher = + [_sp](const BroadcasterManagerWP _wp) -> bool { +BroadcasterManagerSP input_sp = input_wp.lock(); +return (input_sp && input_sp == manager_sp); + }; // The BroadcasterManager mutex must be locked before m_broadcasters_mutex to // avoid violating the lock hierarchy (manager before broadcasters). std::lock_guard manager_guard( @@ -404,14 +364,9 @@ uint32_t bits_acquired = manager_sp->RegisterListenerForEvents( this->shared_from_this(), event_spec); if (bits_acquired) { -broadcaster_manager_collection::iterator iter, -end_iter = m_broadcaster_managers.end(); BroadcasterManagerWP manager_wp(manager_sp); -BroadcasterManagerWPMatcher matcher(manager_sp); -iter = std::find_if( -m_broadcaster_managers.begin(), end_iter, matcher); -if (iter == end_iter) +auto iter = llvm::find_if(m_broadcaster_managers, manager_matcher); +if (iter == m_broadcaster_managers.end()) m_broadcaster_managers.push_back(manager_wp); } ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [PATCH] D152846: [lldb][NFCI] Remove custom matcher classes in Listener in favor of lambdas
fdeazeve accepted this revision. fdeazeve added a comment. This revision is now accepted and ready to land. Nice catch! Also agree with the suggestion of using the STLExtras wrapper Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D152846/new/ https://reviews.llvm.org/D152846 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [PATCH] D152846: [lldb][NFCI] Remove custom matcher classes in Listener in favor of lambdas
mib added inline comments. Comment at: lldb/source/Utility/Listener.cpp:214 } else { -pos = std::find_if(m_events.begin(), m_events.end(), - EventMatcher(broadcaster, event_type_mask)); +pos = std::find_if(m_events.begin(), m_events.end(), event_matcher); } Since you used `llvm::erased_it` above, could you use `llvm::find_if` here as well to stay consistent. It will also make this line shorter since you can just pass the container instead of passing the beginning and ending iterators. Comment at: lldb/source/Utility/Listener.cpp:372 +iter = +std::find_if(m_broadcaster_managers.begin(), end_iter, manager_matcher); if (iter == end_iter) ditto Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D152846/new/ https://reviews.llvm.org/D152846 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [PATCH] D152846: [lldb][NFCI] Remove custom matcher classes in Listener in favor of lambdas
bulbazord created this revision. bulbazord added reviewers: JDevlieghere, mib, jingham, fdeazeve. Herald added a project: All. bulbazord requested review of this revision. Herald added a project: LLDB. Herald added a subscriber: lldb-commits. Instead of writing boilerplate classes to serve as matchers for things like `find_if` and `erase_if`, we can use lambdas. I believe this simplifies the Listener class. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D152846 Files: lldb/source/Utility/Listener.cpp Index: lldb/source/Utility/Listener.cpp === --- lldb/source/Utility/Listener.cpp +++ lldb/source/Utility/Listener.cpp @@ -18,20 +18,6 @@ using namespace lldb; using namespace lldb_private; -namespace { -class BroadcasterManagerWPMatcher { -public: - BroadcasterManagerWPMatcher(BroadcasterManagerSP manager_sp) - : m_manager_sp(std::move(manager_sp)) {} - bool operator()(const BroadcasterManagerWP _wp) const { -BroadcasterManagerSP input_sp = input_wp.lock(); -return (input_sp && input_sp == m_manager_sp); - } - - BroadcasterManagerSP m_manager_sp; -}; -} // anonymous namespace - Listener::Listener(const char *name) : m_name(name), m_broadcasters(), m_broadcasters_mutex(), m_events(), m_events_mutex(), m_is_shadow() { @@ -181,17 +167,12 @@ } void Listener::BroadcasterManagerWillDestruct(BroadcasterManagerSP manager_sp) { - // Just need to remove this broadcast manager from the list of managers: - broadcaster_manager_collection::iterator iter, - end_iter = m_broadcaster_managers.end(); - BroadcasterManagerWP manager_wp; - - BroadcasterManagerWPMatcher matcher(std::move(manager_sp)); - iter = std::find_if( - m_broadcaster_managers.begin(), end_iter, matcher); - if (iter != end_iter) -m_broadcaster_managers.erase(iter); + const auto manager_matcher = + [_sp](const BroadcasterManagerWP _wp) -> bool { +BroadcasterManagerSP input_sp = input_wp.lock(); +return (input_sp && input_sp == manager_sp); + }; + llvm::erase_if(m_broadcaster_managers, manager_matcher); } void Listener::AddEvent(EventSP _sp) { @@ -206,36 +187,6 @@ m_events_condition.notify_all(); } -class EventBroadcasterMatches { -public: - EventBroadcasterMatches(Broadcaster *broadcaster) - : m_broadcaster(broadcaster) {} - - bool operator()(const EventSP _sp) const { -return event_sp->BroadcasterIs(m_broadcaster); - } - -private: - Broadcaster *m_broadcaster; -}; - -class EventMatcher { -public: - EventMatcher(Broadcaster *broadcaster, uint32_t event_type_mask) - : m_broadcaster(broadcaster), m_event_type_mask(event_type_mask) {} - - bool operator()(const EventSP _sp) const { -if (m_broadcaster && !event_sp->BroadcasterIs(m_broadcaster)) - return false; - -return m_event_type_mask == 0 || m_event_type_mask & event_sp->GetType(); - } - -private: - Broadcaster *m_broadcaster; - const uint32_t m_event_type_mask; -}; - bool Listener::FindNextEventInternal( std::unique_lock , Broadcaster *broadcaster, // nullptr for any broadcaster @@ -249,13 +200,18 @@ if (m_events.empty()) return false; + const auto event_matcher = + [broadcaster, event_type_mask](const EventSP _sp) -> bool { +if (broadcaster && !event_sp->BroadcasterIs(broadcaster)) + return false; +return event_type_mask == 0 || event_type_mask & event_sp->GetType(); + }; Listener::event_collection::iterator pos = m_events.end(); if (broadcaster == nullptr && event_type_mask == 0) { pos = m_events.begin(); } else { -pos = std::find_if(m_events.begin(), m_events.end(), - EventMatcher(broadcaster, event_type_mask)); +pos = std::find_if(m_events.begin(), m_events.end(), event_matcher); } if (pos != m_events.end()) { @@ -395,6 +351,11 @@ if (!manager_sp) return 0; + const auto manager_matcher = + [_sp](const BroadcasterManagerWP _wp) -> bool { +BroadcasterManagerSP input_sp = input_wp.lock(); +return (input_sp && input_sp == manager_sp); + }; // The BroadcasterManager mutex must be locked before m_broadcasters_mutex to // avoid violating the lock hierarchy (manager before broadcasters). std::lock_guard manager_guard( @@ -407,10 +368,8 @@ broadcaster_manager_collection::iterator iter, end_iter = m_broadcaster_managers.end(); BroadcasterManagerWP manager_wp(manager_sp); -BroadcasterManagerWPMatcher matcher(manager_sp); -iter = std::find_if( -m_broadcaster_managers.begin(), end_iter, matcher); +iter = +std::find_if(m_broadcaster_managers.begin(), end_iter, manager_matcher); if (iter == end_iter) m_broadcaster_managers.push_back(manager_wp); } ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits