Chris@16: #ifndef BOOST_STATECHART_EVENT_HPP_INCLUDED Chris@16: #define BOOST_STATECHART_EVENT_HPP_INCLUDED Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // Copyright 2002-2007 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: #include Chris@16: #include Chris@16: Chris@101: #include // boost::polymorphic_downcast Chris@16: Chris@16: #include // std::allocator 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: ////////////////////////////////////////////////////////////////////////////// Chris@16: template< class MostDerived, class Allocator = std::allocator< void > > Chris@16: class event : public detail::rtti_policy::rtti_derived_type< Chris@16: MostDerived, event_base > Chris@16: { Chris@16: public: Chris@16: ////////////////////////////////////////////////////////////////////////// Chris@16: // Compiler-generated copy constructor and copy assignment operator are Chris@16: // fine Chris@16: Chris@16: void * operator new( std::size_t size ) Chris@16: { Chris@16: return detail::allocate< MostDerived, Allocator >( size ); Chris@16: } Chris@16: Chris@16: void * operator new( std::size_t, void * p ) Chris@16: { Chris@16: return p; Chris@16: } Chris@16: Chris@16: void operator delete( void * pEvent ) Chris@16: { Chris@16: detail::deallocate< MostDerived, Allocator >( pEvent ); Chris@16: } Chris@16: Chris@16: void operator delete( void * pEvent, void * p ) Chris@16: { Chris@16: } Chris@16: Chris@16: protected: Chris@16: ////////////////////////////////////////////////////////////////////////// Chris@16: event() {} Chris@16: virtual ~event() {} Chris@16: Chris@16: private: Chris@16: ////////////////////////////////////////////////////////////////////////// Chris@16: virtual intrusive_ptr< const event_base > clone() const Chris@16: { Chris@16: return intrusive_ptr< const event_base >( new MostDerived( Chris@16: *polymorphic_downcast< const MostDerived * >( this ) ) ); 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