PageRenderTime 31ms CodeModel.GetById 12ms app.highlight 15ms RepoModel.GetById 1ms app.codeStats 0ms

/Src/Dependencies/Boost/boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp

http://hadesmem.googlecode.com/
C++ Header | 151 lines | 113 code | 27 blank | 11 comment | 0 complexity | dcadcb572abc500bb88422af43e92acc 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    : tag< T,na >
 61{
 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    : aux::msvc_eti_base< typename 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
 91{
 92    BOOST_MPL_AUX_LAMBDA_SUPPORT(
 93          5
 94        , bitxor_
 95        , ( N1, N2, N3, N4, N5 )
 96        )
 97};
 98
 99template<
100      typename N1
101    , typename N2
102    >
103struct bitxor_2
104    : aux::msvc_eti_base< typename apply_wrap2<
105          bitxor_impl<
106              typename bitxor_tag<N1>::type
107            , typename bitxor_tag<N2>::type
108            >
109        , N1
110        , N2
111        >::type >::type
112
113{
114    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitxor_2, (N1, N2))
115
116};
117
118BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)
119
120}}
121
122namespace boost { namespace mpl {
123
124namespace aux {
125template< typename T, T n1, T n2 >
126struct bitxor_wknd
127{
128    BOOST_STATIC_CONSTANT(T, value  = (n1 ^ n2));
129    typedef integral_c< T,value > type;
130};
131
132}
133
134template<>
135struct bitxor_impl< integral_c_tag,integral_c_tag >
136{
137    template< typename N1, typename N2 > struct apply
138        : aux::bitxor_wknd<
139              typename aux::largest_int<
140                  typename N1::value_type
141                , typename N2::value_type
142                >::type
143            , N1::value
144            , N2::value
145            >::type
146
147    {
148    };
149};
150
151}}