Index: core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp |
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp |
index aaa6fa2f71a90aadd641bc10c7241eeeb0410df0..5f1aa0b8e4f91985dffafa0f28761618b7381f1d 100644 |
--- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp |
+++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp |
@@ -2815,7 +2815,7 @@ class CPDF_DataAvail final : public IPDF_DataAvail { |
CPDF_Document* m_pDocument; |
- CPDF_SortObjNumArray m_objnum_array; |
+ std::set<FX_DWORD> m_ObjectSet; |
CFX_ArrayTemplate<CPDF_Object*> m_objs_array; |
@@ -3057,8 +3057,8 @@ FX_BOOL CPDF_DataAvail::IsObjectsAvail( |
if (!IsDataAvail(offset, size, pHints)) { |
ret_array.Add(pObj); |
count++; |
- } else if (!m_objnum_array.Find(dwNum)) { |
- m_objnum_array.AddObjNum(dwNum); |
+ } else if (!pdfium::ContainsKey(m_ObjectSet, dwNum)) { |
+ m_ObjectSet.insert(dwNum); |
CPDF_Object* pReferred = |
m_pDocument->GetIndirectObject(pRef->GetRefObjNum(), nullptr); |
if (pReferred) { |
@@ -3074,7 +3074,7 @@ FX_BOOL CPDF_DataAvail::IsObjectsAvail( |
CPDF_Object* pObj = new_obj_array[i]; |
if (CPDF_Reference* pRef = pObj->AsReference()) { |
FX_DWORD dwNum = pRef->GetRefObjNum(); |
- if (!m_objnum_array.Find(dwNum)) |
+ if (!pdfium::ContainsKey(m_ObjectSet, dwNum)) |
ret_array.Add(pObj); |
} else { |
ret_array.Add(pObj); |
@@ -3106,7 +3106,7 @@ IPDF_DataAvail::DocAvailStatus CPDF_DataAvail::IsDocAvail( |
FX_BOOL CPDF_DataAvail::CheckAcroFormSubObject(IFX_DownloadHints* pHints) { |
if (!m_objs_array.GetSize()) { |
m_objs_array.RemoveAll(); |
- m_objnum_array.RemoveAll(); |
+ m_ObjectSet.clear(); |
CFX_ArrayTemplate<CPDF_Object*> obj_array; |
obj_array.Append(m_arrayAcroforms); |
FX_BOOL bRet = IsObjectsAvail(obj_array, FALSE, pHints, m_objs_array); |
@@ -4312,7 +4312,7 @@ FX_BOOL CPDF_DataAvail::CheckPageAnnots(int32_t iPage, |
IFX_DownloadHints* pHints) { |
if (!m_objs_array.GetSize()) { |
m_objs_array.RemoveAll(); |
- m_objnum_array.RemoveAll(); |
+ m_ObjectSet.clear(); |
CPDF_Dictionary* pPageDict = m_pDocument->GetPage(iPage); |
if (!pPageDict) { |
return TRUE; |
@@ -4382,7 +4382,7 @@ int CPDF_DataAvail::IsPageAvail(int32_t iPage, IFX_DownloadHints* pHints) { |
m_bAnnotsLoad = FALSE; |
m_bNeedDownLoadResource = FALSE; |
m_objs_array.RemoveAll(); |
- m_objnum_array.RemoveAll(); |
+ m_ObjectSet.clear(); |
} |
if (pdfium::ContainsKey(m_pagesLoadState, iPage)) |
return DataAvailable; |
@@ -4439,7 +4439,7 @@ int CPDF_DataAvail::IsPageAvail(int32_t iPage, IFX_DownloadHints* pHints) { |
if (!m_bPageLoadedOK) { |
if (!m_objs_array.GetSize()) { |
m_objs_array.RemoveAll(); |
- m_objnum_array.RemoveAll(); |
+ m_ObjectSet.clear(); |
m_pPageDict = m_pDocument->GetPage(iPage); |
if (!m_pPageDict) { |
ResetFirstCheck(iPage); |
@@ -4593,35 +4593,7 @@ IPDF_DataAvail::DocFormStatus CPDF_DataAvail::IsFormAvail( |
} |
return FormAvailable; |
} |
-void CPDF_SortObjNumArray::AddObjNum(FX_DWORD dwObjNum) { |
- int32_t iNext = 0; |
- if (BinarySearch(dwObjNum, iNext)) { |
- return; |
- } |
- m_number_array.InsertAt(iNext, dwObjNum); |
-} |
-FX_BOOL CPDF_SortObjNumArray::Find(FX_DWORD dwObjNum) { |
- int32_t iNext = 0; |
- return BinarySearch(dwObjNum, iNext); |
-} |
-FX_BOOL CPDF_SortObjNumArray::BinarySearch(FX_DWORD value, int32_t& iNext) { |
- int32_t iLow = 0; |
- int32_t iHigh = m_number_array.GetSize() - 1; |
- while (iLow <= iHigh) { |
- int32_t iMid = (iLow + iHigh) / 2; |
- if (m_number_array.GetAt(iMid) == value) { |
- iNext = iMid; |
- return TRUE; |
- } |
- if (m_number_array.GetAt(iMid) > value) { |
- iHigh = iMid - 1; |
- } else if (m_number_array.GetAt(iMid) < value) { |
- iLow = iMid + 1; |
- } |
- } |
- iNext = iLow; |
- return FALSE; |
-} |
+ |
CPDF_PageNode::~CPDF_PageNode() { |
for (int32_t i = 0; i < m_childNode.GetSize(); ++i) { |
delete m_childNode[i]; |