From 711046ac7043ebeec2b0c9a5eb168418cd07a876 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Fri, 19 Feb 2016 12:09:09 -0800 Subject: Move m_rgPendingNodes off of CFX_PtrList. R=thestig@chromium.org Review URL: https://codereview.chromium.org/1712913002 . --- xfa/src/fxfa/src/parser/xfa_layout_itemlayout.cpp | 30 +++++++++++------------ xfa/src/fxfa/src/parser/xfa_layout_itemlayout.h | 15 +++++++++--- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/xfa/src/fxfa/src/parser/xfa_layout_itemlayout.cpp b/xfa/src/fxfa/src/parser/xfa_layout_itemlayout.cpp index f3b1276797..6f2a5010a1 100644 --- a/xfa/src/fxfa/src/parser/xfa_layout_itemlayout.cpp +++ b/xfa/src/fxfa/src/parser/xfa_layout_itemlayout.cpp @@ -5,6 +5,7 @@ // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com #include +#include #include "xfa/src/foxitlib.h" #include "xfa/src/fxfa/src/common/xfa_utils.h" @@ -1752,14 +1753,14 @@ static void XFA_ItemLayoutProcessor_AddPendingNode( CXFA_ItemLayoutProcessor* pProcessor, CXFA_Node* pPendingNode, FX_BOOL bBreakPending) { - pProcessor->m_rgPendingNodes.AddTail(pPendingNode); + pProcessor->m_PendingNodes.push_back(pPendingNode); pProcessor->m_bBreakPending = bBreakPending; } static FX_FLOAT XFA_ItemLayoutProcessor_InsertPendingItems( CXFA_ItemLayoutProcessor* pProcessor, CXFA_Node* pCurChildNode) { FX_FLOAT fTotalHeight = 0; - if (pProcessor->m_rgPendingNodes.GetCount() < 1) { + if (pProcessor->m_PendingNodes.empty()) { return fTotalHeight; } if (pProcessor->m_pLayoutItem == NULL) { @@ -1767,22 +1768,19 @@ static FX_FLOAT XFA_ItemLayoutProcessor_InsertPendingItems( pProcessor->CreateContentLayoutItem(pCurChildNode); pProcessor->m_pLayoutItem->m_sSize.Set(0, 0); } - while (pProcessor->m_rgPendingNodes.GetCount() > 0) { - FX_POSITION pos = pProcessor->m_rgPendingNodes.GetHeadPosition(); - CXFA_Node* pPendingNode = - reinterpret_cast(pProcessor->m_rgPendingNodes.GetAt(pos)); - pProcessor->m_rgPendingNodes.RemoveAt(pos); - CXFA_ContentLayoutItem* pPendingLayoutItem = NULL; - CXFA_ItemLayoutProcessor* pPendingProcessor = - new CXFA_ItemLayoutProcessor(pPendingNode, NULL); + while (!pProcessor->m_PendingNodes.empty()) { + std::unique_ptr pPendingProcessor( + new CXFA_ItemLayoutProcessor(pProcessor->m_PendingNodes.front(), + nullptr)); + pProcessor->m_PendingNodes.pop_front(); #ifndef _XFA_LAYOUTITEM_ProcessCACHE_ pPendingProcessor->m_pPageMgrCreateItem = pProcessor->m_pPageMgrCreateItem; #endif pPendingProcessor->DoLayout(FALSE, XFA_LAYOUT_FLOAT_MAX); - pPendingLayoutItem = pPendingProcessor->HasLayoutItem() - ? pPendingProcessor->ExtractLayoutItem() - : NULL; - delete pPendingProcessor; + CXFA_ContentLayoutItem* pPendingLayoutItem = + pPendingProcessor->HasLayoutItem() + ? pPendingProcessor->ExtractLayoutItem() + : nullptr; if (pPendingLayoutItem) { XFA_ItemLayoutProcessor_AddLeaderAfterSplit(pProcessor, pPendingLayoutItem); @@ -2715,8 +2713,8 @@ XFA_ItemLayoutProcessorResult CXFA_ItemLayoutProcessor::DoLayoutFlowedContainer( } } FX_BOOL bRetValue = - (m_nCurChildNodeStage == XFA_ItemLayoutProcessorStages_Done && - m_rgPendingNodes.GetCount() == 0); + m_nCurChildNodeStage == XFA_ItemLayoutProcessorStages_Done && + m_PendingNodes.empty(); if (bBreakDone) { bRetValue = FALSE; } diff --git a/xfa/src/fxfa/src/parser/xfa_layout_itemlayout.h b/xfa/src/fxfa/src/parser/xfa_layout_itemlayout.h index f53b19fe26..9ef40935a0 100644 --- a/xfa/src/fxfa/src/parser/xfa_layout_itemlayout.h +++ b/xfa/src/fxfa/src/parser/xfa_layout_itemlayout.h @@ -7,20 +7,27 @@ #ifndef XFA_SRC_FXFA_SRC_PARSER_XFA_LAYOUT_ITEMLAYOUT_H_ #define XFA_SRC_FXFA_SRC_PARSER_XFA_LAYOUT_ITEMLAYOUT_H_ +#include "float.h" + +#include + #define XFA_LAYOUT_INVALIDNODE ((CXFA_Node*)(intptr_t)-1) #define XFA_LAYOUT_FLOAT_PERCISION (0.0005f) -#include "float.h" #define XFA_LAYOUT_FLOAT_MAX FLT_MAX -class CXFA_ItemLayoutProcessor; -class CXFA_LayoutPageMgr; + class CXFA_ContainerLayoutItem; class CXFA_ContentLayoutItem; +class CXFA_ItemLayoutProcessor; +class CXFA_LayoutPageMgr; +class CXFA_Node; + enum XFA_ItemLayoutProcessorResult { XFA_ItemLayoutProcessorResult_Done, XFA_ItemLayoutProcessorResult_PageFullBreak, XFA_ItemLayoutProcessorResult_RowFullBreak, XFA_ItemLayoutProcessorResult_ManualBreak, }; + enum XFA_ItemLayoutProcessorStages { XFA_ItemLayoutProcessorStages_None, XFA_ItemLayoutProcessorStages_BookendLeader, @@ -171,7 +178,7 @@ class CXFA_ItemLayoutProcessor { XFA_ItemLayoutProcessorStages m_nCurChildNodeStage; FX_FLOAT m_fUsedSize; CXFA_LayoutPageMgr* m_pPageMgr; - CFX_PtrList m_rgPendingNodes; + std::list m_PendingNodes; FX_BOOL m_bBreakPending; CFX_ArrayTemplate m_rgSpecifiedColumnWidths; CFX_ArrayTemplate m_arrayKeepItems; -- cgit v1.2.3