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;