From a4a6778f73db5d8ec86925a578bfeba32c0b5656 Mon Sep 17 00:00:00 2001 From: Daniel James Date: Sun, 21 Jun 2009 09:41:46 +0000 Subject: [PATCH] Revert [54025] "Try to avoid using special macro handling code." [SVN r54141] --- .../hash/detail/float_functions.hpp | 46 ++++++++++++++++--- 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/include/boost/functional/hash/detail/float_functions.hpp b/include/boost/functional/hash/detail/float_functions.hpp index 199123d..f766ec9 100644 --- a/include/boost/functional/hash/detail/float_functions.hpp +++ b/include/boost/functional/hash/detail/float_functions.hpp @@ -100,8 +100,7 @@ namespace BOOST_HASH_DETECT_FLOAT_FUNCTIONS { #define BOOST_HASH_CALL_FLOAT_FUNC(cpp_func, c99_func, type1, type2) \ namespace BOOST_HASH_DETECT_FLOAT_FUNCTIONS { \ template \ - boost::hash_detail::not_found c99_func \ - BOOST_PREVENT_MACRO_SUBSTITUTION (Float, type2); \ + boost::hash_detail::not_found c99_func(Float, type2); \ } \ \ namespace boost { \ @@ -164,13 +163,48 @@ namespace boost { \ } \ } -BOOST_HASH_CALL_FLOAT_FUNC(ldexp, ldexpf, float, int) -BOOST_HASH_CALL_FLOAT_FUNC(ldexp, ldexpl, long double, int) -BOOST_HASH_CALL_FLOAT_FUNC(frexp, frexpf, float, int*) -BOOST_HASH_CALL_FLOAT_FUNC(frexp, frexpl, long double, int*) +#define BOOST_HASH_CALL_FLOAT_MACRO(cpp_func, c99_func, type1, type2) \ +namespace boost { \ + namespace hash_detail { \ + \ + template <> \ + struct call_##cpp_func { \ + typedef type1 float_type; \ + inline type1 operator()(type1 x, type2 y) const { \ + return c99_func(x, y); \ + } \ + }; \ + } \ +} +#if defined(ldexpf) +BOOST_HASH_CALL_FLOAT_MACRO(ldexp, ldexpf, float, int) +#else +BOOST_HASH_CALL_FLOAT_FUNC(ldexp, ldexpf, float, int) +#endif + +#if defined(ldexpl) +BOOST_HASH_CALL_FLOAT_MACRO(ldexp, ldexpl, long double, int) +#else +BOOST_HASH_CALL_FLOAT_FUNC(ldexp, ldexpl, long double, int) +#endif + +#if defined(frexpf) +BOOST_HASH_CALL_FLOAT_MACRO(frexp, frexpf, float, int*) +#else +BOOST_HASH_CALL_FLOAT_FUNC(frexp, frexpf, float, int*) +#endif + +#if defined(frexpl) +BOOST_HASH_CALL_FLOAT_MACRO(frexp, frexpl, long double, int*) +#else +BOOST_HASH_CALL_FLOAT_FUNC(frexp, frexpl, long double, int*) +#endif + +#undef BOOST_HASH_CALL_FLOAT_MACRO #undef BOOST_HASH_CALL_FLOAT_FUNC + namespace boost { namespace hash_detail