Mercurial > hg > vamp-build-and-test
diff DEPENDENCIES/generic/include/boost/statechart/detail/leaf_state.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DEPENDENCIES/generic/include/boost/statechart/detail/leaf_state.hpp Tue Aug 05 11:11:38 2014 +0100 @@ -0,0 +1,84 @@ +#ifndef BOOST_STATECHART_DETAIL_LEAF_STATE_HPP_INCLUDED +#define BOOST_STATECHART_DETAIL_LEAF_STATE_HPP_INCLUDED +////////////////////////////////////////////////////////////////////////////// +// Copyright 2002-2006 Andreas Huber Doenni +// Distributed under the Boost Software License, Version 1.0. (See accompany- +// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +////////////////////////////////////////////////////////////////////////////// + + + +#include <boost/statechart/detail/state_base.hpp> + + + +namespace boost +{ +namespace statechart +{ +namespace detail +{ + + + +////////////////////////////////////////////////////////////////////////////// +template< class Allocator, class RttiPolicy > +class leaf_state : public state_base< Allocator, RttiPolicy > +{ + typedef state_base< Allocator, RttiPolicy > base_type; + protected: + ////////////////////////////////////////////////////////////////////////// + leaf_state( typename RttiPolicy::id_provider_type idProvider ) : + base_type( idProvider ) + { + } + + ~leaf_state() {} + + public: + ////////////////////////////////////////////////////////////////////////// + // The following declarations should be private. + // They are only public because many compilers lack template friends. + ////////////////////////////////////////////////////////////////////////// + void set_list_position( + typename base_type::state_list_type::iterator listPosition ) + { + listPosition_ = listPosition; + } + + typedef typename base_type::leaf_state_ptr_type + direct_state_base_ptr_type; + + virtual void remove_from_state_list( + typename base_type::state_list_type::iterator & statesEnd, + typename base_type::node_state_base_ptr_type & pOutermostUnstableState, + bool performFullExit ) + { + --statesEnd; + swap( *listPosition_, *statesEnd ); + ( *listPosition_ )->set_list_position( listPosition_ ); + direct_state_base_ptr_type & pState = *statesEnd; + // Because the list owns the leaf_state, this leads to the immediate + // termination of this state. + pState->exit_impl( pState, pOutermostUnstableState, performFullExit ); + } + + virtual void exit_impl( + direct_state_base_ptr_type & pSelf, + typename base_type::node_state_base_ptr_type & pOutermostUnstableState, + bool performFullExit ) = 0; + + private: + ////////////////////////////////////////////////////////////////////////// + typename base_type::state_list_type::iterator listPosition_; +}; + + + +} // namespace detail +} // namespace statechart +} // namespace boost + + + +#endif