blob: 1e418f3531358d38bf473218a6ddeb4b2d6ce723 [file] [log] [blame]
Jeff Thompsona28eed82013-08-22 16:21:10 -07001// 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 Thompson3d613fd2013-10-15 15:39:04 -07005#ifndef NDNBOOST_TYPEOF_INTEGRAL_TEMPLATE_PARAM_HPP_INCLUDED
6#define NDNBOOST_TYPEOF_INTEGRAL_TEMPLATE_PARAM_HPP_INCLUDED
Jeff Thompsona28eed82013-08-22 16:21:10 -07007
Jeff Thompson3d613fd2013-10-15 15:39:04 -07008#define NDNBOOST_TYPEOF_unsigned (unsigned)
9#define NDNBOOST_TYPEOF_signed (signed)
Jeff Thompsona28eed82013-08-22 16:21:10 -070010
Jeff Thompson3d613fd2013-10-15 15:39:04 -070011#define char_NDNBOOST_TYPEOF (char)
12#define short_NDNBOOST_TYPEOF (short)
13#define int_NDNBOOST_TYPEOF (int)
14#define long_NDNBOOST_TYPEOF (long)
Jeff Thompsona28eed82013-08-22 16:21:10 -070015
Jeff Thompson3d613fd2013-10-15 15:39:04 -070016#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 Thompsona28eed82013-08-22 16:21:10 -070023
Jeff Thompson3d613fd2013-10-15 15:39:04 -070024#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 Thompsona28eed82013-08-22 16:21:10 -070040
Jeff Thompson3d613fd2013-10-15 15:39:04 -070041#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 Thompsona28eed82013-08-22 16:21:10 -070044
Jeff Thompson3d613fd2013-10-15 15:39:04 -070045#define NDNBOOST_TYPEOF_INTEGRAL_PARAM(Type)\
Jeff Thompsona28eed82013-08-22 16:21:10 -070046 (INTEGRAL_PARAM)\
47 (Type)
48
Jeff Thompson3d613fd2013-10-15 15:39:04 -070049#define NDNBOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(Param)\
50 NDNBOOST_PP_SEQ_ELEM(1, Param)
Jeff Thompsona28eed82013-08-22 16:21:10 -070051
Jeff Thompson3d613fd2013-10-15 15:39:04 -070052#define NDNBOOST_TYPEOF_INTEGRAL_PARAM_EXPANDTYPE(Param)\
53 NDNBOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(Param)
Jeff Thompsona28eed82013-08-22 16:21:10 -070054
55// INTEGRAL_PARAM "virtual functions" implementation
56
Jeff Thompson3d613fd2013-10-15 15:39:04 -070057#define NDNBOOST_TYPEOF_INTEGRAL_PARAM_ENCODE(This, n)\
Jeff Thompsona28eed82013-08-22 16:21:10 -070058 typedef typename ndnboost::type_of::encode_integral<\
Jeff Thompson3d613fd2013-10-15 15:39:04 -070059 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 Thompsona28eed82013-08-22 16:21:10 -070063
Jeff Thompson3d613fd2013-10-15 15:39:04 -070064#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 Thompsona28eed82013-08-22 16:21:10 -070068
Jeff Thompson3d613fd2013-10-15 15:39:04 -070069#define NDNBOOST_TYPEOF_INTEGRAL_PARAM_PLACEHOLDER(Param)\
70 (NDNBOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(Param))0
Jeff Thompsona28eed82013-08-22 16:21:10 -070071
Jeff Thompson3d613fd2013-10-15 15:39:04 -070072#define NDNBOOST_TYPEOF_INTEGRAL_PARAM_DECLARATION_TYPE(Param)\
73 NDNBOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(Param)
Jeff Thompsona28eed82013-08-22 16:21:10 -070074
Jeff Thompson3d613fd2013-10-15 15:39:04 -070075#define NDNBOOST_TYPEOF_INTEGRAL_PARAM_PLACEHOLDER_TYPES(Param, n)\
76 NDNBOOST_PP_CAT(T,n)
Jeff Thompsona28eed82013-08-22 16:21:10 -070077
Jeff Thompson3d613fd2013-10-15 15:39:04 -070078#define NDNBOOST_TYPEOF_INTEGRAL_PARAM_ISTEMPLATE 0
Jeff Thompsona28eed82013-08-22 16:21:10 -070079
Jeff Thompson3d613fd2013-10-15 15:39:04 -070080#endif//NDNBOOST_TYPEOF_INTEGRAL_TEMPLATE_PARAM_HPP_INCLUDED