| Index: compiled/StringMap.h |
| =================================================================== |
| --- a/compiled/StringMap.h |
| +++ b/compiled/StringMap.h |
| @@ -17,24 +17,38 @@ |
| #pragma once |
| #include <cstddef> |
| #include "Map.h" |
| #include "String.h" |
| +class StringHash |
| +{ |
| +public: |
| + size_t operator()(const String& key) const |
| + { |
| + // FNV-1a hash function |
| + size_t result = 2166136261; |
| + for (size_t i = 0; i < key.length(); i++) |
| + result = (result ^ key[i]) * 16777619; |
| + return result; |
| + } |
| +}; |
| + |
| namespace StringMap_internal |
| { |
| struct StringSetEntry |
| { |
| typedef String key_type; |
| typedef size_t size_type; |
| DependentString first; |
| + static StringHash hashFunctor; |
| StringSetEntry(const key_type& key = DependentString()) |
| { |
| if (!key.is_invalid()) |
| first.reset(key); |
| } |
| bool equals(const key_type& other) const |
| @@ -54,21 +68,17 @@ |
| void erase() |
| { |
| first.erase(); |
| } |
| static size_type hash(const key_type& key) |
| { |
| - // FNV-1a hash function |
| - size_type result = 2166136261; |
| - for (String::size_type i = 0; i < key.length(); i++) |
| - result = (result ^ key[i]) * 16777619; |
| - return result; |
| + return hashFunctor(key); |
| } |
| }; |
| template<typename Value> |
| struct StringMapEntry : StringSetEntry |
| { |
| typedef StringSetEntry super; |
| typedef Value value_type; |