81 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			81 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | // Copyright (C) 2005 Arkadiy Vertleyb | ||
|  | // 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_TYPEOF_INTEGRAL_TEMPLATE_PARAM_HPP_INCLUDED | ||
|  | #define BOOST_TYPEOF_INTEGRAL_TEMPLATE_PARAM_HPP_INCLUDED | ||
|  | 
 | ||
|  | #define BOOST_TYPEOF_unsigned (unsigned) | ||
|  | #define BOOST_TYPEOF_signed (signed) | ||
|  | 
 | ||
|  | #define char_BOOST_TYPEOF (char) | ||
|  | #define short_BOOST_TYPEOF (short) | ||
|  | #define int_BOOST_TYPEOF (int) | ||
|  | #define long_BOOST_TYPEOF (long) | ||
|  | 
 | ||
|  | #define BOOST_TYPEOF_char_BOOST_TYPEOF (char) | ||
|  | #define BOOST_TYPEOF_short_BOOST_TYPEOF (short) | ||
|  | #define BOOST_TYPEOF_int_BOOST_TYPEOF (int) | ||
|  | #define BOOST_TYPEOF_long_BOOST_TYPEOF (long) | ||
|  | #define BOOST_TYPEOF_bool_BOOST_TYPEOF (bool) | ||
|  | #define BOOST_TYPEOF_unsigned_BOOST_TYPEOF (unsigned) | ||
|  | #define BOOST_TYPEOF_size_t_BOOST_TYPEOF (size_t) | ||
|  | 
 | ||
|  | #define BOOST_TYPEOF_MAKE_OBJ_char          BOOST_TYPEOF_INTEGRAL_PARAM(char) | ||
|  | #define BOOST_TYPEOF_MAKE_OBJ_short         BOOST_TYPEOF_INTEGRAL_PARAM(short) | ||
|  | #define BOOST_TYPEOF_MAKE_OBJ_int           BOOST_TYPEOF_INTEGRAL_PARAM(int) | ||
|  | #define BOOST_TYPEOF_MAKE_OBJ_long          BOOST_TYPEOF_INTEGRAL_PARAM(long) | ||
|  | #define BOOST_TYPEOF_MAKE_OBJ_bool          BOOST_TYPEOF_INTEGRAL_PARAM(bool) | ||
|  | #define BOOST_TYPEOF_MAKE_OBJ_unsigned      BOOST_TYPEOF_INTEGRAL_PARAM(unsigned) | ||
|  | #define BOOST_TYPEOF_MAKE_OBJ_size_t        BOOST_TYPEOF_INTEGRAL_PARAM(size_t) | ||
|  | #define BOOST_TYPEOF_MAKE_OBJ_unsignedchar  BOOST_TYPEOF_INTEGRAL_PARAM(unsigned char) | ||
|  | #define BOOST_TYPEOF_MAKE_OBJ_unsignedshort BOOST_TYPEOF_INTEGRAL_PARAM(unsigned short) | ||
|  | #define BOOST_TYPEOF_MAKE_OBJ_unsignedint   BOOST_TYPEOF_INTEGRAL_PARAM(unsigned int) | ||
|  | #define BOOST_TYPEOF_MAKE_OBJ_unsignedlong  BOOST_TYPEOF_INTEGRAL_PARAM(unsigned long) | ||
|  | #define BOOST_TYPEOF_MAKE_OBJ_signedchar    BOOST_TYPEOF_INTEGRAL_PARAM(signed char) | ||
|  | #define BOOST_TYPEOF_MAKE_OBJ_signedshort   BOOST_TYPEOF_INTEGRAL_PARAM(signed short) | ||
|  | #define BOOST_TYPEOF_MAKE_OBJ_signedint     BOOST_TYPEOF_INTEGRAL_PARAM(signed int) | ||
|  | #define BOOST_TYPEOF_MAKE_OBJ_signedlong    BOOST_TYPEOF_INTEGRAL_PARAM(signed long) | ||
|  | #define BOOST_TYPEOF_MAKE_OBJ_integral(x)   BOOST_TYPEOF_INTEGRAL_PARAM(x) | ||
|  | 
 | ||
|  | #define BOOST_TYPEOF_INTEGRAL(X) integral(X) BOOST_TYPEOF_EAT | ||
|  | #define BOOST_TYPEOF_EAT_BOOST_TYPEOF | ||
|  | #define BOOST_TYPEOF_integral(X) (integral(X)) | ||
|  | 
 | ||
|  | #define BOOST_TYPEOF_INTEGRAL_PARAM(Type)\ | ||
|  |     (INTEGRAL_PARAM)\ | ||
|  |     (Type) | ||
|  | 
 | ||
|  | #define BOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(Param)\ | ||
|  |     BOOST_PP_SEQ_ELEM(1, Param) | ||
|  | 
 | ||
|  | #define BOOST_TYPEOF_INTEGRAL_PARAM_EXPANDTYPE(Param)\ | ||
|  |     BOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(Param) | ||
|  | 
 | ||
|  | // INTEGRAL_PARAM "virtual functions" implementation | ||
|  | 
 | ||
|  | #define BOOST_TYPEOF_INTEGRAL_PARAM_ENCODE(This, n)\ | ||
|  |     typedef typename boost::type_of::encode_integral<\ | ||
|  |         BOOST_PP_CAT(V, n),\ | ||
|  |         BOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(This),\ | ||
|  |         BOOST_PP_CAT(P, n)\ | ||
|  |     >::type BOOST_PP_CAT(V, BOOST_PP_INC(n));  | ||
|  | 
 | ||
|  | #define BOOST_TYPEOF_INTEGRAL_PARAM_DECODE(This, n)\ | ||
|  |     typedef boost::type_of::decode_integral<BOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(This), BOOST_PP_CAT(iter, n)> BOOST_PP_CAT(d, n);\ | ||
|  |     static const BOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(This) BOOST_PP_CAT(P, n) = BOOST_PP_CAT(d, n)::value;\ | ||
|  |     typedef typename BOOST_PP_CAT(d, n)::iter BOOST_PP_CAT(iter, BOOST_PP_INC(n)); | ||
|  | 
 | ||
|  | #define BOOST_TYPEOF_INTEGRAL_PARAM_PLACEHOLDER(Param)\ | ||
|  |     (BOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(Param))0 | ||
|  | 
 | ||
|  | #define BOOST_TYPEOF_INTEGRAL_PARAM_DECLARATION_TYPE(Param)\ | ||
|  |     BOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(Param) | ||
|  | 
 | ||
|  | #define BOOST_TYPEOF_INTEGRAL_PARAM_PLACEHOLDER_TYPES(Param, n)\ | ||
|  |     BOOST_PP_CAT(T,n) | ||
|  | 
 | ||
|  | #define BOOST_TYPEOF_INTEGRAL_PARAM_ISTEMPLATE 0 | ||
|  | 
 | ||
|  | #endif//BOOST_TYPEOF_INTEGRAL_TEMPLATE_PARAM_HPP_INCLUDED |