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/bitand.hpp" header 11 // -- DO NOT modify by hand! 12 13 namespace boost { namespace mpl { 14 15 template< 16 typename Tag1 17 , typename Tag2 18 > 19 struct bitand_impl 20 : if_c< 21 ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1) 22 > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2) 23 ) 24 25 , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 > 26 , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 > 27 >::type 28 { 29 }; 30 31 /// for Digital Mars C++/compilers with no CTPS/TTP support 32 template<> struct bitand_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 41 template< typename Tag > struct bitand_impl< na,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 50 template< typename Tag > struct bitand_impl< 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 59 template< typename T > struct bitand_tag 60 { 61 typedef typename T::tag type; 62 }; 63 64 template< 65 typename BOOST_MPL_AUX_NA_PARAM(N1) 66 , typename BOOST_MPL_AUX_NA_PARAM(N2) 67 , typename N3 = na, typename N4 = na, typename N5 = na 68 > 69 struct bitand_ 70 : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5> 71 { 72 }; 73 74 template< 75 typename N1, typename N2, typename N3, typename N4 76 > 77 struct bitand_< N1,N2,N3,N4,na > 78 79 : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4> 80 { 81 BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( 82 5 83 , bitand_ 84 , ( N1, N2, N3, N4, na ) 85 ) 86 }; 87 88 template< 89 typename N1, typename N2, typename N3 90 > 91 struct bitand_< N1,N2,N3,na,na > 92 93 : bitand_< bitand_< N1,N2 >, N3> 94 { 95 BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( 96 5 97 , bitand_ 98 , ( N1, N2, N3, na, na ) 99 ) 100 }; 101 102 template< 103 typename N1, typename N2 104 > 105 struct bitand_< N1,N2,na,na,na > 106 : bitand_impl< 107 typename bitand_tag<N1>::type 108 , typename bitand_tag<N2>::type 109 >::template apply< N1,N2 >::type 110 { 111 BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC( 112 5 113 , bitand_ 114 , ( N1, N2, na, na, na ) 115 ) 116 117 }; 118 119 BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_) 120 121 }} 122 123 namespace boost { namespace mpl { 124 template<> 125 struct bitand_impl< integral_c_tag,integral_c_tag > 126 { 127 template< typename N1, typename N2 > struct apply 128 129 : integral_c< 130 typename aux::largest_int< 131 typename N1::value_type 132 , typename N2::value_type 133 >::type 134 , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value 135 & BOOST_MPL_AUX_VALUE_WKND(N2)::value 136 ) 137 > 138 { 139 }; 140 }; 141 142 }} 143