summaryrefslogtreecommitdiffstats
path: root/engine/signal.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engine/signal.cpp')
-rw-r--r--engine/signal.cpp51
1 files changed, 25 insertions, 26 deletions
diff --git a/engine/signal.cpp b/engine/signal.cpp
index 5434469..0a57caa 100644
--- a/engine/signal.cpp
+++ b/engine/signal.cpp
@@ -3,12 +3,13 @@
#include <functional>
#include "flatland.hpp"
-using namespace std;
+#include "debug.hpp"
+
using namespace flat::core;
-map<string, weak_ptr<channel>> channel::channels;
+std::map<std::string, std::weak_ptr<channel>> channel::channels;
-channel::channel(const string& id) : labelled(id), mapped(false)
+channel::channel(const std::string& id) : labelled(id), mapped(false)
{
}
@@ -21,8 +22,10 @@ channel::~channel()
void channel::start(priority_t prior)
{
+ npdebug("Starting channel: ", label);
+
// Initialize task
- checker = flat::main_job().delegate_task(&channel::check_and_call, *this, prior);
+ checker = flat::main_job().delegate_task(&channel::check_and_call, this, prior);
}
bool channel::map()
@@ -33,7 +36,7 @@ bool channel::map()
if (!other) {
- channels.insert(pair<string, weak_ptr<channel>>(label, weak_from_this()));
+ channels.insert(std::pair<std::string, std::weak_ptr<channel>>(label, weak_from_this()));
mapped = true;
}
}
@@ -41,12 +44,10 @@ bool channel::map()
return mapped;
}
-#include <iostream>
-
void channel::emit(const signal& sig)
{
- //cout << "React" << endl;
stack.insert(sig);
+ npdebug("Emitted signal: ", sig.label, " ", this);
}
bool channel::connect(listener::ptr l)
@@ -67,7 +68,7 @@ bool channel::connect(listener::ptr l)
void channel::disconnect(listener::ptr l)
{
listeners.remove_if(
- [l](weak_ptr<listener> p){
+ [l](std::weak_ptr<listener> p){
listener::ptr pt = p.lock();
return pt.get() == l.get();
@@ -96,7 +97,7 @@ listener::ptr channel::connect(listener::callback f, const std::initializer_list
return nullptr;
}
-channel::ptr channel::create(const string& id, priority_t prior)
+channel::ptr channel::create(const std::string& id, priority_t prior)
{
ptr out = std::make_shared<channel>(id);
@@ -108,7 +109,7 @@ channel::ptr channel::create(const string& id, priority_t prior)
return out;
}
-channel::ptr channel::find(const string& id)
+channel::ptr channel::find(const std::string& id)
{
if (id.empty())
return nullptr;
@@ -118,17 +119,15 @@ channel::ptr channel::find(const string& id)
return (it == channels.end()) ? nullptr : (*it).second.lock();
}
+int step = 0;
+
void channel::check_and_call()
{
- //std::cout << "Signal check" << std::endl;
- // check
- //std::cout << "Stack size: " << stack.size() << endl;
-
if (!stack.empty()) {
- std::cout << "Signal detected" << std::endl;
+ npdebug("Signal detected: ", label, " ", this)
- vector<weak_ptr<listener>> to_erase;
+ std::vector<std::weak_ptr<listener>> to_erase;
// TODO, maybe it exists pop
/* for each listener_s, catch signal */
@@ -148,7 +147,7 @@ void channel::check_and_call()
/* Erase invalidated listeners */
listeners.remove_if(
- [](weak_ptr<listener> e) { return e.expired(); });
+ [](std::weak_ptr<listener> e) { return e.expired(); });
stack.clear(); // TODO not so efficient
}
@@ -158,7 +157,7 @@ void channel::check_and_call()
/* signal class */
signal::signal( object *sender,
- const string& id,
+ const std::string& id,
void *data,
priority_t priority)
@@ -169,7 +168,7 @@ signal::signal( object *sender,
{
}
-bool signal::emit(const string& chan) const
+bool signal::emit(const std::string& chan) const
{
channel::ptr c = channel::find(chan);
@@ -185,7 +184,7 @@ bool signal::emit(const string& chan) const
/* listener_s class */
-listener::listener(callback m_callback, const initializer_list<string>& filters)
+listener::listener(callback m_callback, const std::initializer_list<std::string>& filters)
: m_callback(m_callback), filters(filters)
{
@@ -196,7 +195,7 @@ listener::~listener()
{
}
-bool listener::check_in_filters(const string& filter) const
+bool listener::check_in_filters(const std::string& filter) const
{
for (const auto& f : filters)
{
@@ -207,17 +206,17 @@ bool listener::check_in_filters(const string& filter) const
return false;
}
-void listener::add_filter(const string& f)
+void listener::add_filter(const std::string& f)
{
filters.push_back(f);
}
-void listener::remove_filter(const string& f)
+void listener::remove_filter(const std::string& f)
{
filters.remove(f);
}
-bool listener::connect(const string& chan)
+bool listener::connect(const std::string& chan)
{
channel::ptr c = channel::find(chan);
@@ -227,7 +226,7 @@ bool listener::connect(const string& chan)
return bool(c);
}
-bool listener::disconnect(const string& chan)
+bool listener::disconnect(const std::string& chan)
{
channel::ptr c = channel::find(chan);