blob: 1e418f3531358d38bf473218a6ddeb4b2d6ce723 [file] [log] [blame]
// 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