summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@polymtl.ca>2021-04-24 19:26:04 -0400
committerSimon Marchi <simon.marchi@polymtl.ca>2021-04-24 19:26:41 -0400
commitec098003e27d67bca9e9880320e26ab8ad30fe31 (patch)
treec3e8bb931117daafa5dab0a39f863ae065841f8e
parent3886790f133ce1ee2f30ebf37bb7dec1f812f29a (diff)
downloadbinutils-gdb-ec098003e27d67bca9e9880320e26ab8ad30fe31.tar.gz
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
-rw-r--r--gdbsupport/ChangeLog6
-rw-r--r--gdbsupport/observable.h22
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;
};