Permalink
Cannot retrieve contributors at this time
Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.
Sign up
Fetching contributors…
| /*============================================================================= | |
| Copyright (c) 2001-2014 Joel de Guzman | |
| Copyright (c) 2001-2011 Hartmut Kaiser | |
| http://spirit.sourceforge.net/ | |
| Distributed under the Boost Software License, Version 1.0. (See accompanying | |
| file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |
| =============================================================================*/ | |
| #if !defined(BOOST_SPIRIT_X3_POW10_DECEMBER_26_2008_1118AM) | |
| #define BOOST_SPIRIT_X3_POW10_DECEMBER_26_2008_1118AM | |
| #include <boost/config/no_tr1/cmath.hpp> | |
| #include <boost/limits.hpp> | |
| #include <boost/spirit/home/x3/support/unused.hpp> | |
| #include <boost/spirit/home/x3/support/traits/numeric_traits.hpp> | |
| #if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) | |
| # pragma warning(push) | |
| # pragma warning(disable: 4244) // conversion from 'double' to 'float', possible loss of data | |
| #endif | |
| namespace boost { namespace spirit { namespace x3 { namespace traits | |
| { | |
| namespace detail | |
| { | |
| template <typename T, typename Enable = void> | |
| struct pow10_helper | |
| { | |
| static T call(unsigned dim) | |
| { | |
| using namespace std; // allow for ADL to find the correct overload | |
| return pow(T(10), T(dim)); | |
| } | |
| }; | |
| template <> | |
| struct pow10_helper<unused_type> | |
| { | |
| static unused_type call(unused_type) | |
| { | |
| return unused; | |
| } | |
| }; | |
| #if (DBL_MAX_10_EXP == 308) // for IEEE-754 | |
| template <> | |
| struct pow10_helper<double> | |
| { | |
| static double call(unsigned dim) | |
| { | |
| static double const exponents[] = | |
| { | |
| 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, | |
| 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, | |
| 1e20, 1e21, 1e22, 1e23, 1e24, 1e25, 1e26, 1e27, 1e28, 1e29, | |
| 1e30, 1e31, 1e32, 1e33, 1e34, 1e35, 1e36, 1e37, 1e38, 1e39, | |
| 1e40, 1e41, 1e42, 1e43, 1e44, 1e45, 1e46, 1e47, 1e48, 1e49, | |
| 1e50, 1e51, 1e52, 1e53, 1e54, 1e55, 1e56, 1e57, 1e58, 1e59, | |
| 1e60, 1e61, 1e62, 1e63, 1e64, 1e65, 1e66, 1e67, 1e68, 1e69, | |
| 1e70, 1e71, 1e72, 1e73, 1e74, 1e75, 1e76, 1e77, 1e78, 1e79, | |
| 1e80, 1e81, 1e82, 1e83, 1e84, 1e85, 1e86, 1e87, 1e88, 1e89, | |
| 1e90, 1e91, 1e92, 1e93, 1e94, 1e95, 1e96, 1e97, 1e98, 1e99, | |
| 1e100, 1e101, 1e102, 1e103, 1e104, 1e105, 1e106, 1e107, 1e108, 1e109, | |
| 1e110, 1e111, 1e112, 1e113, 1e114, 1e115, 1e116, 1e117, 1e118, 1e119, | |
| 1e120, 1e121, 1e122, 1e123, 1e124, 1e125, 1e126, 1e127, 1e128, 1e129, | |
| 1e130, 1e131, 1e132, 1e133, 1e134, 1e135, 1e136, 1e137, 1e138, 1e139, | |
| 1e140, 1e141, 1e142, 1e143, 1e144, 1e145, 1e146, 1e147, 1e148, 1e149, | |
| 1e150, 1e151, 1e152, 1e153, 1e154, 1e155, 1e156, 1e157, 1e158, 1e159, | |
| 1e160, 1e161, 1e162, 1e163, 1e164, 1e165, 1e166, 1e167, 1e168, 1e169, | |
| 1e170, 1e171, 1e172, 1e173, 1e174, 1e175, 1e176, 1e177, 1e178, 1e179, | |
| 1e180, 1e181, 1e182, 1e183, 1e184, 1e185, 1e186, 1e187, 1e188, 1e189, | |
| 1e190, 1e191, 1e192, 1e193, 1e194, 1e195, 1e196, 1e197, 1e198, 1e199, | |
| 1e200, 1e201, 1e202, 1e203, 1e204, 1e205, 1e206, 1e207, 1e208, 1e209, | |
| 1e210, 1e211, 1e212, 1e213, 1e214, 1e215, 1e216, 1e217, 1e218, 1e219, | |
| 1e220, 1e221, 1e222, 1e223, 1e224, 1e225, 1e226, 1e227, 1e228, 1e229, | |
| 1e230, 1e231, 1e232, 1e233, 1e234, 1e235, 1e236, 1e237, 1e238, 1e239, | |
| 1e240, 1e241, 1e242, 1e243, 1e244, 1e245, 1e246, 1e247, 1e248, 1e249, | |
| 1e250, 1e251, 1e252, 1e253, 1e254, 1e255, 1e256, 1e257, 1e258, 1e259, | |
| 1e260, 1e261, 1e262, 1e263, 1e264, 1e265, 1e266, 1e267, 1e268, 1e269, | |
| 1e270, 1e271, 1e272, 1e273, 1e274, 1e275, 1e276, 1e277, 1e278, 1e279, | |
| 1e280, 1e281, 1e282, 1e283, 1e284, 1e285, 1e286, 1e287, 1e288, 1e289, | |
| 1e290, 1e291, 1e292, 1e293, 1e294, 1e295, 1e296, 1e297, 1e298, 1e299, | |
| 1e300, 1e301, 1e302, 1e303, 1e304, 1e305, 1e306, 1e307, 1e308, | |
| }; | |
| BOOST_ASSERT(dim < sizeof(exponents)/sizeof(double)); | |
| return exponents[dim]; | |
| } | |
| }; | |
| template <> | |
| struct pow10_helper<float> | |
| { | |
| static float call(unsigned dim) | |
| { | |
| return pow10_helper<double>::call(dim); | |
| } | |
| }; | |
| #endif // for IEEE-754 | |
| } | |
| template <typename T> | |
| inline T pow10(unsigned dim) | |
| { | |
| return detail::pow10_helper<T>::call(dim); | |
| } | |
| }}}} | |
| #if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) | |
| # pragma warning(pop) | |
| #endif | |
| #endif |