|
1 // Copyright (C) 2005 Arkadiy Vertleyb |
|
2 // Distributed under the Boost Software License, Version 1.0. (See accompanying |
|
3 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
|
4 |
|
5 #ifndef BOOST_TYPEOF_INTEGRAL_TEMPLATE_PARAM_HPP_INCLUDED |
|
6 #define BOOST_TYPEOF_INTEGRAL_TEMPLATE_PARAM_HPP_INCLUDED |
|
7 |
|
8 #define BOOST_TYPEOF_unsigned (unsigned) |
|
9 #define BOOST_TYPEOF_signed (signed) |
|
10 |
|
11 #define char_BOOST_TYPEOF (char) |
|
12 #define short_BOOST_TYPEOF (short) |
|
13 #define int_BOOST_TYPEOF (int) |
|
14 #define long_BOOST_TYPEOF (long) |
|
15 |
|
16 #define BOOST_TYPEOF_char_BOOST_TYPEOF (char) |
|
17 #define BOOST_TYPEOF_short_BOOST_TYPEOF (short) |
|
18 #define BOOST_TYPEOF_int_BOOST_TYPEOF (int) |
|
19 #define BOOST_TYPEOF_long_BOOST_TYPEOF (long) |
|
20 #define BOOST_TYPEOF_bool_BOOST_TYPEOF (bool) |
|
21 #define BOOST_TYPEOF_unsigned_BOOST_TYPEOF (unsigned) |
|
22 #define BOOST_TYPEOF_size_t_BOOST_TYPEOF (size_t) |
|
23 |
|
24 #define BOOST_TYPEOF_MAKE_OBJ_char BOOST_TYPEOF_INTEGRAL_PARAM(char) |
|
25 #define BOOST_TYPEOF_MAKE_OBJ_short BOOST_TYPEOF_INTEGRAL_PARAM(short) |
|
26 #define BOOST_TYPEOF_MAKE_OBJ_int BOOST_TYPEOF_INTEGRAL_PARAM(int) |
|
27 #define BOOST_TYPEOF_MAKE_OBJ_long BOOST_TYPEOF_INTEGRAL_PARAM(long) |
|
28 #define BOOST_TYPEOF_MAKE_OBJ_bool BOOST_TYPEOF_INTEGRAL_PARAM(bool) |
|
29 #define BOOST_TYPEOF_MAKE_OBJ_unsigned BOOST_TYPEOF_INTEGRAL_PARAM(unsigned) |
|
30 #define BOOST_TYPEOF_MAKE_OBJ_size_t BOOST_TYPEOF_INTEGRAL_PARAM(size_t) |
|
31 #define BOOST_TYPEOF_MAKE_OBJ_unsignedchar BOOST_TYPEOF_INTEGRAL_PARAM(unsigned char) |
|
32 #define BOOST_TYPEOF_MAKE_OBJ_unsignedshort BOOST_TYPEOF_INTEGRAL_PARAM(unsigned short) |
|
33 #define BOOST_TYPEOF_MAKE_OBJ_unsignedint BOOST_TYPEOF_INTEGRAL_PARAM(unsigned int) |
|
34 #define BOOST_TYPEOF_MAKE_OBJ_unsignedlong BOOST_TYPEOF_INTEGRAL_PARAM(unsigned long) |
|
35 #define BOOST_TYPEOF_MAKE_OBJ_signedchar BOOST_TYPEOF_INTEGRAL_PARAM(signed char) |
|
36 #define BOOST_TYPEOF_MAKE_OBJ_signedshort BOOST_TYPEOF_INTEGRAL_PARAM(signed short) |
|
37 #define BOOST_TYPEOF_MAKE_OBJ_signedint BOOST_TYPEOF_INTEGRAL_PARAM(signed int) |
|
38 #define BOOST_TYPEOF_MAKE_OBJ_signedlong BOOST_TYPEOF_INTEGRAL_PARAM(signed long) |
|
39 #define BOOST_TYPEOF_MAKE_OBJ_integral(x) BOOST_TYPEOF_INTEGRAL_PARAM(x) |
|
40 |
|
41 #define BOOST_TYPEOF_INTEGRAL(X) integral(X) BOOST_TYPEOF_EAT |
|
42 #define BOOST_TYPEOF_EAT_BOOST_TYPEOF |
|
43 #define BOOST_TYPEOF_integral(X) (integral(X)) |
|
44 |
|
45 #define BOOST_TYPEOF_INTEGRAL_PARAM(Type)\ |
|
46 (INTEGRAL_PARAM)\ |
|
47 (Type) |
|
48 |
|
49 #define BOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(Param)\ |
|
50 BOOST_PP_SEQ_ELEM(1, Param) |
|
51 |
|
52 #define BOOST_TYPEOF_INTEGRAL_PARAM_EXPANDTYPE(Param)\ |
|
53 BOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(Param) |
|
54 |
|
55 // INTEGRAL_PARAM "virtual functions" implementation |
|
56 |
|
57 #define BOOST_TYPEOF_INTEGRAL_PARAM_ENCODE(This, n)\ |
|
58 typedef typename boost::type_of::encode_integral<\ |
|
59 BOOST_PP_CAT(V, n),\ |
|
60 BOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(This),\ |
|
61 BOOST_PP_CAT(P, n)\ |
|
62 >::type BOOST_PP_CAT(V, BOOST_PP_INC(n)); |
|
63 |
|
64 #define BOOST_TYPEOF_INTEGRAL_PARAM_DECODE(This, n)\ |
|
65 typedef boost::type_of::decode_integral<BOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(This), BOOST_PP_CAT(iter, n)> BOOST_PP_CAT(d, n);\ |
|
66 static const BOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(This) BOOST_PP_CAT(P, n) = BOOST_PP_CAT(d, n)::value;\ |
|
67 typedef typename BOOST_PP_CAT(d, n)::iter BOOST_PP_CAT(iter, BOOST_PP_INC(n)); |
|
68 |
|
69 #define BOOST_TYPEOF_INTEGRAL_PARAM_PLACEHOLDER(Param)\ |
|
70 (BOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(Param))0 |
|
71 |
|
72 #define BOOST_TYPEOF_INTEGRAL_PARAM_DECLARATION_TYPE(Param)\ |
|
73 BOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(Param) |
|
74 |
|
75 #define BOOST_TYPEOF_INTEGRAL_PARAM_PLACEHOLDER_TYPES(Param, n)\ |
|
76 BOOST_PP_CAT(T,n) |
|
77 |
|
78 #define BOOST_TYPEOF_INTEGRAL_PARAM_ISTEMPLATE 0 |
|
79 |
|
80 #endif//BOOST_TYPEOF_INTEGRAL_TEMPLATE_PARAM_HPP_INCLUDED |