boost/xpressive/detail/core/action.hpp
/////////////////////////////////////////////////////////////////////////////// // action.hpp // // Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_ACTION_HPP_EAN_10_04_2005 #define BOOST_XPRESSIVE_DETAIL_CORE_ACTION_HPP_EAN_10_04_2005 // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #include <typeinfo> #include <stdexcept> #include <boost/xpressive/detail/detail_fwd.hpp> #include <boost/xpressive/detail/core/quant_style.hpp> #include <boost/xpressive/detail/core/action_state.hpp> #include <boost/xpressive/detail/core/matcher/action_matcher.hpp> namespace boost { namespace xpressive { /////////////////////////////////////////////////////////////////////////////// // action // template<typename Action, typename Saved> struct action : detail::action_matcher<Action> { typedef Action action_type; typedef Saved saved_type; Saved &save() { return *static_cast<Saved *>(this); } template<typename BidiIter> bool operator ()(match_results<BidiIter> const &match, BidiIter cur) { return true; } void restore(Saved const &saved) { this->action_() = saved; } }; template<typename Action> struct action<Action, void> : action<Action, int> { int save() { return 0; } void restore(int) { } }; }} // namespace boost::xpressive #endif