Simplify CPDF_CMap ctor.

Instead of using CPDF_CMapParser::HasAdditionalMappings() and
TakeAdditionalMappings() in the CPDF_CMap ctor to take the mappings from
the parser, CPDF_CMap can implement SetAdditionalMappings(), and let the
parser call it to set the mappings. This is consistent with how
CPDF_CMapParser sets many other CPDF_CMap members.

Change-Id: I722593ea2565c557899e1190cc2f78f3ac9e3c7e
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/59514
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/font/cpdf_cmap.cpp b/core/fpdfapi/font/cpdf_cmap.cpp
index 81ee02d..d4797bc 100644
--- a/core/fpdfapi/font/cpdf_cmap.cpp
+++ b/core/fpdfapi/font/cpdf_cmap.cpp
@@ -295,16 +295,6 @@
 
     parser.ParseWord(word);
   }
-
-  if (m_CodingScheme == MixedFourBytes && parser.HasAdditionalMappings()) {
-    m_AdditionalCharcodeToCIDMappings = parser.TakeAdditionalMappings();
-    std::sort(
-        m_AdditionalCharcodeToCIDMappings.begin(),
-        m_AdditionalCharcodeToCIDMappings.end(),
-        [](const CPDF_CMap::CIDRange& arg1, const CPDF_CMap::CIDRange& arg2) {
-          return arg1.m_EndCode < arg2.m_EndCode;
-        });
-  }
 }
 
 CPDF_CMap::~CPDF_CMap() = default;
@@ -476,6 +466,19 @@
   return 0;
 }
 
+void CPDF_CMap::SetAdditionalMappings(std::vector<CIDRange> mappings) {
+  ASSERT(m_AdditionalCharcodeToCIDMappings.empty());
+  if (m_CodingScheme != MixedFourBytes || mappings.empty())
+    return;
+
+  std::sort(
+      mappings.begin(), mappings.end(),
+      [](const CPDF_CMap::CIDRange& arg1, const CPDF_CMap::CIDRange& arg2) {
+        return arg1.m_EndCode < arg2.m_EndCode;
+      });
+  m_AdditionalCharcodeToCIDMappings = std::move(mappings);
+}
+
 void CPDF_CMap::SetMixedFourByteLeadingRanges(std::vector<CodeRange> ranges) {
   m_MixedFourByteLeadingRanges = std::move(ranges);
 }
diff --git a/core/fpdfapi/font/cpdf_cmap.h b/core/fpdfapi/font/cpdf_cmap.h
index c9dc61f..6754c71 100644
--- a/core/fpdfapi/font/cpdf_cmap.h
+++ b/core/fpdfapi/font/cpdf_cmap.h
@@ -62,6 +62,7 @@
 
   void SetVertical(bool vert) { m_bVertical = vert; }
   void SetCodingScheme(CodingScheme scheme) { m_CodingScheme = scheme; }
+  void SetAdditionalMappings(std::vector<CIDRange> mappings);
   void SetMixedFourByteLeadingRanges(std::vector<CodeRange> ranges);
 
   int GetCoding() const { return m_Coding; }
diff --git a/core/fpdfapi/font/cpdf_cmapparser.cpp b/core/fpdfapi/font/cpdf_cmapparser.cpp
index 1ef8a7c..6b5e56f 100644
--- a/core/fpdfapi/font/cpdf_cmapparser.cpp
+++ b/core/fpdfapi/font/cpdf_cmapparser.cpp
@@ -29,6 +29,7 @@
 CPDF_CMapParser::CPDF_CMapParser(CPDF_CMap* pCMap) : m_pCMap(pCMap) {}
 
 CPDF_CMapParser::~CPDF_CMapParser() {
+  m_pCMap->SetAdditionalMappings(std::move(m_AdditionalCharcodeToCIDMappings));
   m_pCMap->SetMixedFourByteLeadingRanges(std::move(m_Ranges));
 }
 
diff --git a/core/fpdfapi/font/cpdf_cmapparser.h b/core/fpdfapi/font/cpdf_cmapparser.h
index f24a93b..b2454af 100644
--- a/core/fpdfapi/font/cpdf_cmapparser.h
+++ b/core/fpdfapi/font/cpdf_cmapparser.h
@@ -21,12 +21,6 @@
   ~CPDF_CMapParser();
 
   void ParseWord(ByteStringView word);
-  bool HasAdditionalMappings() const {
-    return !m_AdditionalCharcodeToCIDMappings.empty();
-  }
-  std::vector<CPDF_CMap::CIDRange> TakeAdditionalMappings() {
-    return std::move(m_AdditionalCharcodeToCIDMappings);
-  }
 
   static CIDSet CharsetFromOrdering(ByteStringView ordering);