summaryrefslogtreecommitdiffstats
path: root/src/Core/Signals
diff options
context:
space:
mode:
Diffstat (limited to 'src/Core/Signals')
-rw-r--r--src/Core/Signals/GenericSignal.h2
-rw-r--r--src/Core/Signals/Signal0.h5
-rw-r--r--src/Core/Signals/Signal1.h5
-rw-r--r--src/Core/Signals/Signal2.h5
-rw-r--r--src/Core/Signals/SignalBase.h11
5 files changed, 24 insertions, 4 deletions
diff --git a/src/Core/Signals/GenericSignal.h b/src/Core/Signals/GenericSignal.h
index 641f575..af5bae9 100644
--- a/src/Core/Signals/GenericSignal.h
+++ b/src/Core/Signals/GenericSignal.h
@@ -37,6 +37,8 @@ class GenericSignal : protected SignalBase {
protected:
std::map<Connection, slot_type> handlers;
+ GenericSignal(Application *application) : SignalBase(application) {}
+
public:
Connection connect(const slot_type &slot) {
boost::lock_guard<boost::mutex> lock(mutex);
diff --git a/src/Core/Signals/Signal0.h b/src/Core/Signals/Signal0.h
index ccfb548..c01a82a 100644
--- a/src/Core/Signals/Signal0.h
+++ b/src/Core/Signals/Signal0.h
@@ -21,6 +21,7 @@
#define MAD_CORE_SIGNALS_SIGNAL0_H_
#include "GenericSignal.h"
+#include "../Application.h"
#include "../ThreadManager.h"
#include <boost/function.hpp>
@@ -31,11 +32,13 @@ namespace Signals {
class Signal0 : public GenericSignal<boost::function0<void> > {
public:
+ Signal0(Application *application) : GenericSignal<boost::function0<void> >(application) {}
+
void emit() {
boost::lock_guard<boost::mutex> lock(mutex);
for(std::map<Connection, slot_type>::iterator handler = handlers.begin(); handler != handlers.end(); ++handler)
- ThreadManager::get()->pushWork(handler->second);
+ getApplication()->getThreadManager()->pushWork(handler->second);
}
};
diff --git a/src/Core/Signals/Signal1.h b/src/Core/Signals/Signal1.h
index e4a946c..0a03c39 100644
--- a/src/Core/Signals/Signal1.h
+++ b/src/Core/Signals/Signal1.h
@@ -21,6 +21,7 @@
#define MAD_CORE_SIGNALS_SIGNAL1_H_
#include "GenericSignal.h"
+#include "../Application.h"
#include "../ThreadManager.h"
#include <boost/function.hpp>
@@ -32,11 +33,13 @@ namespace Signals {
template <typename T1>
class Signal1 : public GenericSignal<boost::function1<void, T1> > {
public:
+ Signal1(Application *application) : GenericSignal<boost::function1<void, T1> >(application) {}
+
void emit(T1 arg1) {
boost::lock_guard<boost::mutex> lock(this->mutex);
for(typename std::map<Connection, typename GenericSignal<boost::function1<void, T1> >::slot_type>::iterator handler = this->handlers.begin(); handler != this->handlers.end(); ++handler)
- ThreadManager::get()->pushWork(boost::bind(handler->second, arg1));
+ this->getApplication()->getThreadManager()->pushWork(boost::bind(handler->second, arg1));
}
};
diff --git a/src/Core/Signals/Signal2.h b/src/Core/Signals/Signal2.h
index 41045d7..0966258 100644
--- a/src/Core/Signals/Signal2.h
+++ b/src/Core/Signals/Signal2.h
@@ -21,6 +21,7 @@
#define MAD_CORE_SIGNALS_SIGNAL2_H_
#include "GenericSignal.h"
+#include "../Application.h"
#include "../ThreadManager.h"
#include <boost/function.hpp>
@@ -32,11 +33,13 @@ namespace Signals {
template <typename T1, typename T2>
class Signal2 : public GenericSignal<boost::function2<void, T1, T2> > {
public:
+ Signal2(Application *application) : GenericSignal<boost::function2<void, T1, T2> >(application) {}
+
void emit(T1 arg1, T2 arg2) {
boost::lock_guard<boost::mutex> lock(this->mutex);
for(typename std::map<Connection, typename GenericSignal<boost::function2<void, T1, T2> >::slot_type>::iterator handler = this->handlers.begin(); handler != this->handlers.end(); ++handler)
- ThreadManager::get()->pushWork(boost::bind(handler->second, arg1, arg2));
+ this->getApplication()->getThreadManager()->pushWork(boost::bind(handler->second, arg1, arg2));
}
};
diff --git a/src/Core/Signals/SignalBase.h b/src/Core/Signals/SignalBase.h
index 1a5d5a3..8ec8483 100644
--- a/src/Core/Signals/SignalBase.h
+++ b/src/Core/Signals/SignalBase.h
@@ -27,12 +27,17 @@
namespace Mad {
namespace Core {
+
+class Application;
+
namespace Signals {
class SignalBase : private boost::noncopyable {
private:
friend class Connection;
+ Application *application;
+
unsigned long connectionId;
protected:
@@ -42,8 +47,12 @@ class SignalBase : private boost::noncopyable {
return Connection(this, connectionId++);
}
- SignalBase() : connectionId(0) {}
+ SignalBase(Application *application0) : application(application0), connectionId(0) {}
virtual ~SignalBase() {}
+
+ Application* getApplication() {
+ return application;
+ }
};
}