]> git.ipfire.org Git - thirdparty/vectorscan.git/commitdiff
ue2_literal: better hash function
authorJustin Viiret <justin.viiret@intel.com>
Thu, 10 Aug 2017 05:12:28 +0000 (15:12 +1000)
committerMatthew Barr <matthew.barr@intel.com>
Mon, 18 Sep 2017 03:26:18 +0000 (13:26 +1000)
src/util/ue2string.cpp
src/util/ue2string.h

index b9cb67f48c357ff53c53a128261fc15a4080ad7b..4007605651e325a752e4212ab445060885b65c2b 100644 (file)
@@ -34,6 +34,7 @@
 
 #include "charreach.h"
 #include "compare.h"
+#include "hash_dynamic_bitset.h"
 
 #include <algorithm>
 #include <cstring>
@@ -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;
 
index 703faa2fe4f1ce27c9a4f3a7d481f93cc6562fd9..3519207c8db2138ba6a9cb3973546f78b57d4667 100644 (file)
@@ -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<ue2::ue2_literal::elem> {
 template<>
 struct hash<ue2::ue2_literal> {
     size_t operator()(const ue2::ue2_literal &lit) const {
-        return ue2::ue2_hasher()(lit);
+        return lit.hash();
     }
 };