EVOLUTION-MANAGER
Edit File: swap_actor.hpp
/*============================================================================= Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com) http://spirit.sourceforge.net/ Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) =============================================================================*/ #ifndef BOOST_SPIRIT_ACTOR_SWAP_ACTOR_HPP #define BOOST_SPIRIT_ACTOR_SWAP_ACTOR_HPP #include <boost/spirit/home/classic/namespace.hpp> #include <boost/spirit/home/classic/actor/ref_value_actor.hpp> namespace boost { namespace spirit { BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN /////////////////////////////////////////////////////////////////////////// // Summary: // A semantic action policy that swaps values. // (This doc uses convention available in actors.hpp) // // Actions (what it does): // ref.swap( value_ref ); // // Policy name: // swap_action // // Policy holder, corresponding helper method: // ref_value_actor, swap_a( ref ); // ref_const_ref_actor, swap_a( ref, value_ref ); // // () operators: both // // See also ref_value_actor and ref_const_ref_actor for more details. /////////////////////////////////////////////////////////////////////////// template< typename T > class swap_actor { private: T& ref; T& swap_ref; public: swap_actor( T& ref_, T& swap_ref_) : ref(ref_), swap_ref(swap_ref_) {}; template<typename T2> void operator()(T2 const& /*val*/) const { ref.swap(swap_ref); } template<typename IteratorT> void operator()( IteratorT const& /*first*/, IteratorT const& /*last*/ ) const { ref.swap(swap_ref); } }; template< typename T > inline swap_actor<T> swap_a( T& ref_, T& swap_ref_ ) { return swap_actor<T>(ref_,swap_ref_); } BOOST_SPIRIT_CLASSIC_NAMESPACE_END }} #endif