diff options
author | Simon Marchi <simon.marchi@polymtl.ca> | 2021-04-24 19:26:04 -0400 |
---|---|---|
committer | Simon Marchi <simon.marchi@polymtl.ca> | 2021-04-24 19:26:41 -0400 |
commit | ec098003e27d67bca9e9880320e26ab8ad30fe31 (patch) | |
tree | c3e8bb931117daafa5dab0a39f863ae065841f8e | |
parent | 3886790f133ce1ee2f30ebf37bb7dec1f812f29a (diff) | |
download | gdb-ec098003e27d67bca9e9880320e26ab8ad30fe31.zip gdb-ec098003e27d67bca9e9880320e26ab8ad30fe31.tar.gz gdb-ec098003e27d67bca9e9880320e26ab8ad30fe31.tar.bz2 |
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/ChangeLog | 6 | ||||
-rw-r--r-- | gdbsupport/observable.h | 22 |
2 files changed, 22 insertions, 6 deletions
diff --git a/gdbsupport/ChangeLog b/gdbsupport/ChangeLog index 3ceeb3d..bfbd152 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 0532500..1d19429 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; }; |