123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- // Copyright Daniel Wallin 2006.
- // 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_AUX_PREPROCESSOR_IMPL_FUNCTION_NAME_HPP
- #define BOOST_PARAMETER_AUX_PREPROCESSOR_IMPL_FUNCTION_NAME_HPP
- #define BOOST_PARAMETER_MEMBER_FUNCTION_CHECK_STATIC_static ()
- /**/
- #include <boost/parameter/aux_/preprocessor/is_nullary.hpp>
- #include <boost/preprocessor/cat.hpp>
- #define BOOST_PARAMETER_MEMBER_FUNCTION_IS_STATIC(name) \
- BOOST_PARAMETER_IS_NULLARY( \
- BOOST_PP_CAT(BOOST_PARAMETER_MEMBER_FUNCTION_CHECK_STATIC_, name) \
- )
- /**/
- #include <boost/preprocessor/seq/seq.hpp>
- #include <boost/config.hpp>
- #if defined(BOOST_MSVC)
- // Workaround for MSVC preprocessor.
- //
- // When stripping static from "static f", msvc will produce " f". The leading
- // whitespace doesn't go away when pasting the token with something else, so
- // this thing is a hack to strip the whitespace.
- #define BOOST_PARAMETER_MEMBER_FUNCTION_STRIP_STATIC_static (
- /**/
- #define BOOST_PARAMETER_MEMBER_FUNCTION_STRIP_STATIC_AUX(name) \
- BOOST_PP_CAT(BOOST_PARAMETER_MEMBER_FUNCTION_STRIP_STATIC_, name))
- /**/
- #define BOOST_PARAMETER_MEMBER_FUNCTION_STRIP_STATIC(name) \
- BOOST_PP_SEQ_HEAD( \
- BOOST_PARAMETER_MEMBER_FUNCTION_STRIP_STATIC_AUX(name) \
- )
- /**/
- #else
- #define BOOST_PARAMETER_MEMBER_FUNCTION_STRIP_STATIC_static
- /**/
- #define BOOST_PARAMETER_MEMBER_FUNCTION_STRIP_STATIC(name) \
- BOOST_PP_CAT(BOOST_PARAMETER_MEMBER_FUNCTION_STRIP_STATIC_, name)
- /**/
- #endif // MSVC workarounds needed
- #include <boost/preprocessor/control/expr_if.hpp>
- #define BOOST_PARAMETER_MEMBER_FUNCTION_STATIC(name) \
- BOOST_PP_EXPR_IF( \
- BOOST_PARAMETER_MEMBER_FUNCTION_IS_STATIC(name), static \
- )
- /**/
- #include <boost/preprocessor/control/if.hpp>
- #include <boost/preprocessor/tuple/eat.hpp>
- #define BOOST_PARAMETER_MEMBER_FUNCTION_NAME(name) \
- BOOST_PP_IF( \
- BOOST_PARAMETER_MEMBER_FUNCTION_IS_STATIC(name) \
- , BOOST_PARAMETER_MEMBER_FUNCTION_STRIP_STATIC \
- , name BOOST_PP_TUPLE_EAT(1) \
- )(name)
- /**/
- // Produces a name for a parameter specification for the function named base.
- #define BOOST_PARAMETER_FUNCTION_SPECIFICATION_NAME(base, is_const) \
- BOOST_PP_CAT( \
- BOOST_PP_CAT( \
- BOOST_PP_IF( \
- is_const \
- , boost_param_parameters_const_ \
- , boost_param_parameters_ \
- ) \
- , __LINE__ \
- ) \
- , BOOST_PARAMETER_MEMBER_FUNCTION_NAME(base) \
- )
- /**/
- // Produces a name for a result type metafunction for the no-spec function
- // named base.
- #define BOOST_PARAMETER_NO_SPEC_FUNCTION_RESULT_NAME(base, is_const) \
- BOOST_PP_CAT( \
- BOOST_PP_CAT( \
- BOOST_PP_IF( \
- is_const \
- , boost_param_no_spec_result_const_ \
- , boost_param_no_spec_result_ \
- ) \
- , __LINE__ \
- ) \
- , BOOST_PARAMETER_MEMBER_FUNCTION_NAME(base) \
- )
- /**/
- // Produces a name for a result type metafunction for the function named base.
- #define BOOST_PARAMETER_FUNCTION_RESULT_NAME(base, is_const) \
- BOOST_PP_CAT( \
- BOOST_PP_CAT( \
- BOOST_PP_IF( \
- is_const \
- , boost_param_result_const_ \
- , boost_param_result_ \
- ) \
- , __LINE__ \
- ) \
- , BOOST_PARAMETER_MEMBER_FUNCTION_NAME(base) \
- )
- /**/
- // Produces a name for the implementation function to which the no-spec
- // function named base forwards its result type and argument pack.
- #define BOOST_PARAMETER_NO_SPEC_FUNCTION_IMPL_NAME(base, is_const) \
- BOOST_PP_CAT( \
- BOOST_PP_CAT( \
- BOOST_PP_IF( \
- is_const \
- , boost_param_no_spec_impl_const \
- , boost_param_no_spec_impl \
- ) \
- , __LINE__ \
- ) \
- , BOOST_PARAMETER_MEMBER_FUNCTION_NAME(base) \
- )
- /**/
- // Can't do boost_param_impl_ ## basee
- // because base might start with an underscore.
- // daniel: what? how is that relevant? the reason for using CAT()
- // is to make sure base is expanded. i'm not sure we need to here,
- // but it's more stable to do it.
- #define BOOST_PARAMETER_FUNCTION_IMPL_NAME(base, is_const) \
- BOOST_PP_CAT( \
- BOOST_PP_CAT( \
- BOOST_PP_IF(is_const, boost_param_impl_const, boost_param_impl) \
- , __LINE__ \
- ) \
- , BOOST_PARAMETER_MEMBER_FUNCTION_NAME(base) \
- )
- /**/
- #endif // include guard
|