106 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			106 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Copyright Aleksey Gurtovoy 2000-2004
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// 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/preprocessor/expr_if.hpp>
							 | 
						||
| 
								 | 
							
								#include <boost/preprocessor/inc.hpp>
							 | 
						||
| 
								 | 
							
								#include <boost/preprocessor/cat.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if !defined(AUX778076_COUNT_ARGS_PARAM_NAME)
							 | 
						||
| 
								 | 
							
								#   define AUX778076_COUNT_ARGS_PARAM_NAME T
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if !defined(AUX778076_COUNT_ARGS_TEMPLATE_PARAM)
							 | 
						||
| 
								 | 
							
								#   define AUX778076_COUNT_ARGS_TEMPLATE_PARAM typename AUX778076_COUNT_ARGS_PARAM_NAME
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// local macros, #undef-ined at the end of the header
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if !defined(AUX778076_COUNT_ARGS_USE_STANDARD_PP_PRIMITIVES)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#   include <boost/mpl/aux_/preprocessor/repeat.hpp>
							 | 
						||
| 
								 | 
							
								#   include <boost/mpl/aux_/preprocessor/params.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#   define AUX778076_COUNT_ARGS_REPEAT BOOST_MPL_PP_REPEAT
							 | 
						||
| 
								 | 
							
								#   define AUX778076_COUNT_ARGS_PARAMS(param) \
							 | 
						||
| 
								 | 
							
								    BOOST_MPL_PP_PARAMS( \
							 | 
						||
| 
								 | 
							
								          AUX778076_COUNT_ARGS_ARITY \
							 | 
						||
| 
								 | 
							
								        , param \
							 | 
						||
| 
								 | 
							
								        ) \
							 | 
						||
| 
								 | 
							
								    /**/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#   include <boost/preprocessor/enum_shifted_params.hpp>
							 | 
						||
| 
								 | 
							
								#   include <boost/preprocessor/repeat.hpp>
							 | 
						||
| 
								 | 
							
								#   include <boost/preprocessor/inc.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#   define AUX778076_COUNT_ARGS_REPEAT BOOST_PP_REPEAT
							 | 
						||
| 
								 | 
							
								#   define AUX778076_COUNT_ARGS_PARAMS(param) \
							 | 
						||
| 
								 | 
							
								    BOOST_PP_ENUM_SHIFTED_PARAMS( \
							 | 
						||
| 
								 | 
							
								          BOOST_PP_INC(AUX778076_COUNT_ARGS_ARITY) \
							 | 
						||
| 
								 | 
							
								        , param \
							 | 
						||
| 
								 | 
							
								        ) \
							 | 
						||
| 
								 | 
							
								    /**/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif // AUX778076_COUNT_ARGS_USE_STANDARD_PP_PRIMITIVES
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define AUX778076_IS_ARG_TEMPLATE_NAME \
							 | 
						||
| 
								 | 
							
								    BOOST_PP_CAT(is_,BOOST_PP_CAT(AUX778076_COUNT_ARGS_PREFIX,_arg)) \
							 | 
						||
| 
								 | 
							
								/**/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define AUX778076_COUNT_ARGS_FUNC(unused, i, param) \
							 | 
						||
| 
								 | 
							
								    BOOST_PP_EXPR_IF(i, +) \
							 | 
						||
| 
								 | 
							
								    AUX778076_IS_ARG_TEMPLATE_NAME<BOOST_PP_CAT(param,BOOST_PP_INC(i))>::value \
							 | 
						||
| 
								 | 
							
								/**/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// is_<xxx>_arg
							 | 
						||
| 
								 | 
							
								template< AUX778076_COUNT_ARGS_TEMPLATE_PARAM >
							 | 
						||
| 
								 | 
							
								struct AUX778076_IS_ARG_TEMPLATE_NAME
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    BOOST_STATIC_CONSTANT(bool, value = true);
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template<>
							 | 
						||
| 
								 | 
							
								struct AUX778076_IS_ARG_TEMPLATE_NAME<AUX778076_COUNT_ARGS_DEFAULT>
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    BOOST_STATIC_CONSTANT(bool, value = false);
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// <xxx>_count_args
							 | 
						||
| 
								 | 
							
								template<
							 | 
						||
| 
								 | 
							
								      AUX778076_COUNT_ARGS_PARAMS(AUX778076_COUNT_ARGS_TEMPLATE_PARAM)
							 | 
						||
| 
								 | 
							
								    >
							 | 
						||
| 
								 | 
							
								struct BOOST_PP_CAT(AUX778076_COUNT_ARGS_PREFIX,_count_args)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    BOOST_STATIC_CONSTANT(int, value = AUX778076_COUNT_ARGS_REPEAT(
							 | 
						||
| 
								 | 
							
								          AUX778076_COUNT_ARGS_ARITY
							 | 
						||
| 
								 | 
							
								        , AUX778076_COUNT_ARGS_FUNC
							 | 
						||
| 
								 | 
							
								        , AUX778076_COUNT_ARGS_PARAM_NAME
							 | 
						||
| 
								 | 
							
								        ));
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#undef AUX778076_COUNT_ARGS_FUNC
							 | 
						||
| 
								 | 
							
								#undef AUX778076_IS_ARG_TEMPLATE_NAME
							 | 
						||
| 
								 | 
							
								#undef AUX778076_COUNT_ARGS_PARAMS
							 | 
						||
| 
								 | 
							
								#undef AUX778076_COUNT_ARGS_REPEAT
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#undef AUX778076_COUNT_ARGS_ARITY
							 | 
						||
| 
								 | 
							
								#undef AUX778076_COUNT_ARGS_DEFAULT
							 | 
						||
| 
								 | 
							
								#undef AUX778076_COUNT_ARGS_PREFIX
							 | 
						||
| 
								 | 
							
								#undef AUX778076_COUNT_ARGS_USE_STANDARD_PP_PRIMITIVES
							 | 
						||
| 
								 | 
							
								#undef AUX778076_COUNT_ARGS_TEMPLATE_PARAM
							 | 
						||
| 
								 | 
							
								#undef AUX778076_COUNT_ARGS_PARAM_NAME
							 |