diff DEPENDENCIES/generic/include/boost/graph/numeric_values.hpp @ 16:2665513ce2d3

Add boost headers
author Chris Cannam
date Tue, 05 Aug 2014 11:11:38 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DEPENDENCIES/generic/include/boost/graph/numeric_values.hpp	Tue Aug 05 11:11:38 2014 +0100
@@ -0,0 +1,52 @@
+// (C) Copyright 2007-2009 Andrew Sutton
+//
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0 (See accompanying file
+// LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GRAPH_NUMERIC_VALUES_HPP
+#define BOOST_GRAPH_NUMERIC_VALUES_HPP
+
+#include <limits>
+
+namespace boost
+{
+
+#define BOOST_GRAPH_SPECIALIZE_NUMERIC_FLOAT(type) \
+    template <> struct numeric_values<type> { \
+        typedef type value_type; \
+        static type zero() { return 0.0; } \
+        static type infinity() { return std::numeric_limits<type>::infinity(); } \
+    };
+
+    /**
+     * This generic type reports various numeric values for some type. In the
+     * general case, numeric values simply treat their maximum value as infinity
+     * and the default-constructed value as 0.
+     *
+     * Specializations of this template can redefine the notions of zero and
+     * infinity for various types. For example, the class is specialized for
+     * floating point types to use the built in notion of infinity.
+     */
+    template <typename T>
+    struct numeric_values
+    {
+        typedef T value_type;
+
+        static T zero()
+        { return T(); }
+
+        static T infinity()
+        { return (std::numeric_limits<T>::max)(); }
+    };
+
+    // Specializations for floating point types refer to 0.0 and their infinity
+    // value defined by numeric_limits.
+    BOOST_GRAPH_SPECIALIZE_NUMERIC_FLOAT(float)
+    BOOST_GRAPH_SPECIALIZE_NUMERIC_FLOAT(double)
+    BOOST_GRAPH_SPECIALIZE_NUMERIC_FLOAT(long double)
+
+#undef BOOST_GRAPH_SPECIALIZE_NUMERIC_VALUE
+}
+
+#endif