X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=PPI%2Fdetail%2FEventBinding.hh;h=f4898797c880a10dbd93149ee70d7f517e32f39c;hb=b89e3166f7680755683dccee5e48cb3a820185c0;hp=10959d7d6e825aff25eb58062d61e201c2ce3c45;hpb=81ffa1c459b96dd44472bcef37e1e373934ee138;p=senf.git diff --git a/PPI/detail/EventBinding.hh b/PPI/detail/EventBinding.hh index 10959d7..f489879 100644 --- a/PPI/detail/EventBinding.hh +++ b/PPI/detail/EventBinding.hh @@ -1,8 +1,8 @@ // $Id$ // -// Copyright (C) 2007 -// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) -// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) +// Copyright (C) 2007 +// Fraunhofer Institute for Open Communication Systems (FOKUS) +// Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund // // This program is free software; you can redistribute it and/or modify @@ -23,11 +23,11 @@ /** \file \brief EventBinding public header */ -#ifndef HH_EventBinding_ -#define HH_EventBinding_ 1 +#ifndef HH_SENF_PPI_detail_EventBinding_ +#define HH_SENF_PPI_detail_EventBinding_ 1 // Custom includes -#include +#include "../../Scheduler/ClockService.hh" #include "../predecl.hh" #include "Callback.hh" @@ -38,37 +38,77 @@ namespace senf { namespace ppi { namespace detail { + /** \brief Internal: Association Event - Module - Handler, base-class */ class EventBindingBase { + public: + ~EventBindingBase(); + + EventManager & manager() const; + module::Module & module() const; + protected: EventBindingBase(EventManager & manager, module::Module & module, EventDescriptor & descriptor); - void eventTime(boost::posix_time::ptime time); + void eventTime(ClockService::clock_type time); private: EventManager * manager_; module::Module * module_; EventDescriptor * descriptor_; + + friend class senf::ppi::EventManager; }; + /** \brief Internal: Callback forwarders + */ + template + class EventBindingHelper + { + public: + typedef typename detail::EventArgType::type EventArg; + + void callback(EventArg event, ClockService::clock_type time); + void callback(EventArg event); + + private: + Self & self(); + }; + +#ifndef DOXYGEN + + template + class EventBindingHelper + { + public: + void callback(ClockService::clock_type time); + void callback(); + + private: + Self & self(); + }; + +#endif + + /** \brief Internal: Association Event - Module - Handler, event type specific */ template class EventBinding - : public EventBindingBase + : public EventBindingBase, + public EventBindingHelper > { public: typedef EventType Event; typedef typename detail::EventArgType::type EventArg; - typedef typename detail::Callback::type Callback; + typedef typename detail::Callback::type Callback; EventBinding(EventManager & manager, module::Module & module, Callback callback, EventDescriptor & descriptor); - void callback(EventArg event, boost::posix_time::ptime time); - void callback(EventArg event); - private: Callback callback_; + + friend class EventBindingHelper >; }; }}}