Mercurial > hg > vamp-build-and-test
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