| Index: compiled/StringMap.h |
| =================================================================== |
| --- a/compiled/StringMap.h |
| +++ b/compiled/StringMap.h |
| @@ -19,19 +19,21 @@ |
| #include <cstddef> |
| #include "Map.h" |
| #include "String.h" |
| namespace StringMap_internal |
| { |
| + template<typename Key, |
| + class = typename std::enable_if<std::is_base_of<String, Key>::value>::type> |
| struct StringSetEntry |
| { |
| - typedef DependentString key_type; |
| + typedef Key key_type; |
| typedef const String& key_type_cref; |
| typedef size_t size_type; |
| key_type first; |
| StringSetEntry(key_type_cref key = key_type()) |
| { |
| if (!key.is_invalid()) |
| @@ -63,34 +65,36 @@ |
| // 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; |
| } |
| }; |
| - template<typename Value> |
| - struct StringMapEntry : StringSetEntry |
| + template<typename Key, typename Value> |
| + struct StringMapEntry : StringSetEntry<Key> |
| { |
| - typedef StringSetEntry super; |
| + typedef StringSetEntry<Key> super; |
| typedef Value value_type; |
| value_type second; |
| - StringMapEntry(key_type_cref key = DependentString(), |
| + StringMapEntry(typename super::key_type_cref key = Key(), |
| value_type value = value_type()) |
| : super(key), second(value) |
| { |
| } |
| void erase() |
| { |
| super::erase(); |
| second = value_type(); |
| } |
| }; |
| } |
| -using StringSet = Set<StringMap_internal::StringSetEntry>; |
| +using StringSet = Set<StringMap_internal::StringSetEntry<DependentString>>; |
| template<typename Value> |
| -using StringMap = Map<StringMap_internal::StringMapEntry<Value>>; |
| +using StringMap = Map<StringMap_internal::StringMapEntry<DependentString, Value>>; |
| +template<typename Value> |
| +using OwnedStringMap = Map<StringMap_internal::StringMapEntry<OwnedString, Value>>; |