boost: Support enums in hash

Fixes builds which were building fine with previous versions of boost

(From OE-Core rev: 139b65affbf50c4230e344cd4d0205ef025bb7c3)

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Khem Raj 2012-09-27 20:40:42 -07:00 committed by Richard Purdie
parent 7c6d679de0
commit 574d72803c
2 changed files with 49 additions and 2 deletions

View File

@ -2,8 +2,10 @@ include boost.inc
LIC_FILES_CHKSUM = "file://LICENSE_1_0.txt;md5=e4224ccaecb14d942c71d31bef20d78c"
PR = "${INC_PR}.0"
PR = "${INC_PR}.1"
SRC_URI += "file://arm-intrinsics.patch"
SRC_URI += "file://arm-intrinsics.patch \
file://hash_enums.patch \
"
SRC_URI[md5sum] = "4b6bd483b692fd138aef84ed2c8eb679"
SRC_URI[sha256sum] = "fb2d2335a29ee7fe040a197292bfce982af84a645c81688a915c84c925b69696"

View File

@ -0,0 +1,45 @@
Allow hashing of enums.
Fixes errors like
/opt/poky/1.3.0-1/sysroots/i586-poky-linux/usr/include/boost/functional/hash/extensions.hpp:257:34: error: no matching function for call to 'hash_value(const myspace::idx&)'
Upstream-Status: Pending
Singed-off-by: Khem Raj <raj.khem@gmail.com>
Index: boost_1_51_0/boost/functional/hash/hash.hpp
===================================================================
--- boost_1_51_0.orig/boost/functional/hash/hash.hpp 2012-07-15 16:28:30.000000000 -0700
+++ boost_1_51_0/boost/functional/hash/hash.hpp 2012-09-26 14:00:57.738364002 -0700
@@ -15,6 +15,8 @@
#include <boost/functional/hash/detail/hash_float.hpp>
#include <string>
#include <boost/limits.hpp>
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/utility/enable_if.hpp>
#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
#include <boost/type_traits/is_pointer.hpp>
@@ -89,6 +91,9 @@
typename boost::hash_detail::long_numbers<T>::type hash_value(T);
template <typename T>
typename boost::hash_detail::ulong_numbers<T>::type hash_value(T);
+ template <typename T>
+ typename boost::enable_if<boost::is_enum<T>, std::size_t>::type
+ hash_value(T);
#if !BOOST_WORKAROUND(__DMC__, <= 0x848)
template <class T> std::size_t hash_value(T* const&);
@@ -178,7 +183,12 @@
{
return hash_detail::hash_value_unsigned(v);
}
-
+ template <typename T>
+ typename boost::enable_if<boost::is_enum<T>, std::size_t>::type
+ hash_value(T v)
+ {
+ return static_cast<std::size_t>(v);
+ }
// Implementation by Alberto Barbati and Dave Harris.
#if !BOOST_WORKAROUND(__DMC__, <= 0x848)
template <class T> std::size_t hash_value(T* const& v)