/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2001-2011 Hartmut Kaiser Copyright (c) 2009 Francois Barel 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) ==============================================================================*/ #if !defined(BOOST_SPIRIT_EXTRACT_PARAM_AUGUST_08_2009_0848AM) #define BOOST_SPIRIT_EXTRACT_PARAM_AUGUST_08_2009_0848AM #if defined(_MSC_VER) #pragma once #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace spirit { namespace detail { /////////////////////////////////////////////////////////////////////////// // Helpers to extract params (locals, attributes, ...) from nonterminal // template arguments /////////////////////////////////////////////////////////////////////////// template struct extract_param { typedef typename mpl::find_if::type pos; typedef typename mpl::eval_if< is_same::type> , mpl::identity , mpl::deref >::type type; }; /////////////////////////////////////////////////////////////////////////// template struct extract_locals : fusion::result_of::as_vector< typename extract_param< Types , is_locals , locals<> >::type > {}; /////////////////////////////////////////////////////////////////////////// template struct extract_component : spirit::result_of::compile< Domain , typename extract_param< Types , traits::matches , unused_type >::type > {}; /////////////////////////////////////////////////////////////////////////// template struct extract_sig : extract_param< Types , function_types::is_function , void() > {}; template struct attr_from_sig { typedef typename function_types::result_type::type attr; typedef typename mpl::if_< is_same , unused_type , attr >::type type; }; template struct params_from_sig { typedef typename function_types::parameter_types::type params; typedef typename fusion::result_of::as_list::type type; }; /////////////////////////////////////////////////////////////////////////// template struct extract_encoding : extract_param< Types , is_char_encoding , unused_type > {}; }}} #endif