x
Yes
No
Do you want to visit DriveHQ English website?
首页
产品服务
价格
免费试用
下载客户端
关于我们
云文件服务
|
云备份服务
|
FTP服务
|
企业邮箱服务
|
网站托管
|
客户端软件
云文件服务
云备份服务
FTP服务
企业级邮箱服务
网站托管
客户端软件
linker.hpp - Hosted on DriveHQ Cloud IT Platform
返回上层目录
上传
下载
共享
发布
新建文件夹
新建文件
复制
剪切
删除
粘贴
评论
升级服务
路径: \\game3dprogramming\materials\GameFactory\GameFactoryDemo\references\boost_1_35_0\boost\xpressive\detail\core\linker.hpp
旋转
特效
属性
历史版本
/////////////////////////////////////////////////////////////////////////////// // linker.hpp // // Copyright 2007 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_LINKER_HPP_EAN_10_04_2005 #define BOOST_XPRESSIVE_DETAIL_CORE_LINKER_HPP_EAN_10_04_2005 // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #include
#ifndef BOOST_NO_STD_LOCALE # include
#endif #include
#include
#include
#include
#include
#include
#if BOOST_VERSION >= 103500 # include
#else # include
#endif #include
#include
#include
#include
#include
namespace boost { namespace xpressive { namespace detail { /////////////////////////////////////////////////////////////////////////////// // icase_modifier // // wrapped by the modifier<> template and inserted into the xpression // template with the icase() helper function. icase_modifier morphs // a case-sensitive visitor into a case-insensitive visitor, which // causes all matchers visited to become case-insensitive. // struct icase_modifier { template
struct apply {}; template
struct apply
> { typedef xpression_visitor
type; }; template
static typename apply
::type call(Visitor &visitor) { return typename apply
::type(visitor.traits(), visitor.self()); } }; /////////////////////////////////////////////////////////////////////////////// // regex_traits_type : wrap a locale in the appropriate regex_traits // template
struct regex_traits_type { #ifndef BOOST_NO_STD_LOCALE typedef typename iterator_value
::type char_type; // if Locale is std::locale, wrap it in a cpp_regex_traits
typedef typename mpl::if_ < is_same
, cpp_regex_traits
, Locale >::type type; #else typedef Locale type; #endif }; /////////////////////////////////////////////////////////////////////////////// // locale_modifier // // wrapped by the modifier<> template and inserted into the xpression // template with the imbue() helper function. Causes a sub-xpression to // use the specified Locale // template
struct locale_modifier { typedef Locale locale_type; locale_modifier(Locale const &loc) : loc_(loc) { } template
struct apply {}; template
struct apply
> { typedef typename regex_traits_type
::type traits_type; typedef xpression_visitor
type; }; template
typename apply
::type call(Visitor &visitor) const { return typename apply
::type(this->loc_, visitor.self()); } Locale getloc() const { return this->loc_; } private: Locale loc_; }; /////////////////////////////////////////////////////////////////////////////// // xpression_linker // template
struct xpression_linker { template
explicit xpression_linker(Traits const &traits) : back_stack_() , traits_(&traits) , traits_type_(&typeid(Traits)) { } template
void accept(Matcher const &, void const *) { // no-op } void accept(repeat_begin_matcher const &, void const *next) { this->back_stack_.push(next); } template
void accept(repeat_end_matcher
const &matcher, void const *) { matcher.back_ = this->back_stack_.top(); this->back_stack_.pop(); } template
void accept(alternate_matcher
const &matcher, void const *next) { xpression_peeker
peeker(matcher.bset_, this->get_traits
()); this->alt_link(matcher.alternates_, next, &peeker); } void accept(alternate_end_matcher const &matcher, void const *) { matcher.back_ = this->back_stack_.top(); this->back_stack_.pop(); } template
void accept(optional_matcher
const &matcher, void const *next) { this->back_stack_.push(next); matcher.xpr_.link(*this); } template
void accept(optional_mark_matcher
const &matcher, void const *next) { this->back_stack_.push(next); matcher.xpr_.link(*this); } template
void accept(keeper_matcher
const &matcher, void const *) { matcher.xpr_.link(*this); } template
void accept(lookahead_matcher
const &matcher, void const *) { matcher.xpr_.link(*this); } template
void accept(lookbehind_matcher
const &matcher, void const *) { matcher.xpr_.link(*this); } template
void accept(simple_repeat_matcher
const &matcher, void const *) { matcher.xpr_.link(*this); } // for use by alt_link_pred below template
void alt_branch_link(Xpr const &xpr, void const *next, xpression_peeker
*peeker) { this->back_stack_.push(next); xpr.link(*this); xpr.peek(*peeker); } private: /////////////////////////////////////////////////////////////////////////////// // alt_link_pred // struct alt_link_pred { xpression_linker
*linker_; xpression_peeker
*peeker_; void const *next_; alt_link_pred ( xpression_linker
*linker , xpression_peeker
*peeker , void const *next ) : linker_(linker) , peeker_(peeker) , next_(next) { } template
void operator ()(Xpr const &xpr) const { this->linker_->alt_branch_link(xpr, this->next_, this->peeker_); } }; template
void alt_link ( alternates_vector
const &alternates , void const *next , xpression_peeker
*peeker ) { std::for_each(alternates.begin(), alternates.end(), alt_link_pred(this, peeker, next)); } template
void alt_link ( fusion::sequence_base
const &alternates , void const *next , xpression_peeker
*peeker ) { #if BOOST_VERSION >= 103500 fusion::for_each(alternates.derived(), alt_link_pred(this, peeker, next)); #else fusion::for_each(alternates.cast(), alt_link_pred(this, peeker, next)); #endif } template
Traits const &get_traits() const { BOOST_ASSERT(*this->traits_type_ == typeid(Traits)); return *static_cast
(this->traits_); } std::stack
back_stack_; void const *traits_; std::type_info const *traits_type_; }; }}} // namespace boost::xpressive::detail #endif
linker.hpp
网页地址
文件地址
上一页
7/16
下一页
下载
( 8 KB )
Comments
Total ratings:
0
Average rating:
无评论
of 10
Would you like to comment?
Join now
, or
Logon
if you are already a member.