Replace CFX_ArrayTemplate with std::vector in CPDF_ObjectStream

Replace two parallel arrays with an array of pairs.
Several methods always returned same value, make void instead.

Review URL: https://codereview.chromium.org/1908153002
diff --git a/core/fpdfapi/fpdf_edit/editint.h b/core/fpdfapi/fpdf_edit/editint.h
index 69a64b9..a777405 100644
--- a/core/fpdfapi/fpdf_edit/editint.h
+++ b/core/fpdfapi/fpdf_edit/editint.h
@@ -18,26 +18,26 @@
 
 class CPDF_ObjectStream {
  public:
+  struct Item {
+    uint32_t objnum;
+    FX_STRSIZE offset;
+  };
+
   CPDF_ObjectStream();
 
-  FX_BOOL Start();
-
-  int32_t CompressIndirectObject(uint32_t dwObjNum, const CPDF_Object* pObj);
-  int32_t CompressIndirectObject(uint32_t dwObjNum,
-                                 const uint8_t* pBuffer,
-                                 uint32_t dwSize);
-
+  void Start();
   FX_FILESIZE End(CPDF_Creator* pCreator);
+  void CompressIndirectObject(uint32_t dwObjNum, const CPDF_Object* pObj);
+  void CompressIndirectObject(uint32_t dwObjNum,
+                              const uint8_t* pBuffer,
+                              uint32_t dwSize);
 
-  CFX_ArrayTemplate<uint32_t> m_ObjNumArray;
-
+  std::vector<Item> m_Items;
   CFX_ByteTextBuf m_Buffer;
   uint32_t m_dwObjNum;
   int32_t m_index;
-
- protected:
-  CFX_ArrayTemplate<uint32_t> m_OffsetArray;
 };
