summaryrefslogtreecommitdiffstats
path: root/engine/signal.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engine/signal.cpp')
-rw-r--r--engine/signal.cpp25
1 files changed, 17 insertions, 8 deletions
diff --git a/engine/signal.cpp b/engine/signal.cpp
index 0a57caa..7688785 100644
--- a/engine/signal.cpp
+++ b/engine/signal.cpp
@@ -67,12 +67,16 @@ bool channel::connect(listener::ptr l)
void channel::disconnect(listener::ptr l)
{
- listeners.remove_if(
- [l](std::weak_ptr<listener> p){
-
- listener::ptr pt = p.lock();
- return pt.get() == l.get();
- });
+ listeners.erase(
+ std::remove_if(
+ listeners.begin(),
+ listeners.end(),
+ [&l](std::weak_ptr<listener> p){
+ listener::ptr pt = p.lock();
+ return pt.get() == l.get();
+ }
+ )
+ );
}
bool channel::connect(listener* l)
@@ -146,8 +150,13 @@ void channel::check_and_call()
}
/* Erase invalidated listeners */
- listeners.remove_if(
- [](std::weak_ptr<listener> e) { return e.expired(); });
+ listeners.erase(
+ std::remove_if(
+ listeners.begin(),
+ listeners.end(),
+ [](std::weak_ptr<listener> e) { return e.expired(); }
+ )
+ );
stack.clear(); // TODO not so efficient
}