1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- /*=============================================================================
- Copyright (c) 2005-2010 Joel de Guzman
- Copyright (c) 2010 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_PHOENIX_CORE_DOMAIN_HPP
- #define BOOST_PHOENIX_CORE_DOMAIN_HPP
- #include <boost/phoenix/core/limits.hpp>
- #include <boost/proto/matches.hpp>
- #include <boost/proto/transform/call.hpp>
- #include <boost/proto/transform/when.hpp>
- #include <boost/proto/domain.hpp>
- namespace boost { namespace phoenix
- {
- template <typename Expr>
- struct actor;
-
- struct meta_grammar;
- struct phoenix_generator
- : proto::switch_<phoenix_generator>
- {
- BOOST_PROTO_USE_BASIC_EXPR()
- template<typename Tag>
- struct case_
- : proto::otherwise<proto::call<proto::pod_generator<actor>(proto::_)> >
- {};
- };
- // proto's assignment operator takes rhs by reference
- template<>
- struct phoenix_generator::case_<proto::tag::assign>
- : proto::otherwise<proto::call<proto::compose_generators<
- proto::by_value_generator
- , proto::pod_generator<actor>
- >(proto::_)> >
- {};
- // proto's subscript operator takes rhs by reference
- template<>
- struct phoenix_generator::case_<proto::tag::subscript>
- : proto::otherwise<proto::call<proto::compose_generators<
- proto::by_value_generator
- , proto::pod_generator<actor>
- >(proto::_)> >
- {};
- struct phoenix_default_domain
- : proto::domain<
- proto::basic_default_generator
- , proto::_
- , proto::basic_default_domain
- >
- {
- template <typename T>
- struct as_child
- //: proto_base_domain::as_expr<T> // proto lambda example.
- : as_expr<T>
- {};
- };
- struct phoenix_domain
- : proto::domain<
- phoenix_generator
- , meta_grammar
- , proto::basic_default_domain
- >
- {
- template <typename T>
- struct as_child
- //: proto_base_domain::as_expr<T> // proto lambda example.
- : as_expr<T>
- {};
- };
- }}
- #endif
|