UniShader
1.0.0a
Interface for GPGPU and working with shader programs
|
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