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(); } };