]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/boost/multiprecision/concepts/mp_number_archetypes.hpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / boost / multiprecision / concepts / mp_number_archetypes.hpp
index b17eb121aebb5e6f4d0855f8cc88b8006456d956..2b9a8da8c436281fc45447690c9881269fff14df 100644 (file)
@@ -1,7 +1,7 @@
 ///////////////////////////////////////////////////////////////
 //  Copyright 2012 John Maddock. 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_
+//  LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt
 
 #ifndef BOOST_MATH_CONCEPTS_ER_HPP
 #define BOOST_MATH_CONCEPTS_ER_HPP
 #include <boost/multiprecision/number.hpp>
 #include <boost/math/special_functions/fpclassify.hpp>
 #include <boost/mpl/list.hpp>
+#include <boost/container_hash/hash.hpp>
 
-namespace boost{
-namespace multiprecision{
-namespace concepts{
+namespace boost {
+namespace multiprecision {
+namespace concepts {
 
 #ifdef BOOST_MSVC
 #pragma warning(push)
-#pragma warning(disable:4244)
+#pragma warning(disable : 4244)
 #endif
 
 struct number_backend_float_architype
 {
-   typedef mpl::list<boost::long_long_type>                 signed_types;
-   typedef mpl::list<boost::ulong_long_type>        unsigned_types;
-   typedef mpl::list<long double>               float_types;
-   typedef int                                  exponent_type;
+   typedef mpl::list<boost::long_long_type>  signed_types;
+   typedef mpl::list<boost::ulong_long_type> unsigned_types;
+   typedef mpl::list<long double>            float_types;
+   typedef int                               exponent_type;
 
    number_backend_float_architype()
    {
@@ -41,31 +42,31 @@ struct number_backend_float_architype
       std::cout << "Copy construct" << std::endl;
       m_value = o.m_value;
    }
-   number_backend_float_architype& operator = (const number_backend_float_architype& o)
+   number_backend_float_architype& operator=(const number_backend_float_architype& o)
    {
       m_value = o.m_value;
       std::cout << "Assignment (" << m_value << ")" << std::endl;
       return *this;
    }
-   number_backend_float_architype& operator = (boost::ulong_long_type i)
+   number_backend_float_architype& operator=(boost::ulong_long_type i)
    {
       m_value = i;
       std::cout << "UInt Assignment (" << i << ")" << std::endl;
       return *this;
    }
-   number_backend_float_architype& operator = (boost::long_long_type i)
+   number_backend_float_architype& operator=(boost::long_long_type i)
    {
       m_value = i;
       std::cout << "Int Assignment (" << i << ")" << std::endl;
       return *this;
    }
-   number_backend_float_architype& operator = (long double d)
+   number_backend_float_architype& operator=(long double d)
    {
       m_value = d;
       std::cout << "long double Assignment (" << d << ")" << std::endl;
       return *this;
    }
-   number_backend_float_architype& operator = (const char* s)
+   number_backend_float_architype& operator=(const char* s)
    {
 #ifndef BOOST_NO_EXCEPTIONS
       try
@@ -74,7 +75,7 @@ struct number_backend_float_architype
          m_value = boost::lexical_cast<long double>(s);
 #ifndef BOOST_NO_EXCEPTIONS
       }
-      catch(const std::exception&)
+      catch (const std::exception&)
       {
          BOOST_THROW_EXCEPTION(std::runtime_error(std::string("Unable to parse input string: \"") + s + std::string("\" as a valid floating point number.")));
       }
@@ -87,19 +88,19 @@ struct number_backend_float_architype
       std::cout << "Swapping (" << m_value << " with " << o.m_value << ")" << std::endl;
       std::swap(m_value, o.m_value);
    }
-   std::string str(std::streamsize digits, std::ios_base::fmtflags f)const
+   std::string str(std::streamsize digits, std::ios_base::fmtflags f) const
    {
       std::stringstream ss;
       ss.flags(f);
-      if(digits)
+      if (digits)
          ss.precision(digits);
       else
          ss.precision(std::numeric_limits<long double>::digits10 + 3);
-      boost::intmax_t i = m_value;
+      boost::intmax_t  i = m_value;
       boost::uintmax_t u = m_value;
-      if(!(f & std::ios_base::scientific) && m_value == i)
+      if (!(f & std::ios_base::scientific) && m_value == i)
          ss << i;
-      else if(!(f & std::ios_base::scientific) && m_value == u)
+      else if (!(f & std::ios_base::scientific) && m_value == u)
          ss << u;
       else
          ss << m_value;
@@ -112,22 +113,22 @@ struct number_backend_float_architype
       std::cout << "Negating (" << m_value << ")" << std::endl;
       m_value = -m_value;
    }
-   int compare(const number_backend_float_architype& o)const
+   int compare(const number_backend_float_architype& o) const
    {
       std::cout << "Comparison" << std::endl;
       return m_value > o.m_value ? 1 : (m_value < o.m_value ? -1 : 0);
    }
-   int compare(boost::long_long_type i)const
+   int compare(boost::long_long_type i) const
    {
       std::cout << "Comparison with int" << std::endl;
       return m_value > i ? 1 : (m_value < i ? -1 : 0);
    }
-   int compare(boost::ulong_long_type i)const
+   int compare(boost::ulong_long_type i) const
    {
       std::cout << "Comparison with unsigned" << std::endl;
       return m_value > i ? 1 : (m_value < i ? -1 : 0);
    }
-   int compare(long double d)const
+   int compare(long double d) const
    {
       std::cout << "Comparison with long double" << std::endl;
       return m_value > d ? 1 : (m_value < d ? -1 : 0);
@@ -199,25 +200,33 @@ inline int eval_fpclassify(const number_backend_float_architype& arg)
    return (boost::math::fpclassify)(arg.m_value);
 }
 
+inline std::size_t hash_value(const number_backend_float_architype& v)
+{
+   boost::hash<long double> hasher;
+   return hasher(v.m_value);
+}
+
 typedef boost::multiprecision::number<number_backend_float_architype> mp_number_float_architype;
 
-} // namespace
+} // namespace concepts
 
-template<>
-struct number_category<concepts::number_backend_float_architype> : public mpl::int_<number_kind_floating_point>{};
+template <>
+struct number_category<concepts::number_backend_float_architype> : public mpl::int_<number_kind_floating_point>
+{};
 
-}} // namespaces
+}} // namespace boost::multiprecision
 
