File indexing completed on 2025-01-18 09:41:34
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 namespace boost { namespace mpl {
0014
0015 template<
0016 typename Tag1
0017 , typename Tag2
0018 >
0019 struct bitor_impl
0020 : if_c<
0021 ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
0022 > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
0023 )
0024
0025 , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >
0026 , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >
0027 >::type
0028 {
0029 };
0030
0031
0032 template<> struct bitor_impl< na,na >
0033 {
0034 template< typename U1, typename U2 > struct apply
0035 {
0036 typedef apply type;
0037 BOOST_STATIC_CONSTANT(int, value = 0);
0038 };
0039 };
0040
0041 template< typename Tag > struct bitor_impl< na,Tag >
0042 {
0043 template< typename U1, typename U2 > struct apply
0044 {
0045 typedef apply type;
0046 BOOST_STATIC_CONSTANT(int, value = 0);
0047 };
0048 };
0049
0050 template< typename Tag > struct bitor_impl< Tag,na >
0051 {
0052 template< typename U1, typename U2 > struct apply
0053 {
0054 typedef apply type;
0055 BOOST_STATIC_CONSTANT(int, value = 0);
0056 };
0057 };
0058
0059 template< typename T > struct bitor_tag
0060 {
0061 typedef typename T::tag type;
0062 };
0063
0064 template<
0065 typename BOOST_MPL_AUX_NA_PARAM(N1)
0066 , typename BOOST_MPL_AUX_NA_PARAM(N2)
0067 , typename N3 = na, typename N4 = na, typename N5 = na
0068 >
0069 struct bitor_
0070 : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5>
0071 {
0072 };
0073
0074 template<
0075 typename N1, typename N2, typename N3, typename N4
0076 >
0077 struct bitor_< N1,N2,N3,N4,na >
0078
0079 : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>
0080 {
0081 BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
0082 5
0083 , bitor_
0084 , ( N1, N2, N3, N4, na )
0085 )
0086 };
0087
0088 template<
0089 typename N1, typename N2, typename N3
0090 >
0091 struct bitor_< N1,N2,N3,na,na >
0092
0093 : bitor_< bitor_< N1,N2 >, N3>
0094 {
0095 BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
0096 5
0097 , bitor_
0098 , ( N1, N2, N3, na, na )
0099 )
0100 };
0101
0102 template<
0103 typename N1, typename N2
0104 >
0105 struct bitor_< N1,N2,na,na,na >
0106 : bitor_impl<
0107 typename bitor_tag<N1>::type
0108 , typename bitor_tag<N2>::type
0109 >::template apply< N1,N2 >::type
0110 {
0111 BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
0112 5
0113 , bitor_
0114 , ( N1, N2, na, na, na )
0115 )
0116
0117 };
0118
0119 BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)
0120
0121 }}
0122
0123 namespace boost { namespace mpl {
0124 template<>
0125 struct bitor_impl< integral_c_tag,integral_c_tag >
0126 {
0127 template< typename N1, typename N2 > struct apply
0128
0129 : integral_c<
0130 typename aux::largest_int<
0131 typename N1::value_type
0132 , typename N2::value_type
0133 >::type
0134 , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
0135 | BOOST_MPL_AUX_VALUE_WKND(N2)::value
0136 )
0137 >
0138 {
0139 };
0140 };
0141
0142 }}