.. _program_listing_file__tmp_ws_src_ecl_lite_ecl_sigslots_lite_include_ecl_sigslots_lite_connect.hpp: Program Listing for File connect.hpp ==================================== |exhale_lsh| :ref:`Return to documentation for file ` (``/tmp/ws/src/ecl_lite/ecl_sigslots_lite/include/ecl/sigslots_lite/connect.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp /***************************************************************************** ** Ifdefs *****************************************************************************/ #ifndef ECL_SIGSLOTS_LITE_CONNECT_HPP_ #define ECL_SIGSLOTS_LITE_CONNECT_HPP_ /***************************************************************************** ** Includes *****************************************************************************/ #include "slot.hpp" #include "signal.hpp" #include "errors.hpp" /***************************************************************************** ** Namespaces *****************************************************************************/ namespace ecl { namespace lite { /***************************************************************************** ** Privately Used Connects *****************************************************************************/ namespace sigslots { template ecl::lite::sigslots::Error connect(ecl::lite::Signal &signal, MemberSlot &slot) { return signal.connect(slot); } template ecl::lite::sigslots::Error connect(ecl::lite::Signal &signal, GlobalSlot &slot) { return signal.connect(slot); } } // namespace sigslots /***************************************************************************** ** Publicly Used Connects *****************************************************************************/ template sigslots::Error connect(Signal &signal, void(FunctionClass::*f)(Data), FunctionClass &o) { // Need to do this just in case o has member slot interfaces for multiple Data types. // If we don't it can't resolve the footprint that seems to get lost when passing // the function pointers down the line - another way to resolve maybe? sigslots::MemberSlotsBase &member_slots = o; sigslots::MemberSlot *slot = member_slots.addSlot(f,o); if ( slot != NULL ) { return sigslots::connect(signal,*slot); // koenig lookup also works } else { return sigslots::Error(sigslots::OutOfResourcesError); } } template sigslots::Error connect(Signal &signal, void (*function)(Data)) { sigslots::GlobalSlot *slot = GlobalSlots::addSlot(function); if ( slot != NULL ) { return sigslots::connect(signal,*slot); } else { return sigslots::Error(sigslots::OutOfResourcesError); } } /***************************************************************************** ** Publicly Used Connect Overloads *****************************************************************************/ template sigslots::Error connect(Signal &signal, void(FunctionClass::*function)(void), FunctionClass &o) { // Need to do this just in case o has member slot interfaces for multiple Data types. // If we don't it can't resolve the footprint that seems to get lost when passing // the function pointers down the line - another way to resolve maybe? sigslots::MemberSlotsBase &member_slots = o; sigslots::MemberSlot *slot = member_slots.addSlot(function,o); if ( slot != NULL ) { return sigslots::connect(signal,*slot); // koenig lookup also works } else { return sigslots::Error(sigslots::OutOfResourcesError); } } template sigslots::Error connect(Signal &signal, void (*function)(void)) { sigslots::GlobalSlot *slot = GlobalSlots::addSlot(function); if ( slot != NULL ) { return sigslots::connect(signal,*slot); } else { return sigslots::Error(sigslots::OutOfResourcesError); } } } // namespace lite } // namespace ecl #endif /* ECL_SIGSLOTS_LITE_CONNECT_HPP_ */