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