williamr@2: // © Copyright Fernando Luis Cacciola Carballal 2000-2004 williamr@2: // Use, modification, and distribution is subject to the Boost Software williamr@2: // License, Version 1.0. (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 library home page at http://www.boost.org/libs/numeric/conversion williamr@2: // williamr@2: // Contact the author at: fernando_cacciola@hotmail.com williamr@2: // williamr@2: #ifndef BOOST_NUMERIC_CONVERSION_DETAIL_UDT_BUILTIN_MIXTURE_FLC_12NOV2002_HPP williamr@2: #define BOOST_NUMERIC_CONVERSION_DETAIL_UDT_BUILTIN_MIXTURE_FLC_12NOV2002_HPP williamr@2: williamr@2: #include "boost/type_traits/is_arithmetic.hpp" williamr@2: williamr@2: #include "boost/numeric/conversion/udt_builtin_mixture_enum.hpp" williamr@2: #include "boost/numeric/conversion/detail/meta.hpp" williamr@2: williamr@2: #include "boost/mpl/integral_c.hpp" williamr@2: williamr@2: namespace boost { namespace numeric { namespace convdetail williamr@2: { williamr@2: // Integral Constants for 'UdtMixture' williamr@2: typedef mpl::integral_c builtin2builtin_c ; williamr@2: typedef mpl::integral_c builtin2udt_c ; williamr@2: typedef mpl::integral_c udt2builtin_c ; williamr@2: typedef mpl::integral_c udt2udt_c ; williamr@2: williamr@2: // Metafunction: williamr@2: // williamr@2: // for_udt_mixture::type williamr@2: // williamr@2: // {UdtMixture} is one of the Integral Constants for UdMixture, declared above. williamr@2: // {BuiltIn2BuiltIn,BuiltIn2Udt,Udt2BuiltIn,Udt2Udt} are aribtrary types. (not metafunctions) williamr@2: // williamr@2: // According to the value of 'UdtMixture', selects the corresponding type. williamr@2: // williamr@2: template williamr@2: struct for_udt_builtin_mixture williamr@2: { williamr@2: typedef typename williamr@2: ct_switch4::type williamr@2: type ; williamr@2: } ; williamr@2: williamr@2: // Metafunction: williamr@2: // williamr@2: // get_udt_mixture::type williamr@2: // williamr@2: // Selects the appropriate UdtMixture Integral Constant for the combination T,S. williamr@2: // williamr@2: template williamr@2: struct get_udt_builtin_mixture williamr@2: { williamr@2: typedef is_arithmetic S_builtin ; williamr@2: typedef is_arithmetic T_builtin ; williamr@2: williamr@2: typedef typename williamr@2: for_both::type williamr@2: type ; williamr@2: } ; williamr@2: williamr@2: } } } // namespace boost::numeric::convdetail williamr@2: williamr@2: #endif williamr@2: williamr@2: