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 | |
Jeff Thompson | 3d613fd | 2013-10-15 15:39:04 -0700 | [diff] [blame] | 5 | #ifndef NDNBOOST_TYPEOF_INTEGRAL_TEMPLATE_PARAM_HPP_INCLUDED |
| 6 | #define NDNBOOST_TYPEOF_INTEGRAL_TEMPLATE_PARAM_HPP_INCLUDED |
Jeff Thompson | a28eed8 | 2013-08-22 16:21:10 -0700 | [diff] [blame] | 7 | |
Jeff Thompson | 3d613fd | 2013-10-15 15:39:04 -0700 | [diff] [blame] | 8 | #define NDNBOOST_TYPEOF_unsigned (unsigned) |
| 9 | #define NDNBOOST_TYPEOF_signed (signed) |
Jeff Thompson | a28eed8 | 2013-08-22 16:21:10 -0700 | [diff] [blame] | 10 | |
Jeff Thompson | 3d613fd | 2013-10-15 15:39:04 -0700 | [diff] [blame] | 11 | #define char_NDNBOOST_TYPEOF (char) |
| 12 | #define short_NDNBOOST_TYPEOF (short) |
| 13 | #define int_NDNBOOST_TYPEOF (int) |
| 14 | #define long_NDNBOOST_TYPEOF (long) |
Jeff Thompson | a28eed8 | 2013-08-22 16:21:10 -0700 | [diff] [blame] | 15 | |
Jeff Thompson | 3d613fd | 2013-10-15 15:39:04 -0700 | [diff] [blame] | 16 | #define NDNBOOST_TYPEOF_char_NDNBOOST_TYPEOF (char) |
| 17 | #define NDNBOOST_TYPEOF_short_NDNBOOST_TYPEOF (short) |
| 18 | #define NDNBOOST_TYPEOF_int_NDNBOOST_TYPEOF (int) |
| 19 | #define NDNBOOST_TYPEOF_long_NDNBOOST_TYPEOF (long) |
| 20 | #define NDNBOOST_TYPEOF_bool_NDNBOOST_TYPEOF (bool) |
| 21 | #define NDNBOOST_TYPEOF_unsigned_NDNBOOST_TYPEOF (unsigned) |
| 22 | #define NDNBOOST_TYPEOF_size_t_NDNBOOST_TYPEOF (size_t) |
Jeff Thompson | a28eed8 | 2013-08-22 16:21:10 -0700 | [diff] [blame] | 23 | |
Jeff Thompson | 3d613fd | 2013-10-15 15:39:04 -0700 | [diff] [blame] | 24 | #define NDNBOOST_TYPEOF_MAKE_OBJ_char NDNBOOST_TYPEOF_INTEGRAL_PARAM(char) |
| 25 | #define NDNBOOST_TYPEOF_MAKE_OBJ_short NDNBOOST_TYPEOF_INTEGRAL_PARAM(short) |
| 26 | #define NDNBOOST_TYPEOF_MAKE_OBJ_int NDNBOOST_TYPEOF_INTEGRAL_PARAM(int) |
| 27 | #define NDNBOOST_TYPEOF_MAKE_OBJ_long NDNBOOST_TYPEOF_INTEGRAL_PARAM(long) |
| 28 | #define NDNBOOST_TYPEOF_MAKE_OBJ_bool NDNBOOST_TYPEOF_INTEGRAL_PARAM(bool) |
| 29 | #define NDNBOOST_TYPEOF_MAKE_OBJ_unsigned NDNBOOST_TYPEOF_INTEGRAL_PARAM(unsigned) |
| 30 | #define NDNBOOST_TYPEOF_MAKE_OBJ_size_t NDNBOOST_TYPEOF_INTEGRAL_PARAM(size_t) |
| 31 | #define NDNBOOST_TYPEOF_MAKE_OBJ_unsignedchar NDNBOOST_TYPEOF_INTEGRAL_PARAM(unsigned char) |
| 32 | #define NDNBOOST_TYPEOF_MAKE_OBJ_unsignedshort NDNBOOST_TYPEOF_INTEGRAL_PARAM(unsigned short) |
| 33 | #define NDNBOOST_TYPEOF_MAKE_OBJ_unsignedint NDNBOOST_TYPEOF_INTEGRAL_PARAM(unsigned int) |
| 34 | #define NDNBOOST_TYPEOF_MAKE_OBJ_unsignedlong NDNBOOST_TYPEOF_INTEGRAL_PARAM(unsigned long) |
| 35 | #define NDNBOOST_TYPEOF_MAKE_OBJ_signedchar NDNBOOST_TYPEOF_INTEGRAL_PARAM(signed char) |
| 36 | #define NDNBOOST_TYPEOF_MAKE_OBJ_signedshort NDNBOOST_TYPEOF_INTEGRAL_PARAM(signed short) |
| 37 | #define NDNBOOST_TYPEOF_MAKE_OBJ_signedint NDNBOOST_TYPEOF_INTEGRAL_PARAM(signed int) |
| 38 | #define NDNBOOST_TYPEOF_MAKE_OBJ_signedlong NDNBOOST_TYPEOF_INTEGRAL_PARAM(signed long) |
| 39 | #define NDNBOOST_TYPEOF_MAKE_OBJ_integral(x) NDNBOOST_TYPEOF_INTEGRAL_PARAM(x) |
Jeff Thompson | a28eed8 | 2013-08-22 16:21:10 -0700 | [diff] [blame] | 40 | |
Jeff Thompson | 3d613fd | 2013-10-15 15:39:04 -0700 | [diff] [blame] | 41 | #define NDNBOOST_TYPEOF_INTEGRAL(X) integral(X) NDNBOOST_TYPEOF_EAT |
| 42 | #define NDNBOOST_TYPEOF_EAT_NDNBOOST_TYPEOF |
| 43 | #define NDNBOOST_TYPEOF_integral(X) (integral(X)) |
Jeff Thompson | a28eed8 | 2013-08-22 16:21:10 -0700 | [diff] [blame] | 44 | |
Jeff Thompson | 3d613fd | 2013-10-15 15:39:04 -0700 | [diff] [blame] | 45 | #define NDNBOOST_TYPEOF_INTEGRAL_PARAM(Type)\ |
Jeff Thompson | a28eed8 | 2013-08-22 16:21:10 -0700 | [diff] [blame] | 46 | (INTEGRAL_PARAM)\ |
| 47 | (Type) |
| 48 | |
Jeff Thompson | 3d613fd | 2013-10-15 15:39:04 -0700 | [diff] [blame] | 49 | #define NDNBOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(Param)\ |
| 50 | NDNBOOST_PP_SEQ_ELEM(1, Param) |
Jeff Thompson | a28eed8 | 2013-08-22 16:21:10 -0700 | [diff] [blame] | 51 | |
Jeff Thompson | 3d613fd | 2013-10-15 15:39:04 -0700 | [diff] [blame] | 52 | #define NDNBOOST_TYPEOF_INTEGRAL_PARAM_EXPANDTYPE(Param)\ |
| 53 | NDNBOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(Param) |
Jeff Thompson | a28eed8 | 2013-08-22 16:21:10 -0700 | [diff] [blame] | 54 | |
| 55 | // INTEGRAL_PARAM "virtual functions" implementation |
| 56 | |
Jeff Thompson | 3d613fd | 2013-10-15 15:39:04 -0700 | [diff] [blame] | 57 | #define NDNBOOST_TYPEOF_INTEGRAL_PARAM_ENCODE(This, n)\ |
Jeff Thompson | a28eed8 | 2013-08-22 16:21:10 -0700 | [diff] [blame] | 58 | typedef typename ndnboost::type_of::encode_integral<\ |
Jeff Thompson | 3d613fd | 2013-10-15 15:39:04 -0700 | [diff] [blame] | 59 | NDNBOOST_PP_CAT(V, n),\ |
| 60 | NDNBOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(This),\ |
| 61 | NDNBOOST_PP_CAT(P, n)\ |
| 62 | >::type NDNBOOST_PP_CAT(V, NDNBOOST_PP_INC(n)); |
Jeff Thompson | a28eed8 | 2013-08-22 16:21:10 -0700 | [diff] [blame] | 63 | |
Jeff Thompson | 3d613fd | 2013-10-15 15:39:04 -0700 | [diff] [blame] | 64 | #define NDNBOOST_TYPEOF_INTEGRAL_PARAM_DECODE(This, n)\ |
| 65 | typedef ndnboost::type_of::decode_integral<NDNBOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(This), NDNBOOST_PP_CAT(iter, n)> NDNBOOST_PP_CAT(d, n);\ |
| 66 | static const NDNBOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(This) NDNBOOST_PP_CAT(P, n) = NDNBOOST_PP_CAT(d, n)::value;\ |
| 67 | typedef typename NDNBOOST_PP_CAT(d, n)::iter NDNBOOST_PP_CAT(iter, NDNBOOST_PP_INC(n)); |
Jeff Thompson | a28eed8 | 2013-08-22 16:21:10 -0700 | [diff] [blame] | 68 | |
Jeff Thompson | 3d613fd | 2013-10-15 15:39:04 -0700 | [diff] [blame] | 69 | #define NDNBOOST_TYPEOF_INTEGRAL_PARAM_PLACEHOLDER(Param)\ |
| 70 | (NDNBOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(Param))0 |
Jeff Thompson | a28eed8 | 2013-08-22 16:21:10 -0700 | [diff] [blame] | 71 | |
Jeff Thompson | 3d613fd | 2013-10-15 15:39:04 -0700 | [diff] [blame] | 72 | #define NDNBOOST_TYPEOF_INTEGRAL_PARAM_DECLARATION_TYPE(Param)\ |
| 73 | NDNBOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(Param) |
Jeff Thompson | a28eed8 | 2013-08-22 16:21:10 -0700 | [diff] [blame] | 74 | |
Jeff Thompson | 3d613fd | 2013-10-15 15:39:04 -0700 | [diff] [blame] | 75 | #define NDNBOOST_TYPEOF_INTEGRAL_PARAM_PLACEHOLDER_TYPES(Param, n)\ |
| 76 | NDNBOOST_PP_CAT(T,n) |
Jeff Thompson | a28eed8 | 2013-08-22 16:21:10 -0700 | [diff] [blame] | 77 | |
Jeff Thompson | 3d613fd | 2013-10-15 15:39:04 -0700 | [diff] [blame] | 78 | #define NDNBOOST_TYPEOF_INTEGRAL_PARAM_ISTEMPLATE 0 |
Jeff Thompson | a28eed8 | 2013-08-22 16:21:10 -0700 | [diff] [blame] | 79 | |
Jeff Thompson | 3d613fd | 2013-10-15 15:39:04 -0700 | [diff] [blame] | 80 | #endif//NDNBOOST_TYPEOF_INTEGRAL_TEMPLATE_PARAM_HPP_INCLUDED |