ossrv_pub/boost_apis/boost/typeof/integral_template_param.hpp
changeset 0 e4d67989cc36
equal deleted inserted replaced
-1:000000000000 0:e4d67989cc36
       
     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 boost::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 boost::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