Switch from vector to deque for some CXFA_FFDocView members. This make it easier to iterate through them safely. Change-Id: Ie2dd3865ffd657ea0135de50f8390f660a95f4c7 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/52834 Reviewed-by: Tom Sepez <tsepez@chromium.org> Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/xfa/fxfa/cxfa_ffdocview.cpp b/xfa/fxfa/cxfa_ffdocview.cpp index 49edda3..9160398 100644 --- a/xfa/fxfa/cxfa_ffdocview.cpp +++ b/xfa/fxfa/cxfa_ffdocview.cpp
@@ -171,14 +171,11 @@ LockUpdate(); while (!m_NewAddedNodes.empty()) { - std::vector<CXFA_Node*> nodes = std::move(m_NewAddedNodes); - m_NewAddedNodes.clear(); - for (CXFA_Node* pNode : nodes) { - InitCalculate(pNode); - InitValidate(pNode); - ExecEventActivityByDeepFirst(pNode, XFA_EVENT_Ready, true, true); - } - // May have created more newly added nodes, try again. + CXFA_Node* pNode = m_NewAddedNodes.front(); + m_NewAddedNodes.pop_front(); + InitCalculate(pNode); + InitValidate(pNode); + ExecEventActivityByDeepFirst(pNode, XFA_EVENT_Ready, true, true); } RunSubformIndexChange(); @@ -577,13 +574,10 @@ return false; while (!m_ValidateNodes.empty()) { - std::vector<CXFA_Node*> nodes = std::move(m_ValidateNodes); - m_ValidateNodes.clear(); - for (CXFA_Node* node : nodes) { - if (!node->HasRemovedChildren()) - node->ProcessValidate(this, 0); - } - // May have created more nodes to validate, try again. + CXFA_Node* node = m_ValidateNodes.front(); + m_ValidateNodes.pop_front(); + if (!node->HasRemovedChildren()) + node->ProcessValidate(this, 0); } return true; }
diff --git a/xfa/fxfa/cxfa_ffdocview.h b/xfa/fxfa/cxfa_ffdocview.h index cb55eea..1c7ab80 100644 --- a/xfa/fxfa/cxfa_ffdocview.h +++ b/xfa/fxfa/cxfa_ffdocview.h
@@ -7,6 +7,7 @@ #ifndef XFA_FXFA_CXFA_FFDOCVIEW_H_ #define XFA_FXFA_CXFA_FFDOCVIEW_H_ +#include <deque> #include <memory> #include <vector> @@ -119,10 +120,10 @@ UnownedPtr<CXFA_LayoutProcessor> m_pXFADocLayout; UnownedPtr<CXFA_Node> m_pFocusNode; UnownedPtr<CXFA_FFWidget> m_pFocusWidget; - std::vector<CXFA_Node*> m_ValidateNodes; + std::deque<CXFA_Node*> m_ValidateNodes; std::vector<CXFA_Node*> m_CalculateNodes; std::vector<CXFA_BindItems*> m_BindItems; - std::vector<CXFA_Node*> m_NewAddedNodes; + std::deque<CXFA_Node*> m_NewAddedNodes; std::vector<CXFA_Node*> m_IndexChangedSubforms; XFA_DOCVIEW_LAYOUTSTATUS m_iStatus = XFA_DOCVIEW_LAYOUTSTATUS_None; int32_t m_iLock = 0;