.. _program_listing_file__tmp_ws_src_ecl_core_ecl_sigslots_include_ecl_sigslots_signal.hpp: Program Listing for File signal.hpp =================================== |exhale_lsh| :ref:`Return to documentation for file ` (``/tmp/ws/src/ecl_core/ecl_sigslots/include/ecl/sigslots/signal.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp /***************************************************************************** ** Ifdefs *****************************************************************************/ #ifndef ECL_SIGSLOTS_SIGNAL_HPP_ #define ECL_SIGSLOTS_SIGNAL_HPP_ /***************************************************************************** ** Includes *****************************************************************************/ #include "sigslot.hpp" #include #include /***************************************************************************** ** Namespaces *****************************************************************************/ namespace ecl { /***************************************************************************** ** Interface [General] *****************************************************************************/ template class ECL_PUBLIC Signal { public: Signal() : sigslot(NULL) { sigslot = new SigSlot(); } Signal(const std::string &topic) : sigslot(NULL) { sigslot = new SigSlot(); connect(topic); } Signal(const Signal& signal) { *this = signal; sigslot->incrHandles(); } ~Signal() { sigslot->decrHandles(); if ( sigslot->handles() == 0 ) { delete sigslot; } } void operator=( const Signal& signal) { sigslot = signal.sigslot; } void connect(const std::string& topic) { sigslot->connectSignal(topic); } void connectAsSlot(const std::string& topic) { sigslot->connectSlot(topic); } void disconnect() { sigslot->disconnect(); } void emit(Data data) { sigslot->emit(data); } private: SigSlot* sigslot; }; /***************************************************************************** ** Interface [Void] *****************************************************************************/ template<> class ECL_PUBLIC Signal { public: Signal() : sigslot(NULL) { sigslot = new SigSlot(); } Signal(const std::string &topic) : sigslot(NULL) { sigslot = new SigSlot(); connect(topic); } Signal(const Signal& signal) { *this = signal; sigslot->incrHandles(); } void operator=( const Signal& signal) { sigslot = signal.sigslot; } ~Signal() { sigslot->decrHandles(); if ( sigslot->handles() == 0 ) { delete sigslot; } } void connect(const std::string& topic) { sigslot->connectSignal(topic); } void connectAsSlot(const std::string& topic) { sigslot->connectSlot(topic); } void disconnect() { sigslot->disconnect(); } void emit() { sigslot->emit(); } private: SigSlot* sigslot; }; } // namespace ecl #endif /* ECL_SIGSLOTS_SIGNAL_HPP_ */