mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-26 17:18:55 +00:00
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
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user