From 25170b32eb7b0bf2c51e609392b6893de5fc94a4 Mon Sep 17 00:00:00 2001 From: Justin Viiret Date: Thu, 10 Aug 2017 15:12:28 +1000 Subject: [PATCH] ue2_literal: better hash function --- src/util/ue2string.cpp | 5 +++++ src/util/ue2string.h | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/util/ue2string.cpp b/src/util/ue2string.cpp index b9cb67f4..40076056 100644 --- a/src/util/ue2string.cpp +++ b/src/util/ue2string.cpp @@ -34,6 +34,7 @@ #include "charreach.h" #include "compare.h" +#include "hash_dynamic_bitset.h" #include #include @@ -325,6 +326,10 @@ bool ue2_literal::any_nocase() const { return nocase.any(); } +size_t ue2_literal::hash() const { + return hash_all(s, hash_dynamic_bitset()(nocase)); +} + void make_nocase(ue2_literal *lit) { ue2_literal rv; diff --git a/src/util/ue2string.h b/src/util/ue2string.h index 703faa2f..3519207c 100644 --- a/src/util/ue2string.h +++ b/src/util/ue2string.h @@ -205,6 +205,8 @@ public: nocase.swap(other.nocase); } + size_t hash() const; + private: friend const_iterator; std::string s; @@ -321,7 +323,7 @@ struct hash { template<> struct hash { size_t operator()(const ue2::ue2_literal &lit) const { - return ue2::ue2_hasher()(lit); + return lit.hash(); } };