📄 flow_control.hpp
字号:
///////////////////////////////////////////////////////////////////////////////// flow_control.hpp//// Copyright 2008 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_FLOW_CONTROL_HPP_EAN_10_04_2005#define BOOST_XPRESSIVE_DETAIL_CORE_FLOW_CONTROL_HPP_EAN_10_04_2005// MS compatible compilers support #pragma once#if defined(_MSC_VER) && (_MSC_VER >= 1020)# pragma once#endif#include <boost/xpressive/detail/detail_fwd.hpp>#include <boost/xpressive/detail/core/regex_impl.hpp>#include <boost/xpressive/detail/core/state.hpp>#include <boost/xpressive/detail/utility/ignore_unused.hpp>namespace boost { namespace xpressive { namespace detail{///////////////////////////////////////////////////////////////////////////////// push_context_match//template<typename BidiIter>inline bool push_context_match( regex_impl<BidiIter> const &impl , match_state<BidiIter> &state , matchable<BidiIter> const &next){ // avoid infinite recursion // BUGBUG this only catches direct infinite recursion, like sregex::compile("(?R)"), but // not indirect infinite recursion where two rules invoke each other recursively. if(state.is_active_regex(impl) && state.cur_ == state.sub_match(0).begin_) { return next.match(state); } // save state match_context<BidiIter> context = state.push_context(impl, next, context); detail::ignore_unused(context); // match the nested regex and uninitialize the match context // (reclaims the sub_match objects if necessary) return state.pop_context(impl, impl.xpr_->match(state));}///////////////////////////////////////////////////////////////////////////////// pop_context_match//template<typename BidiIter>inline bool pop_context_match(match_state<BidiIter> &state){ // save state // BUGBUG nested regex could have changed state.traits_ match_context<BidiIter> &context(*state.context_.prev_context_); state.swap_context(context); // Finished matching the nested regex; now match the rest of the enclosing regex bool success = context.next_ptr_->match(state); // restore state state.swap_context(context); return success;}}}} // namespace boost::xpressive::detail#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -