Chromium Code Reviews| Index: core/fxcrt/include/fx_string.h |
| diff --git a/core/fxcrt/include/fx_string.h b/core/fxcrt/include/fx_string.h |
| index c1bd82dd7470367cd812cae61215cdedfe7f503a..82f07259f539db53a9cb1328883aba4737f09b9c 100644 |
| --- a/core/fxcrt/include/fx_string.h |
| +++ b/core/fxcrt/include/fx_string.h |
| @@ -8,7 +8,9 @@ |
| #define CORE_FXCRT_INCLUDE_FX_STRING_H_ |
| #include <stdint.h> // For intptr_t. |
| + |
| #include <algorithm> |
| +#include <functional> |
| #include "core/fxcrt/cfx_string_c_template.h" |
| #include "core/fxcrt/cfx_string_data_template.h" |
| @@ -170,7 +172,9 @@ class CFX_ByteString { |
| void Concat(const FX_CHAR* lpszSrcData, FX_STRSIZE nSrcLen); |
| CFX_RetainPtr<StringData> m_pData; |
| + |
| friend class fxcrt_ByteStringConcat_Test; |
| + friend class fxcrt_ByteStringPool_Test; |
| }; |
| inline bool operator==(const char* lhs, const CFX_ByteString& rhs) { |
| @@ -365,7 +369,9 @@ class CFX_WideString { |
| void Concat(const FX_WCHAR* lpszSrcData, FX_STRSIZE nSrcLen); |
| CFX_RetainPtr<StringData> m_pData; |
| + |
| friend class fxcrt_WideStringConcatInPlace_Test; |
| + friend class fxcrt_WideStringPool_Test; |
| }; |
| inline CFX_WideString operator+(const CFX_WideStringC& str1, |
| @@ -440,4 +446,28 @@ inline FX_FLOAT FX_atof(const CFX_WideStringC& wsStr) { |
| bool FX_atonum(const CFX_ByteStringC& str, void* pData); |
| FX_STRSIZE FX_ftoa(FX_FLOAT f, FX_CHAR* buf); |
| +uint32_t FX_HashCode_GetA(const CFX_ByteStringC& str, bool bIgnoreCase); |
| +uint32_t FX_HashCode_GetW(const CFX_WideStringC& str, bool bIgnoreCase); |
| + |
| +namespace std { |
|
dsinclair
2016/09/15 20:23:26
Are we allowed to put things into namespace std?
Tom Sepez
2016/09/15 20:51:24
See https://cs.chromium.org/chromium/src/base/opti
|
| + |
| +template <> |
| +struct hash<CFX_ByteString> { |
| + std::size_t operator()(const CFX_ByteString& str) const { |
| + return FX_HashCode_GetA(str.AsStringC(), false); |
| + } |
| +}; |
| + |
| +template <> |
| +struct hash<CFX_WideString> { |
| + std::size_t operator()(const CFX_WideString& str) const { |
| + return FX_HashCode_GetW(str.AsStringC(), false); |
| + } |
| +}; |
| + |
| +} // namespace std |
| + |
| +extern template struct std::hash<CFX_ByteString>; |
| +extern template struct std::hash<CFX_WideString>; |
| + |
| #endif // CORE_FXCRT_INCLUDE_FX_STRING_H_ |