+
 class CPDF_XRefStream {
  public:
   struct Index {
diff --git a/core/fpdfapi/fpdf_edit/fpdf_edit_create.cpp b/core/fpdfapi/fpdf_edit/fpdf_edit_create.cpp
index 438c777..3b5012f 100644
--- a/core/fpdfapi/fpdf_edit/fpdf_edit_create.cpp
+++ b/core/fpdfapi/fpdf_edit/fpdf_edit_create.cpp
@@ -516,45 +516,41 @@
 }  // namespace
 
 CPDF_ObjectStream::CPDF_ObjectStream() : m_dwObjNum(0), m_index(0) {}
-FX_BOOL CPDF_ObjectStream::Start() {
-  m_ObjNumArray.RemoveAll();
-  m_OffsetArray.RemoveAll();
+
+void CPDF_ObjectStream::Start() {
+  m_Items.clear();
   m_Buffer.Clear();
   m_dwObjNum = 0;
   m_index = 0;
-  return TRUE;
 }
-int32_t CPDF_ObjectStream::CompressIndirectObject(uint32_t dwObjNum,
-                                                  const CPDF_Object* pObj) {
-  m_ObjNumArray.Add(dwObjNum);
-  m_OffsetArray.Add(m_Buffer.GetLength());
+
+void CPDF_ObjectStream::CompressIndirectObject(uint32_t dwObjNum,
+                                               const CPDF_Object* pObj) {
+  m_Items.push_back({dwObjNum, m_Buffer.GetLength()});
   m_Buffer << pObj;
-  return 1;
 }
-int32_t CPDF_ObjectStream::CompressIndirectObject(uint32_t dwObjNum,
-                                                  const uint8_t* pBuffer,
-                                                  uint32_t dwSize) {
-  m_ObjNumArray.Add(dwObjNum);
-  m_OffsetArray.Add(m_Buffer.GetLength());
+
+void CPDF_ObjectStream::CompressIndirectObject(uint32_t dwObjNum,
+                                               const uint8_t* pBuffer,
+                                               uint32_t dwSize) {
+  m_Items.push_back({dwObjNum, m_Buffer.GetLength()});
   m_Buffer.AppendBlock(pBuffer, dwSize);
-  return 1;
 }
+
 FX_FILESIZE CPDF_ObjectStream::End(CPDF_Creator* pCreator) {
   FXSYS_assert(pCreator);
-  if (m_ObjNumArray.GetSize() == 0) {
+  if (m_Items.empty())
     return 0;
-  }
+
   CFX_FileBufferArchive* pFile = &pCreator->m_File;
   FX_FILESIZE ObjOffset = pCreator->m_Offset;
   if (!m_dwObjNum) {
     m_dwObjNum = ++pCreator->m_dwLastObjNum;
   }
   CFX_ByteTextBuf tempBuffer;
-  int32_t iCount = m_ObjNumArray.GetSize();
-  for (int32_t i = 0; i < iCount; i++) {
-    tempBuffer << m_ObjNumArray.ElementAt(i) << " "
-               << m_OffsetArray.ElementAt(i) << " ";
-  }
+  for (const auto& pair : m_Items)
+    tempBuffer << pair.objnum << " " << pair.offset << " ";
+
   FX_FILESIZE& offset = pCreator->m_Offset;
   int32_t len = pFile->AppendDWord(m_dwObjNum);
   if (len < 0) {
@@ -565,7 +561,8 @@
     return -1;
   }
   offset += len;
-  if ((len = pFile->AppendDWord((uint32_t)iCount)) < 0) {
+  uint32_t iCount = pdfium::CollectionSize<uint32_t>(m_Items);
+  if ((len = pFile->AppendDWord(iCount)) < 0) {
     return -1;
   }
   offset += len;
@@ -638,11 +635,12 @@
 int32_t CPDF_XRefStream::CompressIndirectObject(uint32_t dwObjNum,
                                                 const CPDF_Object* pObj,
                                                 CPDF_Creator* pCreator) {
-  if (!pCreator) {
+  if (!pCreator)
     return 0;
-  }
+
   m_ObjStream.CompressIndirectObject(dwObjNum, pObj);
-  if (m_ObjStream.m_ObjNumArray.GetSize() < pCreator->m_ObjectStreamSize &&
+  if (pdfium::CollectionSize<int32_t>(m_ObjStream.m_Items) <
+          pCreator->m_ObjectStreamSize &&
       m_ObjStream.m_Buffer.GetLength() < PDF_OBJECTSTREAM_MAXLENGTH) {
     return 1;
   }
@@ -652,11 +650,12 @@
                                                 const uint8_t* pBuffer,
                                                 uint32_t dwSize,
                                                 CPDF_Creator* pCreator) {
-  if (!pCreator) {
+  if (!pCreator)
     return 0;
-  }
+
   m_ObjStream.CompressIndirectObject(dwObjNum, pBuffer, dwSize);
-  if (m_ObjStream.m_ObjNumArray.GetSize() < pCreator->m_ObjectStreamSize &&
+  if (pdfium::CollectionSize<int32_t>(m_ObjStream.m_Items) <
+          pCreator->m_ObjectStreamSize &&
       m_ObjStream.m_Buffer.GetLength() < PDF_OBJECTSTREAM_MAXLENGTH) {
     return 1;
   }
@@ -675,7 +674,7 @@
   if (!dwObjStmNum) {
     dwObjStmNum = ++pCreator->m_dwLastObjNum;
   }
-  int32_t iSize = m_ObjStream.m_ObjNumArray.GetSize();
+  int32_t iSize = pdfium::CollectionSize<int32_t>(m_ObjStream.m_Items);
   size_t iSeg = m_IndexArray.size();
   if (!(pCreator->m_dwFlags & FPDFCREATE_INCREMENTAL)) {
     if (m_dwTempObjNum == 0) {
@@ -688,7 +687,7 @@
       FX_FILESIZE* offset = pCreator->m_ObjectOffset.GetPtrAt(m_dwTempObjNum);
       if (offset) {
         if (index >= iSize ||
-            m_dwTempObjNum != m_ObjStream.m_ObjNumArray[index]) {
+            m_dwTempObjNum != m_ObjStream.m_Items[index].objnum) {
           AppendIndex1(m_Buffer, *offset);
         } else {
           AppendIndex2(m_Buffer, dwObjStmNum, index++);
@@ -711,7 +710,7 @@
        ++it) {
     for (uint32_t m = it->objnum; m < it->objnum + it->count; ++m) {
       if (m_ObjStream.m_index >= iSize ||
-          m != m_ObjStream.m_ObjNumArray.ElementAt(it - m_IndexArray.begin())) {
+          m != m_ObjStream.m_Items[it - m_IndexArray.begin()].objnum) {
         AppendIndex1(m_Buffer, pCreator->m_ObjectOffset[m]);
       } else {
         AppendIndex2(m_Buffer, dwObjStmNum, m_ObjStream.m_index++);