| Index: core/fpdfapi/edit/fpdf_edit_create.cpp
|
| diff --git a/core/fpdfapi/edit/fpdf_edit_create.cpp b/core/fpdfapi/edit/fpdf_edit_create.cpp
|
| index 7b38883ef89a8c2672223f5fb7699c6e732b91cc..fec0de95123fa07d0e8a0dca29bd1024a2ebdcdc 100644
|
| --- a/core/fpdfapi/edit/fpdf_edit_create.cpp
|
| +++ b/core/fpdfapi/edit/fpdf_edit_create.cpp
|
| @@ -1313,11 +1313,12 @@ int32_t CPDF_Creator::WriteOldObjs(IFX_Pause* pPause) {
|
| }
|
| return 0;
|
| }
|
| +
|
| int32_t CPDF_Creator::WriteNewObjs(bool bIncremental, IFX_Pause* pPause) {
|
| - int32_t iCount = m_NewObjNumArray.GetSize();
|
| - int32_t index = (int32_t)(uintptr_t)m_Pos;
|
| + size_t iCount = m_NewObjNumArray.size();
|
| + size_t index = (size_t)(uintptr_t)m_Pos;
|
| while (index < iCount) {
|
| - uint32_t objnum = m_NewObjNumArray.ElementAt(index);
|
| + uint32_t objnum = m_NewObjNumArray[index];
|
| CPDF_Object* pObj = m_pDocument->GetIndirectObject(objnum);
|
| if (!pObj) {
|
| ++index;
|
| @@ -1335,6 +1336,7 @@ int32_t CPDF_Creator::WriteNewObjs(bool bIncremental, IFX_Pause* pPause) {
|
| }
|
| return 0;
|
| }
|
| +
|
| void CPDF_Creator::InitOldObjNumOffsets() {
|
| if (!m_pParser) {
|
| return;
|
| @@ -1373,15 +1375,15 @@ void CPDF_Creator::InitNewObjNumOffsets() {
|
| AppendNewObjNum(objnum);
|
| }
|
|
|
| - int32_t iCount = m_NewObjNumArray.GetSize();
|
| + size_t iCount = m_NewObjNumArray.size();
|
| if (iCount == 0)
|
| return;
|
|
|
| - int32_t i = 0;
|
| + size_t i = 0;
|
| uint32_t dwStartObjNum = 0;
|
| bool bCrossRefValid = m_pParser && m_pParser->GetLastXRefOffset() > 0;
|
| while (i < iCount) {
|
| - dwStartObjNum = m_NewObjNumArray.ElementAt(i);
|
| + dwStartObjNum = m_NewObjNumArray[i];
|
| if ((bIncremental && (bNoOriginal || bCrossRefValid)) ||
|
| !m_ObjectOffset.GetPtrAt(dwStartObjNum)) {
|
| break;
|
| @@ -1395,7 +1397,7 @@ void CPDF_Creator::InitNewObjNumOffsets() {
|
| i++;
|
| bool bNewStart = false;
|
| for (; i < iCount; i++) {
|
| - uint32_t dwCurObjNum = m_NewObjNumArray.ElementAt(i);
|
| + uint32_t dwCurObjNum = m_NewObjNumArray[i];
|
| bool bExist = m_pParser && m_pParser->IsValidObjectNumber(dwCurObjNum) &&
|
| m_ObjectOffset.GetPtrAt(dwCurObjNum);
|
| if (bExist || dwCurObjNum - dwLastObjNum > 1) {
|
| @@ -1412,29 +1414,12 @@ void CPDF_Creator::InitNewObjNumOffsets() {
|
| m_ObjectOffset.Add(dwStartObjNum, dwLastObjNum - dwStartObjNum + 1);
|
| }
|
|
|
| -void CPDF_Creator::AppendNewObjNum(uint32_t objbum) {
|
| - int32_t iStart = 0, iFind = 0;
|
| - int32_t iEnd = m_NewObjNumArray.GetUpperBound();
|
| - while (iStart <= iEnd) {
|
| - int32_t iMid = (iStart + iEnd) / 2;
|
| - uint32_t dwMid = m_NewObjNumArray.ElementAt(iMid);
|
| - if (objbum < dwMid) {
|
| - iEnd = iMid - 1;
|
| - } else {
|
| - if (iMid == iEnd) {
|
| - iFind = iMid + 1;
|
| - break;
|
| - }
|
| - uint32_t dwNext = m_NewObjNumArray.ElementAt(iMid + 1);
|
| - if (objbum < dwNext) {
|
| - iFind = iMid + 1;
|
| - break;
|
| - }
|
| - iStart = iMid + 1;
|
| - }
|
| - }
|
| - m_NewObjNumArray.InsertAt(iFind, objbum);
|
| +void CPDF_Creator::AppendNewObjNum(uint32_t objnum) {
|
| + m_NewObjNumArray.insert(std::lower_bound(m_NewObjNumArray.begin(),
|
| + m_NewObjNumArray.end(), objnum),
|
| + objnum);
|
| }
|
| +
|
| int32_t CPDF_Creator::WriteDoc_Stage1(IFX_Pause* pPause) {
|
| ASSERT(m_iStage > -1 || m_iStage < 20);
|
| if (m_iStage == 0) {
|
| @@ -1565,15 +1550,14 @@ int32_t CPDF_Creator::WriteDoc_Stage2(IFX_Pause* pPause) {
|
| if (m_pEncryptDict && m_pEncryptDict->IsInline()) {
|
| m_dwLastObjNum += 1;
|
| FX_FILESIZE saveOffset = m_Offset;
|
| - if (WriteIndirectObj(m_dwLastObjNum, m_pEncryptDict) < 0) {
|
| + if (WriteIndirectObj(m_dwLastObjNum, m_pEncryptDict) < 0)
|
| return -1;
|
| - }
|
| +
|
| m_ObjectOffset.Add(m_dwLastObjNum, 1);
|
| m_ObjectOffset[m_dwLastObjNum] = saveOffset;
|
| m_dwEncryptObjNum = m_dwLastObjNum;
|
| - if (m_dwFlags & FPDFCREATE_INCREMENTAL) {
|
| - m_NewObjNumArray.Add(m_dwLastObjNum);
|
| - }
|
| + if (m_dwFlags & FPDFCREATE_INCREMENTAL)
|
| + m_NewObjNumArray.push_back(m_dwLastObjNum);
|
| }
|
| m_iStage = 80;
|
| }
|
| @@ -1652,22 +1636,20 @@ int32_t CPDF_Creator::WriteDoc_Stage3(IFX_Pause* pPause) {
|
| }
|
| if (m_iStage == 82) {
|
| CFX_ByteString str;
|
| - int32_t iCount = m_NewObjNumArray.GetSize();
|
| - int32_t i = (int32_t)(uintptr_t)m_Pos;
|
| + size_t iCount = m_NewObjNumArray.size();
|
| + size_t i = (size_t)(uintptr_t)m_Pos;
|
| while (i < iCount) {
|
| - int32_t j = i;
|
| - uint32_t objnum = m_NewObjNumArray.ElementAt(i);
|
| + size_t j = i;
|
| + uint32_t objnum = m_NewObjNumArray[i];
|
| while (j < iCount) {
|
| - if (++j == iCount) {
|
| + if (++j == iCount)
|
| break;
|
| - }
|
| - uint32_t dwCurrent = m_NewObjNumArray.ElementAt(j);
|
| - if (dwCurrent - objnum > 1) {
|
| + uint32_t dwCurrent = m_NewObjNumArray[j];
|
| + if (dwCurrent - objnum > 1)
|
| break;
|
| - }
|
| objnum = dwCurrent;
|
| }
|
| - objnum = m_NewObjNumArray.ElementAt(i);
|
| + objnum = m_NewObjNumArray[i];
|
| if (objnum == 1) {
|
| str.Format("0 %d\r\n0000000000 65535 f\r\n", j - i + 1);
|
| } else {
|
| @@ -1677,11 +1659,10 @@ int32_t CPDF_Creator::WriteDoc_Stage3(IFX_Pause* pPause) {
|
| return -1;
|
| }
|
| while (i < j) {
|
| - objnum = m_NewObjNumArray.ElementAt(i++);
|
| + objnum = m_NewObjNumArray[i++];
|
| str.Format("%010d 00000 n\r\n", m_ObjectOffset[objnum]);
|
| - if (m_File.AppendBlock(str.c_str(), str.GetLength()) < 0) {
|
| + if (m_File.AppendBlock(str.c_str(), str.GetLength()) < 0)
|
| return -1;
|
| - }
|
| }
|
| if (pPause && (i % 100) == 0 && pPause->NeedToPauseNow()) {
|
| m_Pos = (void*)(uintptr_t)i;
|
| @@ -1847,41 +1828,33 @@ int32_t CPDF_Creator::WriteDoc_Stage4(IFX_Pause* pPause) {
|
| }
|
| for (i = 0; i < m_dwLastObjNum; i++) {
|
| FX_FILESIZE* offset = m_ObjectOffset.GetPtrAt(i);
|
| - if (!offset) {
|
| + if (!offset)
|
| continue;
|
| - }
|
| OutputIndex(&m_File, *offset);
|
| }
|
| } else {
|
| - int count = m_NewObjNumArray.GetSize();
|
| - int32_t i = 0;
|
| + size_t count = m_NewObjNumArray.size();
|
| + size_t i = 0;
|
| for (i = 0; i < count; i++) {
|
| - uint32_t objnum = m_NewObjNumArray.ElementAt(i);
|
| - if (m_File.AppendDWord(objnum) < 0) {
|
| + if (m_File.AppendDWord(m_NewObjNumArray[i]) < 0)
|
| return -1;
|
| - }
|
| - if (m_File.AppendString(" 1 ") < 0) {
|
| + if (m_File.AppendString(" 1 ") < 0)
|
| return -1;
|
| - }
|
| }
|
| - if (m_File.AppendString("]/Length ") < 0) {
|
| + if (m_File.AppendString("]/Length ") < 0)
|
| return -1;
|
| - }
|
| - if (m_File.AppendDWord(count * 5) < 0) {
|
| + if (m_File.AppendDWord(count * 5) < 0)
|
| return -1;
|
| - }
|
| - if (m_File.AppendString(">>stream\r\n") < 0) {
|
| + if (m_File.AppendString(">>stream\r\n") < 0)
|
| return -1;
|
| - }
|
| for (i = 0; i < count; i++) {
|
| - uint32_t objnum = m_NewObjNumArray.ElementAt(i);
|
| + uint32_t objnum = m_NewObjNumArray[i];
|
| FX_FILESIZE offset = m_ObjectOffset[objnum];
|
| OutputIndex(&m_File, offset);
|
| }
|
| }
|
| - if (m_File.AppendString("\r\nendstream") < 0) {
|
| + if (m_File.AppendString("\r\nendstream") < 0)
|
| return -1;
|
| - }
|
| }
|
| }
|
| if (m_File.AppendString("\r\nstartxref\r\n") < 0) {
|
| @@ -1903,7 +1876,7 @@ int32_t CPDF_Creator::WriteDoc_Stage4(IFX_Pause* pPause) {
|
| void CPDF_Creator::Clear() {
|
| m_pXRefStream.reset();
|
| m_File.Clear();
|
| - m_NewObjNumArray.RemoveAll();
|
| + m_NewObjNumArray.clear();
|
| m_pIDArray.reset();
|
| }
|
|
|
| @@ -1919,7 +1892,7 @@ bool CPDF_Creator::Create(uint32_t flags) {
|
| m_Offset = 0;
|
| m_dwLastObjNum = m_pDocument->GetLastObjNum();
|
| m_ObjectOffset.Clear();
|
| - m_NewObjNumArray.RemoveAll();
|
| + m_NewObjNumArray.clear();
|
| InitID();
|
| if (flags & FPDFCREATE_PROGRESSIVE)
|
| return true;
|
|
|