diff options
author | Vlad Voicu <vladv@rosedu.org> | 2012-03-02 10:01:11 (GMT) |
---|---|---|
committer | Kevin Smith <git@kismith.co.uk> | 2012-03-09 15:04:05 (GMT) |
commit | 1c8cd160b79b6bbcec72042bdb104ba530508a93 (patch) | |
tree | cff302b81e74c557fbc9e30fd43144d981b613d0 /3rdParty/Boost/src/boost/spirit/home/support/nonterminal/extract_param.hpp | |
parent | 2944711aefec9a9dd66052440bc4f921910dd780 (diff) | |
download | swift-contrib-1c8cd160b79b6bbcec72042bdb104ba530508a93.zip swift-contrib-1c8cd160b79b6bbcec72042bdb104ba530508a93.tar.bz2 |
Added spirit to bundled boost
Diffstat (limited to '3rdParty/Boost/src/boost/spirit/home/support/nonterminal/extract_param.hpp')
-rw-r--r-- | 3rdParty/Boost/src/boost/spirit/home/support/nonterminal/extract_param.hpp | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/nonterminal/extract_param.hpp b/3rdParty/Boost/src/boost/spirit/home/support/nonterminal/extract_param.hpp new file mode 100644 index 0000000..6149932 --- /dev/null +++ b/3rdParty/Boost/src/boost/spirit/home/support/nonterminal/extract_param.hpp @@ -0,0 +1,123 @@ +/*============================================================================= + 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 <boost/spirit/home/support/meta_compiler.hpp> +#include <boost/spirit/home/support/nonterminal/locals.hpp> +#include <boost/spirit/home/support/unused.hpp> +#include <boost/spirit/home/support/common_terminals.hpp> + +#include <boost/function_types/is_function.hpp> +#include <boost/function_types/parameter_types.hpp> +#include <boost/function_types/result_type.hpp> +#include <boost/fusion/include/as_list.hpp> +#include <boost/fusion/include/as_vector.hpp> +#include <boost/mpl/deref.hpp> +#include <boost/mpl/end.hpp> +#include <boost/mpl/eval_if.hpp> +#include <boost/mpl/find_if.hpp> +#include <boost/mpl/identity.hpp> +#include <boost/mpl/if.hpp> +#include <boost/mpl/placeholders.hpp> +#include <boost/type_traits/is_same.hpp> + +namespace boost { namespace spirit { namespace detail +{ + /////////////////////////////////////////////////////////////////////////// + // Helpers to extract params (locals, attributes, ...) from nonterminal + // template arguments + /////////////////////////////////////////////////////////////////////////// + template <typename Types, typename Pred, typename Default> + struct extract_param + { + typedef typename mpl::find_if<Types, Pred>::type pos; + + typedef typename + mpl::eval_if< + is_same<pos, typename mpl::end<Types>::type> + , mpl::identity<Default> + , mpl::deref<pos> + >::type + type; + }; + + /////////////////////////////////////////////////////////////////////////// + template <typename Types> + struct extract_locals + : fusion::result_of::as_vector< + typename extract_param< + Types + , is_locals<mpl::_> + , locals<> + >::type + > + {}; + + /////////////////////////////////////////////////////////////////////////// + template <typename Domain, typename Types> + struct extract_component + : spirit::result_of::compile< + Domain + , typename extract_param< + Types + , traits::matches<Domain, mpl::_> + , unused_type + >::type + > + {}; + + /////////////////////////////////////////////////////////////////////////// + template <typename Types> + struct extract_sig + : extract_param< + Types + , function_types::is_function<mpl::_> + , void() + > + {}; + + template <typename Sig> + struct attr_from_sig + { + typedef typename function_types::result_type<Sig>::type attr; + + typedef typename + mpl::if_< + is_same<attr, void> + , unused_type + , attr + >::type + type; + }; + + template <typename Sig> + struct params_from_sig + { + typedef typename function_types::parameter_types<Sig>::type params; + + typedef typename fusion::result_of::as_list<params>::type type; + }; + + /////////////////////////////////////////////////////////////////////////// + template <typename Types> + struct extract_encoding + : extract_param< + Types + , is_char_encoding<mpl::_> + , unused_type + > + {}; +}}} + +#endif |