x
Yes
No
Do you want to visit DriveHQ English website?
首页
产品服务
价格
免费试用
下载客户端
关于我们
云文件服务
|
云备份服务
|
FTP服务
|
企业邮箱服务
|
网站托管
|
客户端软件
云文件服务
云备份服务
FTP服务
企业级邮箱服务
网站托管
客户端软件
actions.hpp - Hosted on DriveHQ Cloud IT Platform
返回上层目录
上传
下载
共享
发布
新建文件夹
新建文件
复制
剪切
删除
粘贴
评论
升级服务
路径: \\game3dprogramming\materials\GameFactory\GameFactoryDemo\references\boost_1_35_0\boost\spirit\core\composite\actions.hpp
旋转
特效
属性
历史版本
/*============================================================================= Copyright (c) 1998-2003 Joel de Guzman 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_ACTIONS_HPP #define BOOST_SPIRIT_ACTIONS_HPP #include
#include
namespace boost { namespace spirit { /////////////////////////////////////////////////////////////////////////// // // action class // // The action class binds a parser with a user defined semantic // action. Instances of action are never created manually. Instead, // action objects are typically created indirectly through // expression templates of the form: // // p[f] // // where p is a parser and f is a function or functor. The semantic // action may be a function or a functor. When the parser is // successful, the actor calls the scanner's action_policy policy // (see scanner.hpp): // // scan.do_action(actor, attribute, first, last); // // passing in these information: // // actor: The action's function or functor // attribute: The match (returned by the parser) object's // attribute (see match.hpp) // first: Iterator pointing to the start of the matching // portion of the input // last: Iterator pointing to one past the end of the // matching portion of the input // // It is the responsibility of the scanner's action_policy policy to // dispatch the function or functor as it sees fit. The expected // function or functor signature depends on the parser being // wrapped. In general, if the attribute type of the parser being // wrapped is a nil_t, the function or functor expect the signature: // // void func(Iterator first, Iterator last); // functions // // struct ftor // functors // { // void func(Iterator first, Iterator last) const; // }; // // where Iterator is the type of the iterator that is being used and // first and last are the iterators pointing to the matching portion // of the input. // // If the attribute type of the parser being wrapped is not a nil_t, // the function or functor usually expect the signature: // // void func(T val); // functions // // struct ftor // functors // { // void func(T val) const; // }; // // where T is the attribute type and val is the attribute value // returned by the parser being wrapped. // /////////////////////////////////////////////////////////////////////////// template
class action : public unary
> > { public: typedef action
self_t; typedef action_parser_category parser_category_t; typedef unary
> base_t; typedef ActionT predicate_t; template
struct result { typedef typename parser_result
::type type; }; action(ParserT const& p, ActionT const& a) : base_t(p) , actor(a) {} template
typename parser_result
::type parse(ScannerT const& scan) const { typedef typename ScannerT::iterator_t iterator_t; typedef typename parser_result
::type result_t; scan.at_end(); // allow skipper to take effect iterator_t save = scan.first; result_t hit = this->subject().parse(scan); if (hit) { typename result_t::return_t val = hit.value(); scan.do_action(actor, val, save, scan.first); } return hit; } ActionT const& predicate() const { return actor; } private: ActionT actor; }; }} // namespace boost::spirit #endif
actions.hpp
网页地址
文件地址
上一页 1/17
下一页
下载
( 4 KB )
Comments
Total ratings:
0
Average rating:
无评论
of 10
Would you like to comment?
Join now
, or
Logon
if you are already a member.