Jeff Thompson | a28eed8 | 2013-08-22 16:21:10 -0700 | [diff] [blame] | 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 ndnboost::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 ndnboost::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 |