123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292 |
- // NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
- #if !defined(BOOST_PP_IS_ITERATING)
- ///// header body
- // Copyright Aleksey Gurtovoy 2000-2008
- //
- // 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)
- //
- // See http://www.boost.org/libs/mpl for documentation.
- // $Id$
- // $Date$
- // $Revision$
- # include <boost/mpl/aux_/config/ctps.hpp>
- # include <boost/mpl/aux_/config/static_constant.hpp>
- # include <boost/mpl/aux_/nttp_decl.hpp>
- # include <boost/preprocessor/arithmetic/sub.hpp>
- # include <boost/preprocessor/tuple/elem.hpp>
- # include <boost/preprocessor/enum_params_with_a_default.hpp>
- # include <boost/preprocessor/enum_params.hpp>
- # include <boost/preprocessor/enum.hpp>
- # include <boost/preprocessor/repeat.hpp>
- # include <boost/preprocessor/comma_if.hpp>
- # include <boost/preprocessor/iterate.hpp>
- #if defined(BOOST_MPL_PREPROCESSING_MODE)
- # undef LONG_MAX
- #endif
- namespace boost { namespace mpl {
- #if !defined(AUX778076_SEQUENCE_BASE_NAME)
- # define AUX778076_SEQUENCE_BASE_NAME AUX778076_SEQUENCE_NAME
- #endif
- #if !defined(AUX778076_SEQUENCE_INTEGRAL_WRAPPER)
- # define AUX778076_SEQUENCE_PARAM_NAME T
- # define AUX778076_SEQUENCE_TEMPLATE_PARAM typename T
- # define AUX778076_SEQUENCE_DEFAULT na
- # define AUX778076_SEQUENCE_NAME_N(n) \
- BOOST_PP_CAT(AUX778076_SEQUENCE_BASE_NAME,n) \
- /**/
- # define AUX778076_SEQUENCE_PARAMS() \
- BOOST_PP_ENUM_PARAMS( \
- AUX778076_SEQUENCE_LIMIT \
- , AUX778076_SEQUENCE_TEMPLATE_PARAM \
- ) \
- /**/
- # define AUX778076_SEQUENCE_ARGS() \
- BOOST_PP_ENUM_PARAMS( \
- AUX778076_SEQUENCE_LIMIT \
- , T \
- ) \
- /**/
- # define AUX778076_SEQUENCE_DEFAULT_PARAMS() \
- BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( \
- AUX778076_SEQUENCE_LIMIT \
- , AUX778076_SEQUENCE_TEMPLATE_PARAM \
- , AUX778076_SEQUENCE_DEFAULT \
- ) \
- /**/
- # define AUX778076_SEQUENCE_N_PARAMS(n) \
- BOOST_PP_ENUM_PARAMS(n, AUX778076_SEQUENCE_TEMPLATE_PARAM) \
- /**/
- # define AUX778076_SEQUENCE_N_ARGS(n) \
- BOOST_PP_ENUM_PARAMS(n, T) \
- /**/
- # define AUX778076_SEQUENCE_N_PARTIAL_SPEC_ARGS(n) \
- BOOST_PP_ENUM_PARAMS(n, T) \
- BOOST_PP_COMMA_IF(n) \
- BOOST_PP_ENUM( \
- BOOST_PP_SUB_D(1,AUX778076_SEQUENCE_LIMIT,n) \
- , BOOST_PP_TUPLE_ELEM_3_2 \
- , AUX778076_SEQUENCE_DEFAULT \
- ) \
- /**/
- #else // AUX778076_SEQUENCE_INTEGRAL_WRAPPER
- # define AUX778076_SEQUENCE_PARAM_NAME C
- # define AUX778076_SEQUENCE_TEMPLATE_PARAM BOOST_MPL_AUX_NTTP_DECL(long, C)
- # define AUX778076_SEQUENCE_DEFAULT LONG_MAX
- # define AUX778076_SEQUENCE_PARAMS() \
- typename T, BOOST_PP_ENUM_PARAMS( \
- AUX778076_SEQUENCE_LIMIT \
- , AUX778076_SEQUENCE_TEMPLATE_PARAM \
- ) \
- /**/
- # define AUX778076_SEQUENCE_ARGS() \
- T, BOOST_PP_ENUM_PARAMS( \
- AUX778076_SEQUENCE_LIMIT \
- , C \
- ) \
- /**/
- # define AUX778076_SEQUENCE_DEFAULT_PARAMS() \
- typename T, \
- BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( \
- AUX778076_SEQUENCE_LIMIT \
- , AUX778076_SEQUENCE_TEMPLATE_PARAM \
- , AUX778076_SEQUENCE_DEFAULT \
- ) \
- /**/
- # define AUX778076_SEQUENCE_N_PARAMS(n) \
- typename T BOOST_PP_COMMA_IF(n) \
- BOOST_PP_ENUM_PARAMS(n, AUX778076_SEQUENCE_TEMPLATE_PARAM) \
- /**/
- # if !defined(AUX778076_SEQUENCE_CONVERT_CN_TO)
- # define AUX778076_SEQUENCE_CONVERT_CN_TO(z,n,TARGET) BOOST_PP_CAT(C,n)
- # endif
- # define AUX778076_SEQUENCE_N_ARGS(n) \
- T BOOST_PP_COMMA_IF(n) \
- BOOST_PP_ENUM(n,AUX778076_SEQUENCE_CONVERT_CN_TO,T) \
- /**/
- # define AUX778076_SEQUENCE_N_PARTIAL_SPEC_ARGS(n) \
- T, BOOST_PP_ENUM_PARAMS(n, C) \
- BOOST_PP_COMMA_IF(n) \
- BOOST_PP_ENUM( \
- BOOST_PP_SUB_D(1,AUX778076_SEQUENCE_LIMIT,n) \
- , BOOST_PP_TUPLE_ELEM_3_2 \
- , AUX778076_SEQUENCE_DEFAULT \
- ) \
- /**/
- #endif // AUX778076_SEQUENCE_INTEGRAL_WRAPPER
- #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
- // forward declaration
- template<
- AUX778076_SEQUENCE_DEFAULT_PARAMS()
- >
- struct AUX778076_SEQUENCE_NAME;
- #else
- namespace aux {
- template< BOOST_MPL_AUX_NTTP_DECL(int, N) >
- struct BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_chooser);
- }
- #endif
- #define BOOST_PP_ITERATION_PARAMS_1 \
- (3,(0, AUX778076_SEQUENCE_LIMIT, <boost/mpl/aux_/sequence_wrapper.hpp>))
- #include BOOST_PP_ITERATE()
- // real C++ version is already taken care of
- #if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
- namespace aux {
- // ???_count_args
- #define AUX778076_COUNT_ARGS_PREFIX AUX778076_SEQUENCE_NAME
- #define AUX778076_COUNT_ARGS_DEFAULT AUX778076_SEQUENCE_DEFAULT
- #define AUX778076_COUNT_ARGS_PARAM_NAME AUX778076_SEQUENCE_PARAM_NAME
- #define AUX778076_COUNT_ARGS_TEMPLATE_PARAM AUX778076_SEQUENCE_TEMPLATE_PARAM
- #define AUX778076_COUNT_ARGS_ARITY AUX778076_SEQUENCE_LIMIT
- #define AUX778076_COUNT_ARGS_USE_STANDARD_PP_PRIMITIVES
- #include <boost/mpl/aux_/count_args.hpp>
- template<
- AUX778076_SEQUENCE_PARAMS()
- >
- struct BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_impl)
- {
- typedef aux::BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_count_args)<
- BOOST_PP_ENUM_PARAMS(AUX778076_SEQUENCE_LIMIT, AUX778076_SEQUENCE_PARAM_NAME)
- > arg_num_;
-
- typedef typename aux::BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_chooser)< arg_num_::value >
- ::template result_< AUX778076_SEQUENCE_ARGS() >::type type;
- };
- } // namespace aux
- template<
- AUX778076_SEQUENCE_DEFAULT_PARAMS()
- >
- struct AUX778076_SEQUENCE_NAME
- : aux::BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_impl)<
- AUX778076_SEQUENCE_ARGS()
- >::type
- {
- typedef typename aux::BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_impl)<
- AUX778076_SEQUENCE_ARGS()
- >::type type;
- };
- #endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
- # undef AUX778076_SEQUENCE_N_PARTIAL_SPEC_ARGS
- # undef AUX778076_SEQUENCE_N_ARGS
- # undef AUX778076_SEQUENCE_CONVERT_CN_TO
- # undef AUX778076_SEQUENCE_N_PARAMS
- # undef AUX778076_SEQUENCE_DEFAULT_PARAMS
- # undef AUX778076_SEQUENCE_ARGS
- # undef AUX778076_SEQUENCE_PARAMS
- # undef AUX778076_SEQUENCE_NAME_N
- # undef AUX778076_SEQUENCE_DEFAULT
- # undef AUX778076_SEQUENCE_TEMPLATE_PARAM
- # undef AUX778076_SEQUENCE_PARAM_NAME
- # undef AUX778076_SEQUENCE_LIMIT
- # undef AUX778076_SEQUENCE_BASE_NAME
- # undef AUX778076_SEQUENCE_NAME
- # undef AUX778076_SEQUENCE_INTEGRAL_WRAPPER
- }}
- ///// iteration
- #else
- #define i_ BOOST_PP_FRAME_ITERATION(1)
- # if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
- #if i_ == AUX778076_SEQUENCE_LIMIT
- /// primary template (not a specialization!)
- template<
- AUX778076_SEQUENCE_N_PARAMS(i_)
- >
- struct AUX778076_SEQUENCE_NAME
- : AUX778076_SEQUENCE_NAME_N(i_)< AUX778076_SEQUENCE_N_ARGS(i_) >
- {
- typedef typename AUX778076_SEQUENCE_NAME_N(i_)< AUX778076_SEQUENCE_N_ARGS(i_) >::type type;
- };
- #else
- template<
- AUX778076_SEQUENCE_N_PARAMS(i_)
- >
- struct AUX778076_SEQUENCE_NAME< AUX778076_SEQUENCE_N_PARTIAL_SPEC_ARGS(i_) >
- : AUX778076_SEQUENCE_NAME_N(i_)< AUX778076_SEQUENCE_N_ARGS(i_) >
- {
- #if i_ > 0 || defined(AUX778076_SEQUENCE_INTEGRAL_WRAPPER)
- typedef typename AUX778076_SEQUENCE_NAME_N(i_)< AUX778076_SEQUENCE_N_ARGS(i_) >::type type;
- #else
- typedef AUX778076_SEQUENCE_NAME_N(i_)< AUX778076_SEQUENCE_N_ARGS(i_) >::type type;
- #endif
- };
- #endif // i_ == AUX778076_SEQUENCE_LIMIT
- # else
- namespace aux {
- template<>
- struct BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_chooser)<i_>
- {
- template<
- AUX778076_SEQUENCE_PARAMS()
- >
- struct result_
- {
- #if i_ > 0 || defined(AUX778076_SEQUENCE_INTEGRAL_WRAPPER)
- typedef typename AUX778076_SEQUENCE_NAME_N(i_)<
- AUX778076_SEQUENCE_N_ARGS(i_)
- >::type type;
- #else
- typedef AUX778076_SEQUENCE_NAME_N(i_)<
- AUX778076_SEQUENCE_N_ARGS(i_)
- >::type type;
- #endif
- };
- };
- } // namespace aux
- # endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
- #undef i_
- #endif // BOOST_PP_IS_ITERATING
|