4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
6 // The contents of this file are subject to the Fraunhofer FOKUS Public License
7 // Version 1.0 (the "License"); you may not use this file except in compliance
8 // with the License. You may obtain a copy of the License at
9 // http://senf.berlios.de/license.html
11 // The Fraunhofer FOKUS Public License Version 1.0 is based on,
12 // but modifies the Mozilla Public License Version 1.1.
13 // See the full license text for the amendments.
15 // Software distributed under the License is distributed on an "AS IS" basis,
16 // WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
17 // for the specific language governing rights and limitations under the License.
19 // The Original Code is Fraunhofer FOKUS code.
21 // The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V.
22 // (registered association), Hansastraße 27 c, 80686 Munich, Germany.
23 // All Rights Reserved.
26 // Stefan Bund <g0dil@berlios.de>
29 \brief EventManager public header */
31 #ifndef HH_SENF_PPI_EventManager_
32 #define HH_SENF_PPI_EventManager_ 1
35 #include <boost/ptr_container/ptr_vector.hpp>
36 #include <senf/Scheduler/ClockService.hh>
38 #include "detail/Callback.hh"
39 #include "detail/EventBinding.hh"
41 //#include "EventManager.mpp"
42 //-/////////////////////////////////////////////////////////////////////////////////////////////////
47 /** \brief Event registry and control
49 The EventManager control event registration and manages global event parameters. The
50 EventManager controls event dispatch but does \e not control event generation. This is the
51 responsibility of an external component (the Scheduler)
56 //-////////////////////////////////////////////////////////////////////////
60 // Somehow doxygen barfs on this definition
61 template <class Descriptor>
63 : public detail::Callback<typename Descriptor::EventArg>
67 //-////////////////////////////////////////////////////////////////////////
68 ///\name Structors and default members
71 static EventManager & instance();
73 // default default constructor
74 // default copy constructor
75 // default copy assignment
78 // no conversion constructors
81 //-////////////////////////////////////////////////////////////////////////
83 ClockService::clock_type now(); ///< Current time at last event dispatch
84 ClockService::clock_type time(); ///< Expected time of the last event
89 template <class Descriptor>
90 void registerEvent(module::Module & module,
91 typename Callback<Descriptor>::type callback,
92 Descriptor & descriptor);
94 void destroyModule(module::Module & module);
95 void destroyEvent(EventDescriptor & event);
97 typedef boost::ptr_vector<detail::EventBindingBase> EventRegistrations;
98 EventRegistrations registrations_;
100 void eventTime(ClockService::clock_type time);
102 ClockService::clock_type eventTime_;
104 friend class detail::EventBindingBase;
105 friend class module::Module;
106 friend class EventDescriptor;
111 //-/////////////////////////////////////////////////////////////////////////////////////////////////
112 #include "EventManager.cci"
113 #include "EventManager.ct"
114 //#include "EventManager.cti"
121 // comment-column: 40
122 // c-file-style: "senf"
123 // indent-tabs-mode: nil
124 // ispell-local-dictionary: "american"
125 // compile-command: "scons -u test"