Index: core/fxcrt/include/cfx_string_pool_template.h |
diff --git a/core/fxcrt/include/cfx_string_pool_template.h b/core/fxcrt/include/cfx_string_pool_template.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a59d13a61d289c4f2cb4470d202f08c70a3f76f5 |
--- /dev/null |
+++ b/core/fxcrt/include/cfx_string_pool_template.h |
@@ -0,0 +1,30 @@ |
+// Copyright 2016 PDFium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
+ |
+#ifndef CORE_FXCRT_INCLUDE_CFX_STRING_POOL_TEMPLATE_H_ |
+#define CORE_FXCRT_INCLUDE_CFX_STRING_POOL_TEMPLATE_H_ |
+ |
+#include <unordered_set> |
+ |
+#include "core/fxcrt/include/fx_string.h" |
+ |
+template <typename StringType> |
+class CFX_StringPoolTemplate { |
+ public: |
+ StringType Intern(const StringType& str) { return *m_Pool.insert(str).first; } |
+ void Clear() { m_Pool.clear(); } |
+ |
+ private: |
+ std::unordered_set<StringType> m_Pool; |
+}; |
+ |
+using CFX_ByteStringPool = CFX_StringPoolTemplate<CFX_ByteString>; |
+using CFX_WideStringPool = CFX_StringPoolTemplate<CFX_WideString>; |
+ |
+extern template class CFX_StringPoolTemplate<CFX_ByteString>; |
+extern template class CFX_StringPoolTemplate<CFX_WideString>; |
+ |
+#endif // CORE_FXCRT_INCLUDE_CFX_STRING_POOL_TEMPLATE_H_ |