Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:43:27

0001 // Copyright Daniel Wallin 2006.
0002 // Distributed under the Boost Software License, Version 1.0.
0003 // (See accompanying file LICENSE_1_0.txt or copy at
0004 // http://www.boost.org/LICENSE_1_0.txt)
0005 
0006 #ifndef BOOST_PARAMETER_AUX_PREPROCESSOR_IMPL_SPECIFICATION_HPP
0007 #define BOOST_PARAMETER_AUX_PREPROCESSOR_IMPL_SPECIFICATION_HPP
0008 
0009 #include <boost/parameter/optional.hpp>
0010 
0011 // Helper macros for BOOST_PARAMETER_SPECIFICATION_ELEM_R.
0012 #define BOOST_PARAMETER_QUALIFIED_TAG_optional(tag)                          \
0013     optional<tag
0014 /**/
0015 
0016 #include <boost/parameter/required.hpp>
0017 
0018 #define BOOST_PARAMETER_QUALIFIED_TAG_required(tag)                          \
0019     required<tag
0020 /**/
0021 
0022 #include <boost/parameter/deduced.hpp>
0023 
0024 #define BOOST_PARAMETER_QUALIFIED_TAG_deduced_optional(tag)                  \
0025     optional< ::boost::parameter::deduced<tag>
0026 /**/
0027 
0028 #define BOOST_PARAMETER_QUALIFIED_TAG_deduced_required(tag)                  \
0029     required< ::boost::parameter::deduced<tag>
0030 /**/
0031 
0032 #include <boost/parameter/aux_/preprocessor/impl/argument_specs.hpp>
0033 #include <boost/parameter/config.hpp>
0034 #include <boost/preprocessor/punctuation/comma_if.hpp>
0035 #include <boost/preprocessor/cat.hpp>
0036 
0037 #if BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x564))
0038 
0039 #include <boost/parameter/aux_/use_default.hpp>
0040 
0041 #define BOOST_PARAMETER_SPECIFICATION_ELEM_R(r, tag_namespace, i, elem)      \
0042     BOOST_PP_COMMA_IF(i) ::boost::parameter::BOOST_PP_CAT(                   \
0043         BOOST_PARAMETER_QUALIFIED_TAG_                                       \
0044       , BOOST_PARAMETER_FN_ARG_QUALIFIER(elem)                               \
0045     )(tag_namespace::BOOST_PARAMETER_FN_ARG_NAME(elem))                      \
0046       , ::boost::parameter::aux::use_default                                 \
0047     >
0048 /**/
0049 
0050 #else   // !BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x564))
0051 
0052 #include <boost/parameter/aux_/pp_impl/unwrap_predicate.hpp>
0053 
0054 // Expands to each boost::parameter::parameters<> element type.
0055 #define BOOST_PARAMETER_SPECIFICATION_ELEM_R(r, tag_namespace, i, elem)      \
0056     BOOST_PP_COMMA_IF(i) ::boost::parameter::BOOST_PP_CAT(                   \
0057         BOOST_PARAMETER_QUALIFIED_TAG_                                       \
0058       , BOOST_PARAMETER_FN_ARG_QUALIFIER(elem)                               \
0059     )(tag_namespace::BOOST_PARAMETER_FN_ARG_NAME(elem))                      \
0060       , typename ::boost::parameter::aux::unwrap_predicate<                  \
0061             void BOOST_PARAMETER_FN_ARG_PRED(elem)                           \
0062         >::type                                                              \
0063     >
0064 /**/
0065 
0066 #endif  // Borland workarounds needed.
0067 
0068 #include <boost/parameter/parameters.hpp>
0069 #include <boost/parameter/aux_/preprocessor/impl/function_name.hpp>
0070 #include <boost/preprocessor/control/if.hpp>
0071 #include <boost/preprocessor/seq/for_each_i.hpp>
0072 
0073 // Expands to a boost::parameter::parameters<> specialization for the
0074 // function named base.  Used by BOOST_PARAMETER_CONSTRUCTOR_AUX and
0075 // BOOST_PARAMETER_FUNCTION_HEAD for their respective ParameterSpec models.
0076 #define BOOST_PARAMETER_SPECIFICATION(tag_ns, base, split_args, is_const)    \
0077     template <typename BoostParameterDummy>                                  \
0078     struct BOOST_PP_CAT(                                                     \
0079         BOOST_PP_CAT(                                                        \
0080             BOOST_PP_IF(                                                     \
0081                 is_const                                                     \
0082               , boost_param_params_const_                                    \
0083               , boost_param_params_                                          \
0084             )                                                                \
0085           , __LINE__                                                         \
0086         )                                                                    \
0087       , BOOST_PARAMETER_MEMBER_FUNCTION_NAME(base)                           \
0088     ) : ::boost::parameter::parameters<                                      \
0089             BOOST_PP_SEQ_FOR_EACH_I(                                         \
0090                 BOOST_PARAMETER_SPECIFICATION_ELEM_R, tag_ns, split_args     \
0091             )                                                                \
0092         >                                                                    \
0093     {                                                                        \
0094     };                                                                       \
0095     typedef BOOST_PP_CAT(                                                    \
0096         BOOST_PP_CAT(                                                        \
0097             BOOST_PP_IF(                                                     \
0098                 is_const                                                     \
0099               , boost_param_params_const_                                    \
0100               , boost_param_params_                                          \
0101             )                                                                \
0102           , __LINE__                                                         \
0103         )                                                                    \
0104       , BOOST_PARAMETER_MEMBER_FUNCTION_NAME(base)                           \
0105     )<int>
0106 /**/
0107 
0108 #endif  // include guard
0109