// (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
