\brief Module public header
*/
-#ifndef HH_Module_
-#define HH_Module_ 1
+#ifndef HH_SENF_PPI_Module_
+#define HH_SENF_PPI_Module_ 1
// Custom includes
#include <vector>
#include <boost/ptr_container/ptr_vector.hpp>
#include "../Scheduler/ClockService.hh"
#include "predecl.hh"
+#include "ModuleManager.hh"
//#include "Module.mpp"
///////////////////////////////hh.p////////////////////////////////////////
\li \ref io_modules receive external data or forward packets out of the PPI
\li \ref routing_modules forward packets within the network
\li \ref adapter_modules are used to connect incompatible connectors to each other
-
- \todo Implement Spliters: PassiveSplitter, PrioritySplitter, CloneSplitter
*/
/** \defgroup io_modules Source/Sink Modules
event.enable();
}
+ void v_init() {
+ // Optional. Called after before running the module but after connections have been
+ // set up. This is either directly before senf::ppi::run() or senf::ppi::init() is
+ // called or, for modules created while the PPI is already running, after returning
+ // from all event handlers but before going back to the event loop.
+ }
+
};
\endcode
\see \ref ppi_modules
*/
class Module
- : boost::noncopyable
+ : ModuleManager::Initializable, boost::noncopyable
{
public:
virtual ~Module();
event to a connector defines the event as the
conceptual 'source' of the data. This means, the event
controls how packets are sent (Example: Routing from an
- IOEVent to an output defines, that output data will be
+ IOEvent to an output defines, that output data will be
generated whenever the event is signaled).
This event routing allows to automatically
private:
#endif
- virtual void init(); ///< Called just before the network is run
+ virtual void v_init(); ///< Called after module setup
+ /**< This member is called directly before the PPI (resumes)
+ execution. It is called after connections have been
+ setup before entering the PPI main loop.
+
+ You may overload this member. Your overload should
+ always call the base-class implementation. */
#ifndef DOXYGEN
public: