[binutils-gdb] gdbsupport: introduce struct observer
Simon Marchi
simark@sourceware.org
Sat Apr 24 23:33:43 GMT 2021
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=ec098003e27d67bca9e9880320e26ab8ad30fe31
commit ec098003e27d67bca9e9880320e26ab8ad30fe31
Author: Simon Marchi <simon.marchi@polymtl.ca>
Date: Sat Apr 24 19:26:04 2021 -0400
gdbsupport: introduce struct observer
Instead of using a pair. This allows keeping more data per observer in
a structured way, and using field names is clearer than first/second.
gdbsupport/ChangeLog:
* observable.h (class observable) <struct observer>: New.
<detach, notify>: Update.
<m_observers>: Change type to vector of observers.
Change-Id: Iadf7d1fa25049cfb089e6b1b429ddebc548825ab
Diff:
---
gdbsupport/ChangeLog | 6 ++++++
gdbsupport/observable.h | 22 ++++++++++++++++------
2 files changed, 22 insertions(+), 6 deletions(-)
diff --git a/gdbsupport/ChangeLog b/gdbsupport/ChangeLog
index 3ceeb3dab49..bfbd152ae8c 100644
--- a/gdbsupport/ChangeLog
+++ b/gdbsupport/ChangeLog
@@ -1,3 +1,9 @@
+2021-04-24 Simon Marchi <simon.marchi@polymtl.ca>
+
+ * observable.h (class observable) <struct observer>: New.
+ <detach, notify>: Update.
+ <m_observers>: Change type to vector of observers.
+
2021-04-23 Simon Marchi <simon.marchi@polymtl.ca>
* observable.h (observer_debug): Change to bool.
diff --git a/gdbsupport/observable.h b/gdbsupport/observable.h
index 0532500dd5f..1d19429ac4f 100644
--- a/gdbsupport/observable.h
+++ b/gdbsupport/observable.h
@@ -56,9 +56,20 @@ template<typename... T>
class observable
{
public:
-
typedef std::function<void (T...)> func_type;
+private:
+ struct observer
+ {
+ observer (const struct token *token, func_type func)
+ : token (token), func (func)
+ {}
+
+ const struct token *token;
+ func_type func;
+ };
+
+public:
explicit observable (const char *name)
: m_name (name)
{
@@ -87,10 +98,9 @@ public:
{
auto iter = std::remove_if (m_observers.begin (),
m_observers.end (),
- [&] (const std::pair<const token *,
- func_type> &e)
+ [&] (const observer &o)
{
- return e.first == &t;
+ return o.token == &t;
});
m_observers.erase (iter, m_observers.end ());
@@ -103,12 +113,12 @@ public:
fprintf_unfiltered (gdb_stdlog, "observable %s notify() called\n",
m_name);
for (auto &&e : m_observers)
- e.second (args...);
+ e.func (args...);
}
private:
- std::vector<std::pair<const token *, func_type>> m_observers;
+ std::vector<observer> m_observers;
const char *m_name;
};
More information about the Gdb-cvs
mailing list