File indexing completed on 2025-01-18 09:41:29
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 shift_right_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< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >
0026 , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >
0027 >::type
0028 {
0029 };
0030
0031
0032 template<> struct shift_right_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<> struct shift_right_impl< na,integral_c_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<> struct shift_right_impl< integral_c_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 shift_right_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 >
0068 struct shift_right
0069
0070 : shift_right_impl<
0071 typename shift_right_tag<N1>::type
0072 , typename shift_right_tag<N2>::type
0073 >::template apply< N1,N2 >::type
0074 {
0075 BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))
0076
0077 };
0078
0079 BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)
0080
0081 }}
0082
0083 namespace boost { namespace mpl {
0084 template<>
0085 struct shift_right_impl< integral_c_tag,integral_c_tag >
0086 {
0087 template< typename N, typename S > struct apply
0088
0089 : integral_c<
0090 typename N::value_type
0091 , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
0092 >> BOOST_MPL_AUX_VALUE_WKND(S)::value
0093 )
0094 >
0095 {
0096 };
0097 };
0098
0099 }}