x
Yes
No
Do you want to visit DriveHQ English website?
首页
产品服务
价格
免费试用
下载客户端
关于我们
云文件服务
|
云备份服务
|
FTP服务
|
企业邮箱服务
|
网站托管
|
客户端软件
云文件服务
云备份服务
FTP服务
企业级邮箱服务
网站托管
客户端软件
refactoring.hpp - Hosted on DriveHQ Cloud IT Platform
返回上层目录
上传
下载
共享
发布
新建文件夹
新建文件
复制
剪切
删除
粘贴
评论
升级服务
路径: \\game3dprogramming\materials\GameFactory\GameFactoryDemo\references\boost_1_35_0\boost\spirit\meta\refactoring.hpp
旋转
特效
属性
历史版本
/*============================================================================= Copyright (c) 2002-2003 Hartmut Kaiser http://spirit.sourceforge.net/ Use, modification and distribution is subject to 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_REFACTORING_HPP #define BOOST_SPIRIT_REFACTORING_HPP /////////////////////////////////////////////////////////////////////////////// #include
#include
#include
#include
#include
/////////////////////////////////////////////////////////////////////////////// namespace boost { namespace spirit { /////////////////////////////////////////////////////////////////////////////// // // refactor_unary_parser class // // This helper template allows to attach an unary operation to a newly // constructed parser, which combines the subject of the left operand of // the original given parser (BinaryT) with the right operand of the // original binary parser through the original binary operation and // rewraps the resulting parser with the original unary operator. // // For instance given the parser: // *some_parser - another_parser // // will be refactored to: // *(some_parser - another_parser) // // If the parser to refactor is not a unary parser, no refactoring is done // at all. // // The original parser should be a binary_parser_category parser, // else the compilation will fail // /////////////////////////////////////////////////////////////////////////////// template
class refactor_unary_gen; template
class refactor_unary_parser : public parser
> { public: // the parser to refactor has to be at least a binary_parser_category // parser BOOST_STATIC_ASSERT(( boost::is_convertible
::value )); refactor_unary_parser(BinaryT const& binary_, NestedT const& nested_) : binary(binary_), nested(nested_) {} typedef refactor_unary_parser
self_t; typedef refactor_unary_gen
parser_generator_t; typedef typename BinaryT::left_t::parser_category_t parser_category_t; template
typename parser_result
::type parse(ScannerT const& scan) const { return impl::refactor_unary_type
:: parse(*this, scan, binary, nested); } private: typename as_parser
::type::embed_t binary; typename NestedT::embed_t nested; }; ////////////////////////////////// template
class refactor_unary_gen { public: typedef refactor_unary_gen
embed_t; refactor_unary_gen(NestedT const& nested_ = non_nested_refactoring()) : nested(nested_) {} template
refactor_unary_parser
operator[](parser
const& subject) const { return refactor_unary_parser
(subject.derived(), nested); } private: typename NestedT::embed_t nested; }; const refactor_unary_gen<> refactor_unary_d = refactor_unary_gen<>(); /////////////////////////////////////////////////////////////////////////////// // // refactor_action_parser class // // This helper template allows to attach an action taken from the left // operand of the given binary parser to a newly constructed parser, // which combines the subject of the left operand of the original binary // parser with the right operand of the original binary parser by means of // the original binary operator parser. // // For instance the parser: // some_parser[some_attached_functor] - another_parser // // will be refactored to: // (some_parser - another_parser)[some_attached_functor] // // If the left operand to refactor is not an action parser, no refactoring // is done at all. // // The original parser should be a binary_parser_category parser, // else the compilation will fail // /////////////////////////////////////////////////////////////////////////////// template
class refactor_action_gen; template
class refactor_action_parser : public parser
> { public: // the parser to refactor has to be at least a binary_parser_category // parser BOOST_STATIC_ASSERT(( boost::is_convertible
::value )); refactor_action_parser(BinaryT const& binary_, NestedT const& nested_) : binary(binary_), nested(nested_) {} typedef refactor_action_parser
self_t; typedef refactor_action_gen
parser_generator_t; typedef typename BinaryT::left_t::parser_category_t parser_category_t; template
typename parser_result
::type parse(ScannerT const& scan) const { return impl::refactor_action_type
:: parse(*this, scan, binary, nested); } private: typename as_parser
::type::embed_t binary; typename NestedT::embed_t nested; }; ////////////////////////////////// template
class refactor_action_gen { public: typedef refactor_action_gen
embed_t; refactor_action_gen(NestedT const& nested_ = non_nested_refactoring()) : nested(nested_) {} template
refactor_action_parser
operator[](parser
const& subject) const { return refactor_action_parser
(subject.derived(), nested); } private: typename NestedT::embed_t nested; }; const refactor_action_gen<> refactor_action_d = refactor_action_gen<>(); /////////////////////////////////////////////////////////////////////////////// // // attach_action_parser class // // This helper template allows to attach an action given separately // to to all parsers, out of which the given parser is constructed and // reconstructs a new parser having the same structure. // // For instance the parser: // (some_parser >> another_parser)[some_attached_functor] // // will be refactored to: // some_parser[some_attached_functor] // >> another_parser[some_attached_functor] // // The original parser should be a action_parser_category parser, // else the compilation will fail // // If the parser, to which the action is attached is not an binary parser, // no refactoring is done at all. // /////////////////////////////////////////////////////////////////////////////// template
class attach_action_gen; template
class attach_action_parser : public parser
> { public: // the parser to refactor has to be at least a action_parser_category // parser BOOST_STATIC_ASSERT(( boost::is_convertible
::value )); attach_action_parser(ActionT const& actor_, NestedT const& nested_) : actor(actor_), nested(nested_) {} typedef attach_action_parser
self_t; typedef attach_action_gen
parser_generator_t; typedef typename ActionT::parser_category_t parser_category_t; template
typename parser_result
::type parse(ScannerT const& scan) const { return impl::attach_action_type
:: parse(*this, scan, actor, nested); } private: typename as_parser
::type::embed_t actor; typename NestedT::embed_t nested; }; ////////////////////////////////// template
class attach_action_gen { public: typedef attach_action_gen
embed_t; attach_action_gen(NestedT const& nested_ = non_nested_refactoring()) : nested(nested_) {} template
attach_action_parser
, NestedT> operator[](action
const& actor) const { return attach_action_parser
, NestedT> (actor, nested); } private: typename NestedT::embed_t nested; }; const attach_action_gen<> attach_action_d = attach_action_gen<>(); /////////////////////////////////////////////////////////////////////////////// }} // namespace boost::spirit #endif // BOOST_SPIRIT_REFACTORING_HPP
refactoring.hpp
网页地址
文件地址
上一页
4/5
下一页
下载
( 9 KB )
Comments
Total ratings:
0
Average rating:
无评论
of 10
Would you like to comment?
Join now
, or
Logon
if you are already a member.