diff --git a/include/mapnik/hash_variant.hpp b/include/mapnik/hash_variant.hpp new file mode 100644 index 000000000..2e6a866cd --- /dev/null +++ b/include/mapnik/hash_variant.hpp @@ -0,0 +1,48 @@ +//----------------------------------------------------------------------------- +// boost variant/detail/hash_variant.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2011 +// Antony Polukhin +// +// 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) + +// TODO: Remove this file once the minimum Boost version is bumped to 1.50 + +#ifndef BOOST_HASH_VARIANT_FUNCTION_HPP +#define BOOST_HASH_VARIANT_FUNCTION_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +#include +#include +#include +#include + +namespace boost { + + namespace detail { namespace variant { + struct variant_hasher: public boost::static_visitor { + template + std::size_t operator()(T const& val) const { + using namespace boost; + hash hasher; + return hasher(val); + } + }; + }} + + template < BOOST_VARIANT_ENUM_PARAMS(typename T) > + std::size_t hash_value(variant< BOOST_VARIANT_ENUM_PARAMS(T) > const& val) { + std::size_t seed = boost::apply_visitor(detail::variant::variant_hasher(), val); + hash_combine(seed, val.which()); + return seed; + } +} + +#endif diff --git a/include/mapnik/unicode.hpp b/include/mapnik/unicode.hpp index 0de34ac98..fd4e8e40a 100644 --- a/include/mapnik/unicode.hpp +++ b/include/mapnik/unicode.hpp @@ -51,7 +51,7 @@ private: }; } -namespace icu_50 { +namespace U_ICU_NAMESPACE { inline std::size_t hash_value(const UnicodeString& val) { return val.hashCode(); } diff --git a/include/mapnik/value.hpp b/include/mapnik/value.hpp index 40f329f33..4c51f4374 100644 --- a/include/mapnik/value.hpp +++ b/include/mapnik/value.hpp @@ -37,6 +37,7 @@ #include #include #include +#include "hash_variant.hpp" // stl #include