[Lldb-commits] [PATCH] D152846: [lldb][NFCI] Remove custom matcher classes in Listener in favor of lambdas

2023-06-16 Thread Alex Langford via Phabricator via lldb-commits
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

2023-06-14 Thread Alex Langford via Phabricator via lldb-commits
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

2023-06-14 Thread Felipe de Azevedo Piovezan via Phabricator via lldb-commits
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

2023-06-13 Thread Med Ismail Bennani via Phabricator via lldb-commits
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

2023-06-13 Thread Alex Langford via Phabricator via lldb-commits
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