DriveHQ Start Menu
Cloud Drive Mapping
Folder Sync
Cloud Backup
True Drop Box
FTP/SFTP Hosting
Group Account
DriveHQ Start Menu
Online File Server
My Storage
|
Manage Shares
|
Publishes
|
Drop Boxes
|
Group Account
WebDAV Drive Mapping
Cloud Drive Home
|
WebDAV Guide
|
Drive Mapping Tool
|
Drive Mapping URL
Complete Data Backup
Backup Guide
|
Online Backup Tool
|
Cloud-to-Cloud Backup
FTP, Email & Web Service
FTP Home
|
FTP Hosting FAQ
|
Email Hosting
|
EmailManager
|
Web Hosting
Help & Resources
About
|
Enterprise Service
|
Partnership
|
Comparisons
|
Support
Quick Links
Security and Privacy
Download Software
Service Manual
Use Cases
Group Account
Online Help
Blog
Contact
Cloud Surveillance
Sign Up
Login
Features
Business Features
Online File Server
FTP Hosting
Cloud Drive Mapping
Cloud File Backup
Email Backup & Hosting
Cloud File Sharing
Folder Synchronization
Group Management
True Drop Box
Full-text Search
AD Integration/SSO
Mobile Access
IP Camera & DVR Solution
More...
Personal Features
Personal Cloud Drive
Backup All Devices
Mobile APPs
Personal Web Hosting
Sub-Account (for Kids)
Home/PC/Kids Monitoring
More...
Software
DriveHQ Drive Mapping Tool
DriveHQ FileManager
DriveHQ Online Backup
DriveHQ Mobile Apps
Pricing
Business Plans & Pricing
Personal Plans & Pricing
Price Comparison with Others
Feature Comparison with Others
Install Mobile App
Sign up
Creating account...
Invalid character in username! Only 0-9, a-z, A-Z, _, -, . allowed.
Username is required!
Invalid email address!
E-mail is required!
Password is required!
Password is invalid!
Password and confirmation do not match.
Confirm password is required!
I accept
Membership Agreement
Please read the Membership Agreement and check "I accept"!
Free Quick Sign-up
Sign-up Page
Log in
Signing in...
Username or e-mail address is required!
Password is required!
Keep me logged in
Quick Login
Forgot Password
Up
Upload
Download
Share
Publish
New Folder
New File
Copy
Cut
Delete
Paste
Rate
Upgrade
Rotate
Effect
Edit
Slide
History
/////////////////////////////////////////////////////////////////////////////// // action_matcher.hpp // // Copyright 2007 Eric Niebler. // Copyright 2007 David Jenkins. // // 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_MATCHER_ACTION_MATCHER_HPP_EAN_10_04_2005 #define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_ACTION_MATCHER_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
#include
// for type_info_less #include
// for 'read_attr' #if BOOST_VERSION >= 103500 # include
# include
# include
# include
# include
#endif namespace boost { namespace xpressive { namespace detail { #if BOOST_VERSION >= 103500 struct DataMember : proto::mem_ptr
> {}; template
struct child_ : remove_reference
, typename proto::result_of::arg_c
::const_reference , typename proto::result_of::arg_c
::reference >::type> {}; /////////////////////////////////////////////////////////////////////////////// // mem_ptr_eval // Rewrites expressions of the form x->*foo(a) into foo(x, a) and then // evaluates them. template
::value> struct mem_ptr_eval { typedef typename child_
::type left_type; typedef typename child_
::type right_type; typedef typename proto::result_of::arg< typename proto::result_of::arg_c
::type >::type function_type; typedef fusion::transform_view< typename fusion::result_of::push_front< typename fusion::result_of::pop_front
>::type const , reference_wrapper
>::type const , proto::eval_fun
> evaluated_args; typedef typename fusion::result_of::invoke
::type result_type; result_type operator()(Expr &expr, Context &ctx) const { return fusion::invoke
( proto::arg(proto::arg_c<0>(proto::right(expr))) , evaluated_args( fusion::push_front(fusion::pop_front(proto::children_of(proto::right(expr))), boost::ref(proto::left(expr))) , proto::eval_fun
(ctx) ) ); } }; /////////////////////////////////////////////////////////////////////////////// // mem_ptr_eval // Rewrites expressions of the form x->*foo into foo(x) and then // evaluates them. template
struct mem_ptr_eval
{ typedef typename child_
::type left_type; typedef typename child_
::type right_type; typedef typename proto::result_of::arg
::type function_type; typedef typename boost::result_of< function_type(typename proto::result_of::eval
::type) >::type result_type; result_type operator()(Expr &expr, Context &ctx) const { return proto::arg(proto::right(expr))( proto::eval(proto::left(expr), ctx) ); } }; #endif struct attr_with_default_tag {}; template
struct opt; /////////////////////////////////////////////////////////////////////////////// // action_context // struct action_context { explicit action_context(action_args_type *action_args) : action_args_(action_args) {} action_args_type const &args() const { return *this->action_args_; } // eval_terminal template
struct eval_terminal : proto::default_eval
{}; template
struct eval_terminal
> { typedef Arg &result_type; result_type operator()(Expr &expr, action_context const &) const { return proto::arg(expr).get(); } }; template
struct eval_terminal
> { typedef Arg const &result_type; result_type operator()(Expr &expr, action_context const &) const { return proto::arg(expr); } }; template
struct eval_terminal
> { typedef typename action_arg
::reference result_type; result_type operator()(Expr &expr, action_context const &ctx) const { action_args_type::const_iterator where_ = ctx.args().find(&typeid(proto::arg(expr))); if(where_ == ctx.args().end()) { boost::throw_exception( regex_error( regex_constants::error_badarg , "An argument to an action was unspecified" ) ); } return proto::arg(expr).cast(where_->second); } }; // eval template
struct eval : proto::default_eval
{}; template
struct eval
: eval_terminal
::type> {}; // Evaluate attributes like a1|42 template
struct eval
{ typedef typename proto::result_of::arg< typename proto::result_of::left< typename proto::result_of::arg< Expr >::type >::type >::type temp_type; typedef typename temp_type::type result_type; result_type operator ()(Expr const &expr, action_context const &ctx) const { return proto::arg(proto::left(proto::arg(expr))).t_ ? *proto::arg(proto::left(proto::arg(expr))).t_ : proto::eval(proto::right(proto::arg(expr)), ctx); } }; #if BOOST_VERSION >= 103500 template
struct eval
: mem_ptr_eval
{}; #endif private: action_args_type *action_args_; }; /////////////////////////////////////////////////////////////////////////////// // action // template
struct action : actionable { action(Actor const &actor) : actionable() , actor_(actor) { } virtual void execute(action_args_type *action_args) const { action_context const ctx(action_args); proto::eval(this->actor_, ctx); } private: Actor actor_; }; /////////////////////////////////////////////////////////////////////////////// // subreg_transform // template
struct subreg_transform : Grammar { subreg_transform(); template
struct apply : proto::terminal
> {}; template
static typename apply
::type call(Expr const &, State const &state, Visitor &visitor) { sub_match
const &sub = state.sub_matches_[ visitor ]; return proto::as_expr(sub); } }; /////////////////////////////////////////////////////////////////////////////// // mark_transform // template
struct mark_transform : Grammar { mark_transform(); template
struct apply : proto::terminal
> {}; template
static typename apply
::type call(Expr const &expr, State const &state, Visitor &) { sub_match
const &sub = state.sub_matches_[ proto::arg(expr).mark_number_ ]; return proto::as_expr(sub); } }; /////////////////////////////////////////////////////////////////////////////// // opt // template
struct opt { typedef T type; typedef T const &reference; opt(T const *t) : t_(t) {} operator reference() const { detail::ensure(0 != this->t_, regex_constants::error_badattr, "Use of uninitialized regex attribute"); return *this->t_; } T const *t_; }; /////////////////////////////////////////////////////////////////////////////// // attr_transform // template
struct attr_transform : Grammar { attr_transform(); template
struct apply : proto::result_of::as_expr< opt
> {}; template
static typename apply
::type call(Expr const &, State const &state, Visitor &) { typedef typename Expr::proto_arg0::matcher_type::value_type::second_type attr_type; int slot = typename Expr::proto_arg0::nbr_type(); attr_type const *attr = static_cast
(state.attr_context_.attr_slots_[slot-1]); return proto::as_expr(opt
(attr)); } }; /////////////////////////////////////////////////////////////////////////////// // attr_with_default_transform // template
struct attr_with_default_transform : Grammar { attr_with_default_transform(); template
struct apply : proto::unary_expr< attr_with_default_tag , typename Grammar::template apply
::type > {}; template
static typename apply
::type call(Expr const &expr, State const &state, Visitor &visitor) { typename apply
::type that = { Grammar::call(expr, state, visitor) }; return that; } }; /////////////////////////////////////////////////////////////////////////////// // by_ref_transform // template
struct by_ref_transform : Grammar { by_ref_transform(); template
struct apply : proto::terminal
::const_reference> {}; template
static typename apply
::type call(Expr const &expr, State const &, Visitor &) { return apply
::type::make(proto::arg(expr)); } }; /////////////////////////////////////////////////////////////////////////////// // BindActionArgs // struct BindActionArgs : proto::or_< subreg_transform
> , mark_transform
> , attr_transform
> > , by_ref_transform
> , attr_with_default_transform< proto::bitwise_or< attr_transform
> > , BindActionArgs > > , proto::nary_expr
> > {}; /////////////////////////////////////////////////////////////////////////////// // action_matcher // template
struct action_matcher : quant_style
{ int sub_; Actor actor_; action_matcher(Actor const &actor, int sub) : sub_(sub) , actor_(actor) { } template
bool match(match_state
&state, Next const &next) const { // Bind the arguments typedef typename BindActionArgs::apply
, int>::type action_type; action
actor(BindActionArgs::call(this->actor_, state, this->sub_)); // Put the action in the action list actionable const **action_list_tail = state.action_list_tail_; *state.action_list_tail_ = &actor; state.action_list_tail_ = &actor.next; // Match the rest of the pattern if(next.match(state)) { return true; } BOOST_ASSERT(0 == actor.next); // remove action from list *action_list_tail = 0; state.action_list_tail_ = action_list_tail; return false; } }; }}} #endif
action_matcher.hpp
Page URL
File URL
Prev 1/36
Next
Download
( 15 KB )
Note: The DriveHQ service banners will NOT be displayed if the file owner is a paid member.
Comments
Total ratings:
0
Average rating:
Not Rated
Would you like to comment?
Join DriveHQ
for a free account, or
Logon
if you are already a member.