-namespace std{
+namespace std {
 
 template <boost::multiprecision::expression_template_option ExpressionTemplates>
 class numeric_limits<boost::multiprecision::number<boost::multiprecision::concepts::number_backend_float_architype, ExpressionTemplates> > : public std::numeric_limits<long double>
 {
-   typedef std::numeric_limits<long double> base_type;
+   typedef std::numeric_limits<long double>                                                                                    base_type;
    typedef boost::multiprecision::number<boost::multiprecision::concepts::number_backend_float_architype, ExpressionTemplates> number_type;
-public:
-   static number_type (min)() BOOST_NOEXCEPT { return (base_type::min)(); }
-   static number_type (max)() BOOST_NOEXCEPT { return (base_type::max)(); }
+
+ public:
+   static number_type(min)() BOOST_NOEXCEPT { return (base_type::min)(); }
+   static number_type(max)() BOOST_NOEXCEPT { return (base_type::max)(); }
    static number_type lowest() BOOST_NOEXCEPT { return -(max)(); }
    static number_type epsilon() BOOST_NOEXCEPT { return base_type::epsilon(); }
    static number_type round_error() BOOST_NOEXCEPT { return base_type::round_error(); }
@@ -227,7 +236,7 @@ public:
    static number_type denorm_min() BOOST_NOEXCEPT { return base_type::denorm_min(); }
 };
 
-}
+} // namespace std
 
 #ifdef BOOST_MSVC
 #pragma warning(pop)