Chris@16: #ifndef BOOST_STATECHART_TERMINATION_HPP_INCLUDED Chris@16: #define BOOST_STATECHART_TERMINATION_HPP_INCLUDED Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // Copyright 2002-2006 Andreas Huber Doenni Chris@16: // Distributed under the Boost Software License, Version 1.0. (See accompany- Chris@16: // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: Chris@16: Chris@16: #include Chris@16: Chris@16: Chris@16: Chris@16: namespace boost Chris@16: { Chris@16: namespace statechart Chris@16: { Chris@16: Chris@16: Chris@16: Chris@16: class event_base; Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: template< class Event > Chris@16: class termination Chris@16: { Chris@16: public: Chris@16: ////////////////////////////////////////////////////////////////////////// Chris@16: // The following declarations should be private. Chris@16: // They are only public because many compilers lack template friends. Chris@16: ////////////////////////////////////////////////////////////////////////// Chris@16: template< class State, class EventBase, class IdType > Chris@16: static detail::reaction_result react( Chris@16: State & stt, const EventBase &, const IdType & eventType ) Chris@16: { Chris@16: if ( eventType == Event::static_type() ) Chris@16: { Chris@16: return detail::result_utility::get_result( stt.terminate() ); Chris@16: } Chris@16: else Chris@16: { Chris@16: return detail::no_reaction; Chris@16: } Chris@16: } Chris@16: }; Chris@16: Chris@16: template<> Chris@16: class termination< event_base > Chris@16: { Chris@16: public: Chris@16: ////////////////////////////////////////////////////////////////////////// Chris@16: // The following declarations should be private. Chris@16: // They are only public because many compilers lack template friends. Chris@16: ////////////////////////////////////////////////////////////////////////// Chris@16: template< class State, class EventBase, class IdType > Chris@16: static detail::reaction_result react( Chris@16: State & stt, const EventBase &, const IdType & ) Chris@16: { Chris@16: return detail::result_utility::get_result( stt.terminate() ); Chris@16: } Chris@16: }; Chris@16: Chris@16: Chris@16: Chris@16: } // namespace statechart Chris@16: } // namespace boost Chris@16: Chris@16: Chris@16: Chris@16: #endif