| /*============================================================================= |
| Copyright (c) 2001-2007 Joel de Guzman |
| |
| 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 PHOENIX_CORE_BASIC_ENVIRONMENT_HPP |
| #define PHOENIX_CORE_BASIC_ENVIRONMENT_HPP |
| |
| #include <boost/spirit/home/phoenix/core/limits.hpp> |
| #include <boost/mpl/remove.hpp> |
| #include <boost/mpl/transform.hpp> |
| #include <boost/preprocessor/cat.hpp> |
| #include <boost/preprocessor/repetition/enum_params.hpp> |
| #include <boost/preprocessor/repetition/enum_params_with_a_default.hpp> |
| #include <boost/type_traits/add_reference.hpp> |
| #include <boost/fusion/include/as_vector.hpp> |
| #include <boost/fusion/include/mpl.hpp> |
| |
| namespace boost { namespace phoenix |
| { |
| template < |
| BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( |
| PHOENIX_ARG_LIMIT, typename T, fusion::void_)> |
| class basic_environment |
| { |
| typedef |
| mpl::BOOST_PP_CAT(vector, PHOENIX_ARG_LIMIT)< |
| BOOST_PP_ENUM_PARAMS(PHOENIX_ARG_LIMIT, T)> |
| args_with_void_type; |
| |
| public: |
| |
| // args_type: the list of types in an mpl::sequence |
| typedef typename |
| mpl::remove<args_with_void_type, fusion::void_>::type |
| args_type; |
| |
| // tie_type: a fusion::tuple of references |
| typedef typename |
| fusion::result_of::as_vector< |
| typename mpl::transform< |
| args_type, boost::add_reference<mpl::_1> |
| >::type |
| >::type |
| tie_type; |
| |
| basic_environment() |
| : args_() {} |
| |
| template <typename U0> |
| explicit basic_environment(U0& _0) |
| : args_(_0) {} |
| |
| template <typename U0, typename U1> |
| basic_environment(U0& _0, U1& _1) |
| : args_(_0, _1) {} |
| |
| // Bring in the rest of the constructors |
| #include <boost/spirit/home/phoenix/core/detail/basic_environment.hpp> |
| |
| tie_type const& |
| args() const |
| { |
| return args_; |
| } |
| |
| tie_type& |
| args() |
| { |
| return args_; |
| } |
| |
| private: |
| |
| tie_type args_; |
| }; |
| }} |
| |
| #endif |
| |