diff --git a/esignal/ISignal.h b/esignal/ISignal.h index e037aa7..c9c7668 100644 --- a/esignal/ISignal.h +++ b/esignal/ISignal.h @@ -21,7 +21,7 @@ namespace esignal { template class ISignal : public Signal { protected: - esignal::Interface& m_signalInterfaceLink; //!< interface of the signal manager. + esignal::Interface* m_signalInterfaceLink; //!< interface of the signal manager. std::string m_name; //!< name of the signal. std::string m_description; //!< description of the signal. public: @@ -36,10 +36,10 @@ namespace esignal { ISignal(CLASS_TYPE* _signalInterfaceLink, FUNC_TYPE _func, const std::string& _name, - const std::string& _description = ""); - ISignal(esignal::Interface& _signalInterfaceLink, + const std::string& _description); + ISignal(esignal::Interface* _signalInterfaceLink, const std::string& _name, - const std::string& _description = ""); + const std::string& _description); /** * @brief Destructor. */ @@ -56,10 +56,12 @@ esignal::ISignal::ISignal(CLASS_TYPE* _class, const std::string& _name, const std::string& _description) : esignal::Signal(_class, _func), - m_signalInterfaceLink(*_class), + m_signalInterfaceLink(_class), m_name(_name), m_description(_description) { // add a reference on the current signal ... - m_signalInterfaceLink.signalAdd(this); + if (m_signalInterfaceLink != nullptr) { + m_signalInterfaceLink->signalAdd(this); + } } diff --git a/esignal/details/ISignal.hxx b/esignal/details/ISignal.hxx index 02026a9..1c8639c 100644 --- a/esignal/details/ISignal.hxx +++ b/esignal/details/ISignal.hxx @@ -11,19 +11,23 @@ #include template -esignal::ISignal::ISignal(esignal::Interface& _signalInterfaceLink, +esignal::ISignal::ISignal(esignal::Interface* _signalInterfaceLink, const std::string& _name, const std::string& _description): m_signalInterfaceLink(_signalInterfaceLink), m_name(_name), m_description(_description) { // add a reference on the current signal ... - m_signalInterfaceLink.signalAdd(this); + if (m_signalInterfaceLink != nullptr) { + m_signalInterfaceLink->signalAdd(this); + } } template esignal::ISignal::~ISignal() { - m_signalInterfaceLink.signalRemove(this); + if (m_signalInterfaceLink != nullptr) { + m_signalInterfaceLink->signalRemove(this); + } } template diff --git a/test/main.cpp b/test/main.cpp index c4b14f7..041bdd5 100644 --- a/test/main.cpp +++ b/test/main.cpp @@ -13,7 +13,7 @@ #include #undef __class__ -#define __class__ "etk-test" +#define __class__ "esignal-test" int main(int _argc, const char *_argv[]) { ::testing::InitGoogleTest(&_argc, const_cast(_argv)); diff --git a/test/test_isignal.cpp b/test/test_isignal.cpp index 388d0de..29436ba 100644 --- a/test/test_isignal.cpp +++ b/test/test_isignal.cpp @@ -26,8 +26,8 @@ class testISignal : public esignal::Interface { size_t m_count; testISignal(): m_signalInt(this, &testISignal::changeCount, "int", "desc int"), - m_signalString(*this, "string", "desc string"), - m_signalFloat(*this, "float", "desc float") { + m_signalString(this, "string", "desc string"), + m_signalFloat(this, "float", "desc float") { m_count = 0; } void changeCount(size_t _a) {