UniShader  1.0.0a
Interface for GPGPU and working with shader programs
 All Classes Functions Typedefs Enumerations Enumerator
D:/Visual Studio 2010/Projects/Unishader project/Unishader/include/UniShader/Signal.h
00001 #pragma once
00002 #ifndef SIGNAL_H
00003 #define SIGNAL_H
00004 
00005 #include <UniShader/Config.h>
00006 #include <UniShader/Utility.h>
00007 #include <UniShader/ObjectBase.h>
00008 
00009 #include <memory>
00010 #include <deque>
00011 #include <typeinfo>
00012 
00013 UNISHADER_BEGIN
00014 
00015 class SignalSender;
00016 
00018 
00022 class UniShader_API SignalReceiver{
00023 protected:
00024         SignalReceiver();
00025 public:
00026         ~SignalReceiver();
00027 
00029 
00034         virtual bool handleSignal(unsigned int signalID, const ObjectBase* callerPtr) = 0;
00035 protected:
00036         std::shared_ptr<SignalReceiver*> signalPtr; //<! Shared pointer to receiver.
00037 };
00038 
00040 
00044 class UniShader_API SignalSender{
00045 protected:
00046         SignalSender();
00047 public:
00048         ~SignalSender();
00049         
00051 
00056         void subscribeReceiver(std::shared_ptr<SignalReceiver*>& ptr);
00057 
00059 
00064         void unsubscribeReceiver(std::shared_ptr<SignalReceiver*>& ptr);
00065 protected:
00066 
00068 
00073         void sendSignal(unsigned int signalID, const ObjectBase* ptr);
00074 private:
00075         std::deque<std::shared_ptr<SignalReceiver*>> m_subscReceivers;
00076 };
00077 
00078 UNISHADER_END
00079 
00080 #endif