Use compound keys in CFX_FontMgr::m_FaceMap and m_TTCFaceMap

Avoid cobbling together key strings.

Change-Id: I6226768bacd933520f66939ab7898ddb67e0b13b
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/92991
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxge/cfx_fontmgr.cpp b/core/fxge/cfx_fontmgr.cpp
index 435c851..9b2b6f5 100644
--- a/core/fxge/cfx_fontmgr.cpp
+++ b/core/fxge/cfx_fontmgr.cpp
@@ -47,20 +47,6 @@
 constexpr BuiltinFont kGenericSansFont = {kFoxitSansMMFontData, 66919};
 constexpr BuiltinFont kGenericSerifFont = {kFoxitSerifMMFontData, 113417};
 
-ByteString KeyNameFromFace(const ByteString& face_name,
-                           int weight,
-                           bool bItalic) {
-  ByteString key(face_name);
-  key += ',';
-  key += ByteString::FormatInteger(weight);
-  key += bItalic ? 'I' : 'N';
-  return key;
-}
-
-ByteString KeyNameFromSize(size_t ttc_size, uint32_t checksum) {
-  return ByteString::Format("%zu:%u", ttc_size, checksum);
-}
-
 FXFT_LibraryRec* FTLibraryInitHelper() {
   FXFT_LibraryRec* pLibrary = nullptr;
   FT_Init_FreeType(&pLibrary);
@@ -97,7 +83,7 @@
     const ByteString& face_name,
     int weight,
     bool bItalic) {
-  auto it = m_FaceMap.find(KeyNameFromFace(face_name, weight, bItalic));
+  auto it = m_FaceMap.find({face_name, weight, bItalic});
   return it != m_FaceMap.end() ? pdfium::WrapRetain(it->second.Get()) : nullptr;
 }
 
@@ -108,14 +94,14 @@
     std::unique_ptr<uint8_t, FxFreeDeleter> pData,
     size_t size) {
   auto pFontDesc = pdfium::MakeRetain<FontDesc>(std::move(pData), size);
-  m_FaceMap[KeyNameFromFace(face_name, weight, bItalic)].Reset(pFontDesc.Get());
+  m_FaceMap[{face_name, weight, bItalic}].Reset(pFontDesc.Get());
   return pFontDesc;
 }
 
 RetainPtr<CFX_FontMgr::FontDesc> CFX_FontMgr::GetCachedTTCFontDesc(
     size_t ttc_size,
     uint32_t checksum) {
-  auto it = m_TTCFaceMap.find(KeyNameFromSize(ttc_size, checksum));
+  auto it = m_TTCFaceMap.find({ttc_size, checksum});
   return it != m_TTCFaceMap.end() ? pdfium::WrapRetain(it->second.Get())
                                   : nullptr;
 }
@@ -126,7 +112,7 @@
     std::unique_ptr<uint8_t, FxFreeDeleter> pData,
     size_t size) {
   auto pNewDesc = pdfium::MakeRetain<FontDesc>(std::move(pData), size);
-  m_TTCFaceMap[KeyNameFromSize(ttc_size, checksum)].Reset(pNewDesc.Get());
+  m_TTCFaceMap[{ttc_size, checksum}].Reset(pNewDesc.Get());
   return pNewDesc;
 }
 
diff --git a/core/fxge/cfx_fontmgr.h b/core/fxge/cfx_fontmgr.h
index 50cbc5b..5cedf73 100644
--- a/core/fxge/cfx_fontmgr.h
+++ b/core/fxge/cfx_fontmgr.h
@@ -12,6 +12,7 @@
 
 #include <map>
 #include <memory>
+#include <tuple>
 
 #include "core/fxcrt/bytestring.h"
 #include "core/fxcrt/fx_memory_wrappers.h"
@@ -86,8 +87,8 @@
   // Must come before |m_pBuiltinMapper| and |m_FaceMap|.
   ScopedFXFTLibraryRec const m_FTLibrary;
   std::unique_ptr<CFX_FontMapper> m_pBuiltinMapper;
-  std::map<ByteString, ObservedPtr<FontDesc>> m_FaceMap;
-  std::map<ByteString, ObservedPtr<FontDesc>> m_TTCFaceMap;
+  std::map<std::tuple<ByteString, int, bool>, ObservedPtr<FontDesc>> m_FaceMap;
+  std::map<std::tuple<size_t, uint32_t>, ObservedPtr<FontDesc>> m_TTCFaceMap;
   const bool m_FTLibrarySupportsHinting;
 };