PageRenderTime 14ms CodeModel.GetById 1ms app.highlight 9ms RepoModel.GetById 1ms app.codeStats 0ms

/src/contrib/boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp

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