diff --git a/src/util/regex.hpp b/src/util/regex.hpp index 54276f20..179fd0de 100644 --- a/src/util/regex.hpp +++ b/src/util/regex.hpp @@ -31,23 +31,18 @@ // ----------------------------------------------------------------------------- : Boost implementation #if USE_BOOST_REGEX - // needed for boost::regex - inline std::size_t hash_value(wxUniChar const& x) { - boost::hash hasher; - return hasher(static_cast(x)); - } - /* - // fix: boost regex doesn't like that wxUniChar can't be constructed from an int - namespace boost { - namespace BOOST_REGEX_DETAIL_NS { - inline bool can_start(wxUniChar c, const unsigned char* map, unsigned char mask) { - return can_start(c.GetValue(), map, mask); - } - inline bool can_start(wxUniCharRef c, const unsigned char* map, unsigned char mask) { - return can_start(c.GetValue(), map, mask); - } + // needed for boost::regex to compute hash values of unicode chars + #if BOOST_VERSION < 107600 + inline std::size_t hash_value(wxUniChar const& x) { + boost::hash hasher; + return hasher(static_cast(x)); } - }*/ + #else + // boost > 1.76 uses its own hash function that needs operator + + inline int operator + (wxUniChar x, unsigned int y) { + return static_cast(x) + y; + } + #endif /// Our own regular expression wrapper /** Suppors both boost::regex and wxRegEx. diff --git a/src/util/string.hpp b/src/util/string.hpp index 48020bba..7ed063a0 100644 --- a/src/util/string.hpp +++ b/src/util/string.hpp @@ -33,6 +33,17 @@ inline wxStdString const& toStdString(String const& s) { #endif } +#if wxVERSION_NUMBER < 3100 +// wxWidgets 3.1.0 added this specialization +namespace std { + template<> struct hash { + size_t operator()(String const& s) const { + return std::hash()(s.ToStdWstring()); + } + }; +} +#endif + // ----------------------------------------------------------------------------- : Unicode /// u if UNICODE is defined, a otherwise