annotate DEPENDENCIES/generic/include/boost/statechart/event_base.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents 2665513ce2d3
children
rev   line source
Chris@16 1 #ifndef BOOST_STATECHART_EVENT_BASE_HPP_INCLUDED
Chris@16 2 #define BOOST_STATECHART_EVENT_BASE_HPP_INCLUDED
Chris@16 3 //////////////////////////////////////////////////////////////////////////////
Chris@16 4 // Copyright 2002-2006 Andreas Huber Doenni
Chris@16 5 // Distributed under the Boost Software License, Version 1.0. (See accompany-
Chris@16 6 // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@16 7 //////////////////////////////////////////////////////////////////////////////
Chris@16 8
Chris@16 9
Chris@16 10
Chris@16 11 #include <boost/statechart/detail/rtti_policy.hpp>
Chris@16 12 #include <boost/statechart/detail/counted_base.hpp>
Chris@16 13
Chris@16 14 #include <boost/assert.hpp>
Chris@16 15 #include <boost/intrusive_ptr.hpp>
Chris@16 16 #include <boost/config.hpp>
Chris@16 17
Chris@16 18
Chris@16 19
Chris@16 20 namespace boost
Chris@16 21 {
Chris@16 22 namespace statechart
Chris@16 23 {
Chris@16 24 namespace detail
Chris@16 25 {
Chris@16 26
Chris@16 27
Chris@16 28
Chris@16 29 // This helper is necessary because there doesn't seem to be consensus among
Chris@16 30 // compilers on how a friend declaration for a function in another namespace
Chris@16 31 // has to look like.
Chris@16 32 class delete_helper
Chris@16 33 {
Chris@16 34 public:
Chris@16 35 template< class T >
Chris@16 36 static void delete_object( const T * pObject )
Chris@16 37 {
Chris@16 38 delete pObject;
Chris@16 39 }
Chris@16 40 };
Chris@16 41
Chris@16 42
Chris@16 43
Chris@16 44 } // namespace detail
Chris@16 45
Chris@16 46
Chris@16 47
Chris@16 48 //////////////////////////////////////////////////////////////////////////////
Chris@16 49 class event_base : public detail::rtti_policy::rtti_base_type<
Chris@16 50 detail::counted_base<> >
Chris@16 51 {
Chris@16 52 typedef detail::rtti_policy::rtti_base_type<
Chris@16 53 detail::counted_base<> > base_type;
Chris@16 54 public:
Chris@16 55 //////////////////////////////////////////////////////////////////////////
Chris@16 56 intrusive_ptr< const event_base > intrusive_from_this() const;
Chris@16 57
Chris@16 58 protected:
Chris@16 59 //////////////////////////////////////////////////////////////////////////
Chris@16 60 event_base( detail::rtti_policy::id_provider_type idProvider ) :
Chris@16 61 base_type( idProvider )
Chris@16 62 {
Chris@16 63 }
Chris@16 64
Chris@16 65 virtual ~event_base() {}
Chris@16 66
Chris@16 67 private:
Chris@16 68 //////////////////////////////////////////////////////////////////////////
Chris@16 69 virtual intrusive_ptr< const event_base > clone() const = 0;
Chris@16 70
Chris@16 71 friend class detail::delete_helper;
Chris@16 72 };
Chris@16 73
Chris@16 74
Chris@16 75
Chris@16 76 #ifdef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
Chris@16 77 } // namespace statechart
Chris@16 78 #endif
Chris@16 79
Chris@16 80
Chris@16 81
Chris@16 82 inline void intrusive_ptr_add_ref( const ::boost::statechart::event_base * pBase )
Chris@16 83 {
Chris@16 84 pBase->add_ref();
Chris@16 85 }
Chris@16 86
Chris@16 87 inline void intrusive_ptr_release( const ::boost::statechart::event_base * pBase )
Chris@16 88 {
Chris@16 89 if ( pBase->release() )
Chris@16 90 {
Chris@16 91 ::boost::statechart::detail::delete_helper::delete_object( pBase );
Chris@16 92 }
Chris@16 93 }
Chris@16 94
Chris@16 95
Chris@16 96
Chris@16 97 #ifndef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
Chris@16 98 } // namespace statechart
Chris@16 99 #endif
Chris@16 100 namespace statechart
Chris@16 101 {
Chris@16 102
Chris@16 103
Chris@16 104
Chris@16 105 // We're implementing this here so that GCC3.4.2 can find
Chris@16 106 // intrusive_ptr_add_ref, which is indirectly called from the intrusive_ptr
Chris@16 107 // ctor.
Chris@16 108 inline intrusive_ptr< const event_base > event_base::intrusive_from_this() const
Chris@16 109 {
Chris@16 110 if ( base_type::ref_counted() )
Chris@16 111 {
Chris@16 112 return intrusive_ptr< const event_base >( this );
Chris@16 113 }
Chris@16 114 else
Chris@16 115 {
Chris@16 116 return clone();
Chris@16 117 }
Chris@16 118 }
Chris@16 119
Chris@16 120
Chris@16 121
Chris@16 122 } // namespace statechart
Chris@16 123 } // namespace boost
Chris@16 124
Chris@16 125
Chris@16 126
Chris@16 127 #endif