x
Yes
No
Do you want to visit DriveHQ English website?
首页
产品服务
价格
免费试用
下载客户端
关于我们
云文件服务
|
云备份服务
|
FTP服务
|
企业邮箱服务
|
网站托管
|
客户端软件
云文件服务
云备份服务
FTP服务
企业级邮箱服务
网站托管
客户端软件
peeker.hpp - Hosted on DriveHQ Cloud IT Platform
返回上层目录
上传
下载
共享
发布
新建文件夹
新建文件
复制
剪切
删除
粘贴
评论
升级服务
路径: \\game3dprogramming\materials\GameFactory\GameFactoryDemo\references\boost_1_35_0\boost\xpressive\detail\core\peeker.hpp
旋转
特效
属性
历史版本
/////////////////////////////////////////////////////////////////////////////// // peeker.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_PEEKER_HPP_EAN_10_04_2005 #define BOOST_XPRESSIVE_DETAIL_CORE_PEEKER_HPP_EAN_10_04_2005 // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
namespace boost { namespace xpressive { namespace detail { /////////////////////////////////////////////////////////////////////////////// // peek_next // tell whether or not to keep looking for a peek optimization template
struct peek_next : mpl::bool_
{ }; template<> struct peek_next
: mpl::true_ { }; template<> struct peek_next
: mpl::true_ { }; /////////////////////////////////////////////////////////////////////////////// // xpression_peeker // template
struct peeker_string { Char const *begin_; Char const *end_; bool icase_; }; /////////////////////////////////////////////////////////////////////////////// // char_sink // template
struct char_sink { typedef typename Traits::char_type char_type; char_sink(hash_peek_bitset
&bset, Traits const &traits) : bset_(bset) , traits_(traits) {} void operator()(char_type ch) const { this->bset_.set_char(ch, ICase, this->traits_); } hash_peek_bitset
&bset_; Traits const &traits_; }; /////////////////////////////////////////////////////////////////////////////// // xpression_peeker // template
struct xpression_peeker { template
xpression_peeker(hash_peek_bitset
&bset, Traits const &traits) : bset_(bset) , str_() , line_start_(false) , traits_(0) , traits_type_(0) { this->set_traits(traits); } /////////////////////////////////////////////////////////////////////////////// // accessors peeker_string
const &get_string() const { return this->str_; } bool line_start() const { return this->line_start_; } hash_peek_bitset
const &bitset() const { return this->bset_; } /////////////////////////////////////////////////////////////////////////////// // modifiers void fail(bool do_fail = true) { if(do_fail) { this->bset_.set_all(); } } template
peek_next
accept(Matcher const &) { this->fail(!peek_next
::value); return peek_next
(); } template
mpl::true_ accept(assert_bol_matcher
const &) { this->line_start_ = true; return mpl::true_(); } template
mpl::false_ accept(literal_matcher
const &xpr) { this->bset_.set_char(xpr.ch_, ICase, this->get_traits_
()); return mpl::false_(); } template
mpl::false_ accept(string_matcher
const &xpr) { this->bset_.set_char(xpr.str_[0], ICase, this->get_traits_
()); this->str_.begin_ = detail::data_begin(xpr.str_); this->str_.end_ = detail::data_end(xpr.str_); this->str_.icase_ = ICase; return mpl::false_(); } template
mpl::false_ accept(alternate_matcher
const &xpr) { BOOST_ASSERT(0 != xpr.bset_.count()); this->bset_.set_bitset(xpr.bset_); return mpl::false_(); } template
mpl::false_ accept(attr_matcher
const &xpr) { xpr.sym_.peek(char_sink
(this->bset_, this->get_traits_
())); return mpl::false_(); } template
mpl::false_ accept(optional_matcher
const &) { this->fail(); // a union of xpr and next return mpl::false_(); } template
mpl::false_ accept(optional_mark_matcher
const &) { this->fail(); // a union of xpr and next return mpl::false_(); } //template
//mpl::true_ accept(optional_matcher
const &xpr) //{ // xpr.xpr_.peek(*this); // a union of xpr and next // return mpl::true_(); //} //template
//mpl::true_ accept(optional_mark_matcher
const &xpr) //{ // xpr.xpr_.peek(*this); // a union of xpr and next // return mpl::true_(); //} template
mpl::false_ accept(posix_charset_matcher
const &xpr) { this->bset_.set_class(xpr.mask_, xpr.not_, this->get_traits_
()); return mpl::false_(); } template
typename enable_if
, mpl::false_>::type accept(charset_matcher
> const &xpr) { BOOST_ASSERT(0 != xpr.charset_.base().count()); this->bset_.set_charset(xpr.charset_, ICase); return mpl::false_(); } template
mpl::false_ accept(range_matcher
const &xpr) { this->bset_.set_range(xpr.ch_min_, xpr.ch_max_, xpr.not_, ICase, this->get_traits_
()); return mpl::false_(); } template
mpl::false_ accept(simple_repeat_matcher
const &xpr) { 0 != xpr.min_ ? xpr.xpr_.peek(*this) : this->fail(); // could be a union of xpr and next return mpl::false_(); } template
void set_traits(Traits const &traits) { if(0 == this->traits_) { this->traits_ = &traits; this->traits_type_ = &typeid(Traits); } else if(*this->traits_type_ != typeid(Traits) || this->get_traits_
() != traits) { this->fail(); // traits mis-match! set all and bail } } private: template
Traits const &get_traits_() const { BOOST_ASSERT(!!(*this->traits_type_ == typeid(Traits))); return *static_cast
(this->traits_); } hash_peek_bitset
&bset_; peeker_string
str_; bool str_icase_; bool line_start_; void const *traits_; std::type_info const *traits_type_; }; }}} // namespace boost::xpressive::detail #endif
peeker.hpp
网页地址
文件地址
上一页
10/16
下一页
下载
( 7 KB )
Comments
Total ratings:
0
Average rating:
无评论
of 10
Would you like to comment?
Join now
, or
Logon
if you are already a member.