PageRenderTime 44ms CodeModel.GetById 11ms app.highlight 27ms RepoModel.GetById 1ms app.codeStats 1ms

/src/contrib/boost/mpl/aux_/preprocessed/msvc70/plus.hpp

http://pythonocc.googlecode.com/
C++ Header | 150 lines | 113 code | 27 blank | 10 comment | 0 complexity | a18a0dcf5935df0154bf2febdb2f418a MD5 | raw file
  1
  2// Copyright Aleksey Gurtovoy 2000-2004
  3//
  4// Distributed under the Boost Software License, Version 1.0. 
  5// (See accompanying file LICENSE_1_0.txt or copy at 
  6// http://www.boost.org/LICENSE_1_0.txt)
  7//
  8
  9// Preprocessed version of "boost/mpl/plus.hpp" header
 10// -- DO NOT modify by hand!
 11
 12namespace boost { namespace mpl {
 13
 14template<
 15      typename Tag1
 16    , typename Tag2
 17
 18    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
 19    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
 20    >
 21struct plus_impl
 22    : if_c<
 23          ( tag1_ > tag2_ )
 24        , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >
 25        , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >
 26        >::type
 27{
 28};
 29
 30/// for Digital Mars C++/compilers with no CTPS/TTP support
 31template<> struct plus_impl< na,na >
 32{
 33    template< typename U1, typename U2 > struct apply
 34    {
 35        typedef apply type;
 36        BOOST_STATIC_CONSTANT(int, value  = 0);
 37    };
 38};
 39
 40template<> struct plus_impl< na,integral_c_tag >
 41{
 42    template< typename U1, typename U2 > struct apply
 43    {
 44        typedef apply type;
 45        BOOST_STATIC_CONSTANT(int, value  = 0);
 46    };
 47};
 48
 49template<> struct plus_impl< integral_c_tag,na >
 50{
 51    template< typename U1, typename U2 > struct apply
 52    {
 53        typedef apply type;
 54        BOOST_STATIC_CONSTANT(int, value  = 0);
 55    };
 56};
 57
 58template< typename T > struct plus_tag
 59    : tag< T,na >
 60{
 61};
 62
 63/// forward declaration
 64
 65template<
 66      typename BOOST_MPL_AUX_NA_PARAM(N1)
 67    , typename BOOST_MPL_AUX_NA_PARAM(N2)
 68    >
 69struct plus2;
 70
 71template<
 72      typename BOOST_MPL_AUX_NA_PARAM(N1)
 73    , typename BOOST_MPL_AUX_NA_PARAM(N2)
 74    , typename N3 = na, typename N4 = na, typename N5 = na
 75    >
 76struct plus
 77
 78    : aux::msvc_eti_base< typename if_<
 79
 80          is_na<N3>
 81        , plus2< N1,N2 >
 82        , plus<
 83              plus2< N1,N2 >
 84            , N3, N4, N5
 85            >
 86        >::type
 87
 88    >
 89
 90{
 91    BOOST_MPL_AUX_LAMBDA_SUPPORT(
 92          5
 93        , plus
 94        , ( N1, N2, N3, N4, N5 )
 95        )
 96};
 97
 98template<
 99      typename N1
100    , typename N2
101    >
102struct plus2
103    : aux::msvc_eti_base< typename apply_wrap2<
104          plus_impl<
105              typename plus_tag<N1>::type
106            , typename plus_tag<N2>::type
107            >
108        , N1
109        , N2
110        >::type >::type
111
112{
113    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, plus2, (N1, N2))
114
115};
116
117BOOST_MPL_AUX_NA_SPEC2(2, 5, plus)
118
119}}
120
121namespace boost { namespace mpl {
122
123namespace aux {
124template< typename T, T n1, T n2 >
125struct plus_wknd
126{
127    BOOST_STATIC_CONSTANT(T, value  = (n1 + n2));
128    typedef integral_c< T,value > type;
129};
130
131}
132
133template<>
134struct plus_impl< integral_c_tag,integral_c_tag >
135{
136    template< typename N1, typename N2 > struct apply
137        : aux::plus_wknd<
138              typename aux::largest_int<
139                  typename N1::value_type
140                , typename N2::value_type
141                >::type
142            , N1::value
143            , N2::value
144            >::type
145
146    {
147    };
148};
149
150}}