epoc32/include/stdapis/boost/mpl/aux_/na_spec.hpp
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:27:01 +0100
branchSymbian2
changeset 3 e1b950c65cb4
permissions -rw-r--r--
Attempt to represent the S^2->S^3 header reorganisation as a series of "hg rename" operations
     1 
     2 #ifndef BOOST_MPL_AUX_NA_SPEC_HPP_INCLUDED
     3 #define BOOST_MPL_AUX_NA_SPEC_HPP_INCLUDED
     4 
     5 // Copyright Aleksey Gurtovoy 2001-2004
     6 //
     7 // Distributed under the Boost Software License, Version 1.0. 
     8 // (See accompanying file LICENSE_1_0.txt or copy at 
     9 // http://www.boost.org/LICENSE_1_0.txt)
    10 //
    11 // See http://www.boost.org/libs/mpl for documentation.
    12 
    13 // $Source: /cvsroot/boost/boost/boost/mpl/aux_/na_spec.hpp,v $
    14 // $Date: 2004/11/28 01:38:15 $
    15 // $Revision: 1.3 $
    16 
    17 #if !defined(BOOST_MPL_PREPROCESSING_MODE)
    18 #   include <boost/mpl/lambda_fwd.hpp>
    19 #   include <boost/mpl/int.hpp>
    20 #   include <boost/mpl/bool.hpp>
    21 #   include <boost/mpl/aux_/na.hpp>
    22 #   include <boost/mpl/aux_/arity.hpp>
    23 #   include <boost/mpl/aux_/template_arity_fwd.hpp>
    24 #endif
    25 
    26 #include <boost/mpl/aux_/preprocessor/params.hpp>
    27 #include <boost/mpl/aux_/preprocessor/enum.hpp>
    28 #include <boost/mpl/aux_/preprocessor/def_params_tail.hpp>
    29 #include <boost/mpl/aux_/lambda_arity_param.hpp>
    30 #include <boost/mpl/aux_/config/dtp.hpp>
    31 #include <boost/mpl/aux_/config/eti.hpp>
    32 #include <boost/mpl/aux_/nttp_decl.hpp>
    33 #include <boost/mpl/aux_/config/ttp.hpp>
    34 #include <boost/mpl/aux_/config/lambda.hpp>
    35 #include <boost/mpl/aux_/config/overload_resolution.hpp>
    36 
    37 
    38 #define BOOST_MPL_AUX_NA_PARAMS(i) \
    39     BOOST_MPL_PP_ENUM(i, na) \
    40 /**/
    41 
    42 #if defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)
    43 #   define BOOST_MPL_AUX_NA_SPEC_ARITY(i, name) \
    44 namespace aux { \
    45 template< BOOST_MPL_AUX_NTTP_DECL(int, N) > \
    46 struct arity< \
    47           name< BOOST_MPL_AUX_NA_PARAMS(i) > \
    48         , N \
    49         > \
    50     : int_< BOOST_MPL_LIMIT_METAFUNCTION_ARITY > \
    51 { \
    52 }; \
    53 } \
    54 /**/
    55 #else
    56 #   define BOOST_MPL_AUX_NA_SPEC_ARITY(i, name) /**/
    57 #endif
    58 
    59 #define BOOST_MPL_AUX_NA_SPEC_MAIN(i, name) \
    60 template<> \
    61 struct name< BOOST_MPL_AUX_NA_PARAMS(i) > \
    62 { \
    63     template< \
    64           BOOST_MPL_PP_PARAMS(i, typename T) \
    65         BOOST_MPL_PP_NESTED_DEF_PARAMS_TAIL(i, typename T, na) \
    66         > \
    67     struct apply \
    68         : name< BOOST_MPL_PP_PARAMS(i, T) > \
    69     { \
    70     }; \
    71 }; \
    72 /**/
    73 
    74 #if defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)
    75 #   define BOOST_MPL_AUX_NA_SPEC_LAMBDA(i, name) \
    76 template<> \
    77 struct lambda< \
    78       name< BOOST_MPL_AUX_NA_PARAMS(i) > \
    79     , void_ \
    80     , true_ \
    81     > \
    82 { \
    83     typedef false_ is_le; \
    84     typedef name< BOOST_MPL_AUX_NA_PARAMS(i) > type; \
    85 }; \
    86 template<> \
    87 struct lambda< \
    88       name< BOOST_MPL_AUX_NA_PARAMS(i) > \
    89     , void_ \
    90     , false_ \
    91     > \
    92 { \
    93     typedef false_ is_le; \
    94     typedef name< BOOST_MPL_AUX_NA_PARAMS(i) > type; \
    95 }; \
    96 /**/
    97 #else
    98 #   define BOOST_MPL_AUX_NA_SPEC_LAMBDA(i, name) \
    99 template< typename Tag > \
   100 struct lambda< \
   101       name< BOOST_MPL_AUX_NA_PARAMS(i) > \
   102     , Tag \
   103     BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(int_<-1>) \
   104     > \
   105 { \
   106     typedef false_ is_le; \
   107     typedef name< BOOST_MPL_AUX_NA_PARAMS(i) > result_; \
   108     typedef name< BOOST_MPL_AUX_NA_PARAMS(i) > type; \
   109 }; \
   110 /**/
   111 #endif
   112 
   113 #if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING) \
   114     || defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) \
   115         && defined(BOOST_MPL_CFG_BROKEN_OVERLOAD_RESOLUTION)
   116 #   define BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(i, j, name) \
   117 namespace aux { \
   118 template< BOOST_MPL_PP_PARAMS(j, typename T) > \
   119 struct template_arity< \
   120           name< BOOST_MPL_PP_PARAMS(j, T) > \
   121         > \
   122     : int_<j> \
   123 { \
   124 }; \
   125 \
   126 template<> \
   127 struct template_arity< \
   128           name< BOOST_MPL_PP_ENUM(i, na) > \
   129         > \
   130     : int_<-1> \
   131 { \
   132 }; \
   133 } \
   134 /**/
   135 #else
   136 #   define BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(i, j, name) /**/
   137 #endif
   138 
   139 #if defined(BOOST_MPL_CFG_MSVC_ETI_BUG)
   140 #   define BOOST_MPL_AUX_NA_SPEC_ETI(i, name) \
   141 template<> \
   142 struct name< BOOST_MPL_PP_ENUM(i, int) > \
   143 { \
   144     typedef int type; \
   145     enum { value = 0 }; \
   146 }; \
   147 /**/
   148 #else
   149 #   define BOOST_MPL_AUX_NA_SPEC_ETI(i, name) /**/
   150 #endif
   151 
   152 #define BOOST_MPL_AUX_NA_PARAM(param) param = na
   153 
   154 #define BOOST_MPL_AUX_NA_SPEC_NO_ETI(i, name) \
   155 BOOST_MPL_AUX_NA_SPEC_MAIN(i, name) \
   156 BOOST_MPL_AUX_NA_SPEC_LAMBDA(i, name) \
   157 BOOST_MPL_AUX_NA_SPEC_ARITY(i, name) \
   158 BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(i, i, name) \
   159 /**/
   160 
   161 #define BOOST_MPL_AUX_NA_SPEC(i, name) \
   162 BOOST_MPL_AUX_NA_SPEC_NO_ETI(i, name) \
   163 BOOST_MPL_AUX_NA_SPEC_ETI(i, name) \
   164 /**/
   165 
   166 #define BOOST_MPL_AUX_NA_SPEC2(i, j, name) \
   167 BOOST_MPL_AUX_NA_SPEC_MAIN(i, name) \
   168 BOOST_MPL_AUX_NA_SPEC_ETI(i, name) \
   169 BOOST_MPL_AUX_NA_SPEC_LAMBDA(i, name) \
   170 BOOST_MPL_AUX_NA_SPEC_ARITY(i, name) \
   171 BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(i, j, name) \
   172 /**/
   173 
   174 
   175 #endif // BOOST_MPL_AUX_NA_SPEC_HPP_INCLUDED