Changeset 44655


Ignore:
Timestamp:
Apr 20, 2008, 9:39:36 PM (10 years ago)
Author:
Hartmut Kaiser
Message:

Spirit.Lex: Fixed wrap_action

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/boost/spirit/home/lex/lexer/lexertl/wrap_action.hpp

    r44651 r44655  
    1616#include <boost/spirit/home/phoenix/scope.hpp>
    1717
    18 #include <boost/bind.hpp>
    19 
    2018///////////////////////////////////////////////////////////////////////////////
    2119namespace boost { namespace spirit { namespace lex { namespace detail
     
    3230
    3331        // wrap phoenix actor, make sure first argument is a fusion sequence
    34         //~ template <typename Eval>
    35         //~ static void phoenix_action(phoenix::actor<Eval> const& f,
    36             //~ Attribute const& attr, std::size_t id, bool& pass, Context& ctx)
    37         //~ {
    38             //~ f(spirit::detail::pass_value<Attribute const>::call(attr), id, pass, ctx);
    39         //~ }
    40 
    41          struct phoenix_action
    42          {
    43              template <typename F, typename T1, typename T2, typename T3, typename T4>
    44              struct result { typedef void type; };
    45 
    46              template <typename Eval>
    47              void
    48              operator()(phoenix::actor<Eval> const& f, Attribute const& attr,
    49                  std::size_t id, bool& pass, Context& ctx) const
    50              {
    51                  f(spirit::detail::pass_value<Attribute const>::call(attr), id, pass, ctx);
    52              }
    53          };
     32        struct phoenix_action
     33        {
     34            template <typename F, typename T1, typename T2, typename T3, typename T4>
     35            struct result { typedef void type; };
     36           
     37            template <typename Eval>
     38            void
     39            operator()(phoenix::actor<Eval> const& f, Attribute const& attr,
     40                std::size_t id, bool& pass, Context& ctx) const
     41            {
     42                f (spirit::detail::pass_value<Attribute const>::call(attr),
     43                    id, pass, ctx);
     44            }
     45        };
    5446
    5547        template <typename Eval>
    5648        static FunctionType call(phoenix::actor<Eval> const& f)
    5749        {
    58              using phoenix::arg_names::_1;
    59              using phoenix::arg_names::_2;
    60              using phoenix::arg_names::_3;
    61              using phoenix::arg_names::_4;
    62 
    63              //~ void (*pf)(phoenix::actor<Eval> const&,
    64                  //~ Attribute const&, std::size_t, bool&, Context&) =
    65                      //~ &wrap_action::phoenix_action;
    66 
    67              //~ return phoenix::bind(pf, f, arg1, arg2, arg3, arg4);
    68 
    69              return phoenix::bind(phoenix_action(), phoenix::lambda[f], _1, _2, _3, _4);
    70 
    71              //~ return phoenix::bind(phoenix::lambda[f], f, _1, _2, _3, _4);
    72 
    73              //~ return boost::bind(pf, f, _1, _2, _3, _4);
    74              //~ return phoenix::bind(pf, f, _1, _2, _3, _4);
    75 
    76             //~ return boost::bind(
    77                 //~ &wrap_action::phoenix_action<Eval>, f, _1, _2, _3, _4);
     50            using phoenix::arg_names::_1;
     51            using phoenix::arg_names::_2;
     52            using phoenix::arg_names::_3;
     53            using phoenix::arg_names::_4;
     54            return phoenix::bind(phoenix_action(), phoenix::lambda[f],
     55                _1, _2, _3, _4);
    7856        }
    7957
     
    8967        static FunctionType call(void(*f)(A0, A1, A2))
    9068        {
     69            void (*pf)(void(*)(A0, A1, A2), Attribute const&, std::size_t,
     70                bool&, Context&) = &wrap_action::arg3_action;
     71
    9172            using phoenix::arg_names::_1;
    9273            using phoenix::arg_names::_2;
    9374            using phoenix::arg_names::_3;
    94 
    95             void (*pf)(void(*)(A0, A1, A2), Attribute const&, std::size_t, bool&, Context&) =
    96                 &wrap_action::arg3_action;
    97 
    98             //~ return boost::bind(pf, f, _1, _2, _3);
    9975            return phoenix::bind(pf, f, _1, _2, _3);
    10076        }
     
    11187        static FunctionType call(void(*f)(A0, A1))
    11288        {
     89            void (*pf)(void(*)(A0, A1), Attribute const&, std::size_t,
     90                bool&, Context&) = &wrap_action::arg2_action;
     91
    11392            using phoenix::arg_names::_1;
    11493            using phoenix::arg_names::_2;
    115 
    116             void (*pf)(void(*)(A0, A1), Attribute const&, std::size_t, bool&, Context&) =
    117                 &wrap_action::arg2_action;
    118 
    119             //~ return boost::bind(pf, f, _1, _2);
    12094            return phoenix::bind(pf, f, _1, _2);
    12195        }
     
    132106        static FunctionType call(void(*f)(A0))
    133107        {
    134             void (*pf)(void(*)(A0), Attribute const&, std::size_t, bool&, Context&) =
    135                 &arg1_action;
     108            void (*pf)(void(*)(A0), Attribute const&, std::size_t,
     109                bool&, Context&) = &arg1_action;
    136110
    137111            using phoenix::arg_names::_1;
    138112            return phoenix::bind(pf, f, _1);
    139             //~ return boost::bind(pf, f, _1);
    140113        }
    141114    };
Note: See TracChangeset for help on using the changeset viewer.