| // 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 NDNBOOST_TYPEOF_INTEGRAL_TEMPLATE_PARAM_HPP_INCLUDED |
| #define NDNBOOST_TYPEOF_INTEGRAL_TEMPLATE_PARAM_HPP_INCLUDED |
| |
| #define NDNBOOST_TYPEOF_unsigned (unsigned) |
| #define NDNBOOST_TYPEOF_signed (signed) |
| |
| #define char_NDNBOOST_TYPEOF (char) |
| #define short_NDNBOOST_TYPEOF (short) |
| #define int_NDNBOOST_TYPEOF (int) |
| #define long_NDNBOOST_TYPEOF (long) |
| |
| #define NDNBOOST_TYPEOF_char_NDNBOOST_TYPEOF (char) |
| #define NDNBOOST_TYPEOF_short_NDNBOOST_TYPEOF (short) |
| #define NDNBOOST_TYPEOF_int_NDNBOOST_TYPEOF (int) |
| #define NDNBOOST_TYPEOF_long_NDNBOOST_TYPEOF (long) |
| #define NDNBOOST_TYPEOF_bool_NDNBOOST_TYPEOF (bool) |
| #define NDNBOOST_TYPEOF_unsigned_NDNBOOST_TYPEOF (unsigned) |
| #define NDNBOOST_TYPEOF_size_t_NDNBOOST_TYPEOF (size_t) |
| |
| #define NDNBOOST_TYPEOF_MAKE_OBJ_char NDNBOOST_TYPEOF_INTEGRAL_PARAM(char) |
| #define NDNBOOST_TYPEOF_MAKE_OBJ_short NDNBOOST_TYPEOF_INTEGRAL_PARAM(short) |
| #define NDNBOOST_TYPEOF_MAKE_OBJ_int NDNBOOST_TYPEOF_INTEGRAL_PARAM(int) |
| #define NDNBOOST_TYPEOF_MAKE_OBJ_long NDNBOOST_TYPEOF_INTEGRAL_PARAM(long) |
| #define NDNBOOST_TYPEOF_MAKE_OBJ_bool NDNBOOST_TYPEOF_INTEGRAL_PARAM(bool) |
| #define NDNBOOST_TYPEOF_MAKE_OBJ_unsigned NDNBOOST_TYPEOF_INTEGRAL_PARAM(unsigned) |
| #define NDNBOOST_TYPEOF_MAKE_OBJ_size_t NDNBOOST_TYPEOF_INTEGRAL_PARAM(size_t) |
| #define NDNBOOST_TYPEOF_MAKE_OBJ_unsignedchar NDNBOOST_TYPEOF_INTEGRAL_PARAM(unsigned char) |
| #define NDNBOOST_TYPEOF_MAKE_OBJ_unsignedshort NDNBOOST_TYPEOF_INTEGRAL_PARAM(unsigned short) |
| #define NDNBOOST_TYPEOF_MAKE_OBJ_unsignedint NDNBOOST_TYPEOF_INTEGRAL_PARAM(unsigned int) |
| #define NDNBOOST_TYPEOF_MAKE_OBJ_unsignedlong NDNBOOST_TYPEOF_INTEGRAL_PARAM(unsigned long) |
| #define NDNBOOST_TYPEOF_MAKE_OBJ_signedchar NDNBOOST_TYPEOF_INTEGRAL_PARAM(signed char) |
| #define NDNBOOST_TYPEOF_MAKE_OBJ_signedshort NDNBOOST_TYPEOF_INTEGRAL_PARAM(signed short) |
| #define NDNBOOST_TYPEOF_MAKE_OBJ_signedint NDNBOOST_TYPEOF_INTEGRAL_PARAM(signed int) |
| #define NDNBOOST_TYPEOF_MAKE_OBJ_signedlong NDNBOOST_TYPEOF_INTEGRAL_PARAM(signed long) |
| #define NDNBOOST_TYPEOF_MAKE_OBJ_integral(x) NDNBOOST_TYPEOF_INTEGRAL_PARAM(x) |
| |
| #define NDNBOOST_TYPEOF_INTEGRAL(X) integral(X) NDNBOOST_TYPEOF_EAT |
| #define NDNBOOST_TYPEOF_EAT_NDNBOOST_TYPEOF |
| #define NDNBOOST_TYPEOF_integral(X) (integral(X)) |
| |
| #define NDNBOOST_TYPEOF_INTEGRAL_PARAM(Type)\ |
| (INTEGRAL_PARAM)\ |
| (Type) |
| |
| #define NDNBOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(Param)\ |
| NDNBOOST_PP_SEQ_ELEM(1, Param) |
| |
| #define NDNBOOST_TYPEOF_INTEGRAL_PARAM_EXPANDTYPE(Param)\ |
| NDNBOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(Param) |
| |
| // INTEGRAL_PARAM "virtual functions" implementation |
| |
| #define NDNBOOST_TYPEOF_INTEGRAL_PARAM_ENCODE(This, n)\ |
| typedef typename ndnboost::type_of::encode_integral<\ |
| NDNBOOST_PP_CAT(V, n),\ |
| NDNBOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(This),\ |
| NDNBOOST_PP_CAT(P, n)\ |
| >::type NDNBOOST_PP_CAT(V, NDNBOOST_PP_INC(n)); |
| |
| #define NDNBOOST_TYPEOF_INTEGRAL_PARAM_DECODE(This, n)\ |
| typedef ndnboost::type_of::decode_integral<NDNBOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(This), NDNBOOST_PP_CAT(iter, n)> NDNBOOST_PP_CAT(d, n);\ |
| static const NDNBOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(This) NDNBOOST_PP_CAT(P, n) = NDNBOOST_PP_CAT(d, n)::value;\ |
| typedef typename NDNBOOST_PP_CAT(d, n)::iter NDNBOOST_PP_CAT(iter, NDNBOOST_PP_INC(n)); |
| |
| #define NDNBOOST_TYPEOF_INTEGRAL_PARAM_PLACEHOLDER(Param)\ |
| (NDNBOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(Param))0 |
| |
| #define NDNBOOST_TYPEOF_INTEGRAL_PARAM_DECLARATION_TYPE(Param)\ |
| NDNBOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(Param) |
| |
| #define NDNBOOST_TYPEOF_INTEGRAL_PARAM_PLACEHOLDER_TYPES(Param, n)\ |
| NDNBOOST_PP_CAT(T,n) |
| |
| #define NDNBOOST_TYPEOF_INTEGRAL_PARAM_ISTEMPLATE 0 |
| |
| #endif//NDNBOOST_TYPEOF_INTEGRAL_TEMPLATE_PARAM_HPP_INCLUDED |