PPI: Clean up time interface
[senf.git] / PPI / Module.hh
index 1a3d22b..24fdf0c 100644 (file)
@@ -28,8 +28,8 @@
 // Custom includes
 #include <vector>
 #include <boost/utility.hpp>
-#include <boost/date_time/posix_time/posix_time_types.hpp>
 #include <boost/ptr_container/ptr_vector.hpp>
+#include "Scheduler/ClockService.hh"
 #include "predecl.hh"
 
 //#include "Module.mpp"
@@ -57,6 +57,9 @@ namespace module {
     class Module
         : boost::noncopyable
     {
+    public:
+        virtual ~Module();
+
     protected:
         Module();
 
@@ -118,11 +121,22 @@ namespace module {
                                                  event is signaled
                                              \param[in] descriptor The type of event to register */
 
-        boost::posix_time::ptime eventTime(); ///< Return timestamp of the currently processing
-                                              ///< event
+        ClockService::clock_type time() const; ///< Return timestamp of the currently processing
+                                        ///< event
+
+        ClockService::clock_type now() const;
+
+        void destroy();
+
+#ifndef DOXYGEN
+        virtual void macro_SENF_PPI_MODULE_missing() = 0;
+#endif
 
     private:
-        EventManager & eventManager();
+        virtual void init();
+
+        EventManager & eventManager() const;
+        ModuleManager & moduleManager() const;
         
         void registerConnector(connector::Connector & connector);
         RouteBase & addRoute(std::auto_ptr<RouteBase> route);
@@ -135,15 +149,14 @@ namespace module {
 
         template <class Source, class Target>
         friend class detail::RouteHelper;
+        friend class senf::ppi::ModuleManager;
     };
 
-    /** \brief Connect compatible connectors
-
-        connect() will connect two compatible connectors: One connector must be active, the other
-        passive.
-     */
-    template <class Source, class Target>
-    void connect(Source const & source, Target const & target);
+#   define SENF_PPI_MODULE(name)                                                                  \
+    public:                                                                                       \
+        ~ name() { destroy(); }                                                                   \
+        void macro_SENF_PPI_MODULE_missing() {}                                                   \
+    private:
 
 }}}