X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPPI%2FEvents.hh;h=202b64895044de8a07c80f87fb4ecbadd98285db;hb=8a6697d11e9a6557d9a5c42b4052666fce32bc10;hp=39e9d486cff61a5d86b90aada56961fd201703b6;hpb=601d1f509f5bb24df167a4dd5a20da67a0af9af8;p=senf.git diff --git a/senf/PPI/Events.hh b/senf/PPI/Events.hh index 39e9d48..202b648 100644 --- a/senf/PPI/Events.hh +++ b/senf/PPI/Events.hh @@ -2,23 +2,28 @@ // // 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 -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. +// The contents of this file are subject to the Fraunhofer FOKUS Public License +// Version 1.0 (the "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// http://senf.berlios.de/license.html // -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// The Fraunhofer FOKUS Public License Version 1.0 is based on, +// but modifies the Mozilla Public License Version 1.1. +// See the full license text for the amendments. // -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the -// Free Software Foundation, Inc., -// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// Software distributed under the License is distributed on an "AS IS" basis, +// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +// for the specific language governing rights and limitations under the License. +// +// The Original Code is Fraunhofer FOKUS code. +// +// The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V. +// (registered association), Hansastraße 27 c, 80686 Munich, Germany. +// All Rights Reserved. +// +// Contributor(s): +// Stefan Bund /** \file \brief Events public header */ @@ -28,15 +33,17 @@ // Custom includes #include -#include "../Scheduler/ClockService.hh" +#include #include "predecl.hh" //#include "Events.mpp" -///////////////////////////////hh.p//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// namespace senf { namespace ppi { - + + namespace detail { class EventBindingBase; } + /** \defgroup event_group Events Events provide notification of events outside the PPI framework: I/O activity, Timers @@ -47,13 +54,13 @@ namespace ppi { All events are derived from EventImplementation which is based on EventDescriptor. \see EventImplementation \n - \ref ppi_events + \ref ppi_events */ // Implementation: The concrete EventDescriptor implementation will need to set things up so // some callback (within the EventDescriptor implementation) will be called when the event // happens. This setup happens in 'v_enable()'. This internal handler sets up an EventType - // instance if needed and calls 'callback()'. + // instance if needed and calls 'callback()'. // // 'callback()' will access the EventBinding wrapper to find the user-callback to signal. It // will do any needed internal processing, call that user callback and clean up afterwards. @@ -63,13 +70,13 @@ namespace ppi { The EventDescriptor base-class provides an interface to control events. \see \ref ppi_events - */ + */ class EventDescriptor { public: virtual ~EventDescriptor(); - bool enabled(); ///< Check, whether the event is currently enabled + bool enabled() const; ///< Check, whether the event is currently enabled void enabled(bool v); ///< Enable or disable the event protected: @@ -85,6 +92,7 @@ namespace ppi { void notifyUnthrottle(); void registerRoute(ForwardingRoute & route); + void unregisterRoute(ForwardingRoute & route); bool enabled_; bool throttled_; @@ -92,9 +100,12 @@ namespace ppi { typedef std::vector Routes; Routes routes_; + detail::EventBindingBase * binding_; + friend class ForwardingRoute; + friend class detail::EventBindingBase; }; - + /** \brief Internal: Callback forwarders */ template @@ -115,7 +126,7 @@ namespace ppi { private: detail::EventBinding & binding(); }; - + #ifndef DOXYGEN template @@ -133,7 +144,7 @@ namespace ppi { /** \brief Event implementation base class - EventImplementation provides the base-class for all Event implementations. + EventImplementation provides the base-class for all Event implementations. \code class SomeEvent : public EventImplementation { @@ -151,7 +162,7 @@ namespace ppi { void cb() { // Build event argument - SomeEventArg arg (...); + SomeEventArg arg (...); // Call the event callback callback(arg); } @@ -170,7 +181,7 @@ namespace ppi { */ template class EventImplementation - : public EventDescriptor, + : public EventDescriptor, public EventImplementationHelper< EventType, EventImplementation > { public: @@ -179,7 +190,7 @@ namespace ppi { module::Module & module() const; ///< Module in which the event is registered EventManager & manager() const; ///< EventManager of the event - + protected: EventImplementation(); @@ -195,7 +206,7 @@ namespace ppi { }} -///////////////////////////////hh.e//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// #include "Events.cci" //#include "Events.ct" #include "Events.cti"