diff options
Diffstat (limited to '3rdParty/Boost/src/boost/parameter/binding.hpp')
-rwxr-xr-x | 3rdParty/Boost/src/boost/parameter/binding.hpp | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/3rdParty/Boost/src/boost/parameter/binding.hpp b/3rdParty/Boost/src/boost/parameter/binding.hpp new file mode 100755 index 0000000..632f0fd --- /dev/null +++ b/3rdParty/Boost/src/boost/parameter/binding.hpp @@ -0,0 +1,106 @@ +// Copyright David Abrahams 2005. 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_PARAMETER_BINDING_DWA200558_HPP +# define BOOST_PARAMETER_BINDING_DWA200558_HPP + +# include <boost/mpl/apply.hpp> +# include <boost/mpl/assert.hpp> +# include <boost/mpl/and.hpp> +# include <boost/parameter/aux_/result_of0.hpp> +# include <boost/parameter/aux_/void.hpp> +# include <boost/type_traits/is_same.hpp> + +# if BOOST_WORKAROUND(BOOST_MSVC, < 1300) +# include <boost/mpl/eval_if.hpp> +# endif + +namespace boost { namespace parameter { + +// A metafunction that, given an argument pack, returns the type of +// the parameter identified by the given keyword. If no such +// parameter has been specified, returns Default + +# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \ + || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) +template <class Parameters, class Keyword, class Default> +struct binding0 +{ + typedef typename mpl::apply_wrap3< + typename Parameters::binding,Keyword,Default,mpl::true_ + >::type type; + + BOOST_MPL_ASSERT_NOT(( + mpl::and_< + is_same<Default, void_> + , is_same<type, void_> + > + )); +}; +# endif + +template <class Parameters, class Keyword, class Default = void_> +# if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) +struct binding +# else +struct binding_eti +# endif +{ +# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \ + || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + typedef typename mpl::eval_if< + mpl::is_placeholder<Parameters> + , mpl::identity<int> + , binding0<Parameters,Keyword,Default> + >::type type; +# else + typedef typename mpl::apply_wrap3< + typename Parameters::binding,Keyword,Default,mpl::true_ + >::type type; + + BOOST_MPL_ASSERT_NOT(( + mpl::and_< + is_same<Default, void_> + , is_same<type, void_> + > + )); +# endif + +# if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) + BOOST_MPL_AUX_LAMBDA_SUPPORT(3,binding,(Parameters,Keyword,Default)) +# endif +}; + +# if BOOST_WORKAROUND(BOOST_MSVC, < 1300) +template <class Parameters, class Keyword, class Default = void_> +struct binding +{ + typedef typename mpl::eval_if< + is_same<Parameters, int> + , mpl::identity<int> + , binding_eti<Parameters, Keyword, Default> + >::type type; + + BOOST_MPL_AUX_LAMBDA_SUPPORT(3,binding,(Parameters,Keyword,Default)) +}; +# endif + +// A metafunction that, given an argument pack, returns the type of +// the parameter identified by the given keyword. If no such +// parameter has been specified, returns the type returned by invoking +// DefaultFn +template <class Parameters, class Keyword, class DefaultFn> +struct lazy_binding +{ + typedef typename mpl::apply_wrap3< + typename Parameters::binding + , Keyword + , typename aux::result_of0<DefaultFn>::type + , mpl::true_ + >::type type; +}; + + +}} // namespace boost::parameter + +#endif // BOOST_PARAMETER_BINDING_DWA200558_HPP |