williamr@2: williamr@2: // NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION williamr@2: williamr@2: // Copyright Aleksey Gurtovoy 2000-2004 williamr@2: // williamr@2: // Distributed under the Boost Software License, Version 1.0. williamr@2: // (See accompanying file LICENSE_1_0.txt or copy at williamr@2: // http://www.boost.org/LICENSE_1_0.txt) williamr@2: // williamr@2: // See http://www.boost.org/libs/mpl for documentation. williamr@2: williamr@2: // $Source: /cvsroot/boost/boost/boost/mpl/aux_/arithmetic_op.hpp,v $ williamr@2: // $Date: 2004/09/07 08:51:32 $ williamr@2: // $Revision: 1.4 $ williamr@2: williamr@2: #if !defined(BOOST_MPL_PREPROCESSING_MODE) williamr@2: # include williamr@2: # include williamr@2: # include williamr@2: #endif williamr@2: williamr@2: #if !defined(AUX778076_OP_PREFIX) williamr@2: # define AUX778076_OP_PREFIX AUX778076_OP_NAME williamr@2: #endif williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: #if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ williamr@2: && !defined(BOOST_MPL_PREPROCESSING_MODE) williamr@2: williamr@2: # define BOOST_MPL_PREPROCESSED_HEADER AUX778076_OP_PREFIX.hpp williamr@2: # include williamr@2: williamr@2: #else williamr@2: williamr@2: # include williamr@2: # include williamr@2: williamr@2: williamr@2: namespace boost { namespace mpl { williamr@2: williamr@2: #if defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC) williamr@2: namespace aux { williamr@2: template< typename T, T n1, T n2 > williamr@2: struct BOOST_PP_CAT(AUX778076_OP_PREFIX,_wknd) williamr@2: { williamr@2: BOOST_STATIC_CONSTANT(T, value = (n1 AUX778076_OP_TOKEN n2)); williamr@2: typedef integral_c type; williamr@2: }; williamr@2: } williamr@2: #endif williamr@2: williamr@2: template<> williamr@2: struct AUX778076_OP_IMPL_NAME williamr@2: { williamr@2: template< typename N1, typename N2 > struct apply williamr@2: #if !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC) williamr@2: : integral_c< williamr@2: typename aux::largest_int< williamr@2: typename N1::value_type williamr@2: , typename N2::value_type williamr@2: >::type williamr@2: , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value williamr@2: AUX778076_OP_TOKEN BOOST_MPL_AUX_VALUE_WKND(N2)::value williamr@2: ) williamr@2: > williamr@2: #else williamr@2: : aux::BOOST_PP_CAT(AUX778076_OP_PREFIX,_wknd)< williamr@2: typename aux::largest_int< williamr@2: typename N1::value_type williamr@2: , typename N2::value_type williamr@2: >::type williamr@2: , N1::value williamr@2: , N2::value williamr@2: >::type williamr@2: #endif williamr@2: { williamr@2: }; williamr@2: }; williamr@2: williamr@2: }} williamr@2: williamr@2: #endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS williamr@2: williamr@2: #undef AUX778076_OP_TAG_NAME williamr@2: #undef AUX778076_OP_IMPL_NAME williamr@2: #undef AUX778076_OP_ARITY williamr@2: #undef AUX778076_OP_PREFIX williamr@2: #undef AUX778076_OP_NAME williamr@2: #undef AUX778076_OP_TOKEN