Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(707)

Side by Side Diff: xfa/fxfa/parser/xfa_document_datamerger_imp.cpp

Issue 2612923002: Remove CFX_MapPtrToPtr from xfa/fxfa. (Closed)
Patch Set: endless loop Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « xfa/fxfa/parser/cxfa_scriptcontext.cpp ('k') | xfa/fxfa/parser/xfa_object.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "xfa/fxfa/parser/xfa_document_datamerger_imp.h" 7 #include "xfa/fxfa/parser/xfa_document_datamerger_imp.h"
8 8
9 #include <map>
9 #include <vector> 10 #include <vector>
10 11
11 #include "core/fxcrt/fx_ext.h" 12 #include "core/fxcrt/fx_ext.h"
12 #include "third_party/base/stl_util.h" 13 #include "third_party/base/stl_util.h"
13 #include "xfa/fde/xml/fde_xml_imp.h" 14 #include "xfa/fde/xml/fde_xml_imp.h"
14 #include "xfa/fxfa/parser/cxfa_document.h" 15 #include "xfa/fxfa/parser/cxfa_document.h"
15 #include "xfa/fxfa/parser/cxfa_layoutprocessor.h" 16 #include "xfa/fxfa/parser/cxfa_layoutprocessor.h"
16 #include "xfa/fxfa/parser/cxfa_occur.h" 17 #include "xfa/fxfa/parser/cxfa_occur.h"
17 #include "xfa/fxfa/parser/cxfa_scriptcontext.h" 18 #include "xfa/fxfa/parser/cxfa_scriptcontext.h"
18 #include "xfa/fxfa/parser/xfa_localemgr.h" 19 #include "xfa/fxfa/parser/xfa_localemgr.h"
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 case XFA_Element::Signature: 350 case XFA_Element::Signature:
350 case XFA_Element::TextEdit: 351 case XFA_Element::TextEdit:
351 default: 352 default:
352 FormValueNode_SetChildContent(defValue.GetNode(), wsNormalizeValue, 353 FormValueNode_SetChildContent(defValue.GetNode(), wsNormalizeValue,
353 XFA_Element::Text); 354 XFA_Element::Text);
354 break; 355 break;
355 } 356 }
356 } 357 }
357 358
358 CXFA_Node* GetGlobalBinding(CXFA_Document* pDocument, uint32_t dwNameHash) { 359 CXFA_Node* GetGlobalBinding(CXFA_Document* pDocument, uint32_t dwNameHash) {
359 CXFA_Node* pNode = nullptr; 360 auto it = pDocument->m_rgGlobalBinding.find(dwNameHash);
360 pDocument->m_rgGlobalBinding.Lookup(dwNameHash, pNode); 361 return it != pDocument->m_rgGlobalBinding.end() ? it->second : nullptr;
361 return pNode;
362 } 362 }
363 363
364 void RegisterGlobalBinding(CXFA_Document* pDocument, 364 void RegisterGlobalBinding(CXFA_Document* pDocument,
365 uint32_t dwNameHash, 365 uint32_t dwNameHash,
366 CXFA_Node* pDataNode) { 366 CXFA_Node* pDataNode) {
367 pDocument->m_rgGlobalBinding.SetAt(dwNameHash, pDataNode); 367 pDocument->m_rgGlobalBinding[dwNameHash] = pDataNode;
368 } 368 }
369 369
370 CXFA_Node* ScopeMatchGlobalBinding(CXFA_Node* pDataScope, 370 CXFA_Node* ScopeMatchGlobalBinding(CXFA_Node* pDataScope,
371 uint32_t dwNameHash, 371 uint32_t dwNameHash,
372 XFA_Element eMatchDataNodeType, 372 XFA_Element eMatchDataNodeType,
373 bool bUpLevel) { 373 bool bUpLevel) {
374 for (CXFA_Node *pCurDataScope = pDataScope, *pLastDataScope = nullptr; 374 for (CXFA_Node *pCurDataScope = pDataScope, *pLastDataScope = nullptr;
375 pCurDataScope && pCurDataScope->GetPacketID() == XFA_XDPPACKET_Datasets; 375 pCurDataScope && pCurDataScope->GetPacketID() == XFA_XDPPACKET_Datasets;
376 pLastDataScope = pCurDataScope, 376 pLastDataScope = pCurDataScope,
377 pCurDataScope = 377 pCurDataScope =
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after
746 : XFA_ATTRIBUTEENUM_Ordered; 746 : XFA_ATTRIBUTEENUM_Ordered;
747 int32_t iCurRepeatIndex = 0; 747 int32_t iCurRepeatIndex = 0;
748 XFA_ATTRIBUTEENUM eParentBindMatch = XFA_ATTRIBUTEENUM_None; 748 XFA_ATTRIBUTEENUM eParentBindMatch = XFA_ATTRIBUTEENUM_None;
749 if (bDataMerge) { 749 if (bDataMerge) {
750 CXFA_NodeIteratorTemplate<CXFA_Node, CXFA_TraverseStrategy_XFAContainerNode> 750 CXFA_NodeIteratorTemplate<CXFA_Node, CXFA_TraverseStrategy_XFAContainerNode>
751 sNodeIterator(pTemplateNode); 751 sNodeIterator(pTemplateNode);
752 bool bAccessedDataDOM = false; 752 bool bAccessedDataDOM = false;
753 if (eType == XFA_Element::SubformSet || eType == XFA_Element::Area) { 753 if (eType == XFA_Element::SubformSet || eType == XFA_Element::Area) {
754 sNodeIterator.MoveToNext(); 754 sNodeIterator.MoveToNext();
755 } else { 755 } else {
756 CFX_MapPtrTemplate<CXFA_Node*, CXFA_Node*> subformMapArray; 756 std::map<CXFA_Node*, CXFA_Node*> subformMapArray;
757 CXFA_NodeArray nodeArray; 757 CXFA_NodeArray nodeArray;
758 for (; iMax < 0 || iCurRepeatIndex < iMax; iCurRepeatIndex++) { 758 for (; iMax < 0 || iCurRepeatIndex < iMax; iCurRepeatIndex++) {
759 bool bSelfMatch = false; 759 bool bSelfMatch = false;
760 XFA_ATTRIBUTEENUM eBindMatch = XFA_ATTRIBUTEENUM_None; 760 XFA_ATTRIBUTEENUM eBindMatch = XFA_ATTRIBUTEENUM_None;
761 CXFA_Node* pDataNode = FindMatchingDataNode( 761 CXFA_Node* pDataNode = FindMatchingDataNode(
762 pDocument, pTemplateNode, pDataScope, bAccessedDataDOM, false, 762 pDocument, pTemplateNode, pDataScope, bAccessedDataDOM, false,
763 &sNodeIterator, bSelfMatch, eBindMatch, true); 763 &sNodeIterator, bSelfMatch, eBindMatch, true);
764 if (!pDataNode || sNodeIterator.GetCurrent() != pTemplateNode) 764 if (!pDataNode || sNodeIterator.GetCurrent() != pTemplateNode)
765 break; 765 break;
766 766
767 eParentBindMatch = eBindMatch; 767 eParentBindMatch = eBindMatch;
768 CXFA_Node* pSubformNode = XFA_NodeMerge_CloneOrMergeContainer( 768 CXFA_Node* pSubformNode = XFA_NodeMerge_CloneOrMergeContainer(
769 pDocument, pFormParentNode, pTemplateNode, false, pSearchArray); 769 pDocument, pFormParentNode, pTemplateNode, false, pSearchArray);
770 if (!pFirstInstance) 770 if (!pFirstInstance)
771 pFirstInstance = pSubformNode; 771 pFirstInstance = pSubformNode;
772 772
773 CreateDataBinding(pSubformNode, pDataNode, true); 773 CreateDataBinding(pSubformNode, pDataNode, true);
774 ASSERT(pSubformNode); 774 ASSERT(pSubformNode);
775 subformMapArray.SetAt(pSubformNode, pDataNode); 775 subformMapArray[pSubformNode] = pDataNode;
776 nodeArray.Add(pSubformNode); 776 nodeArray.Add(pSubformNode);
777 } 777 }
778 778
779 subformMapArray.GetStartPosition();
780 for (int32_t iIndex = 0; iIndex < nodeArray.GetSize(); iIndex++) { 779 for (int32_t iIndex = 0; iIndex < nodeArray.GetSize(); iIndex++) {
781 CXFA_Node* pSubform = nodeArray[iIndex]; 780 CXFA_Node* pSubform = nodeArray[iIndex];
782 CXFA_Node* pDataNode = 781 CXFA_Node* pDataNode = nullptr;
783 reinterpret_cast<CXFA_Node*>(subformMapArray.GetValueAt(pSubform)); 782 auto it = subformMapArray.find(pSubform);
783 if (it != subformMapArray.end())
784 pDataNode = it->second;
784 for (CXFA_Node* pTemplateChild = 785 for (CXFA_Node* pTemplateChild =
785 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); 786 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild);
786 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( 787 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem(
787 XFA_NODEITEM_NextSibling)) { 788 XFA_NODEITEM_NextSibling)) {
788 if (NeedGenerateForm(pTemplateChild, bUseInstanceManager)) { 789 if (NeedGenerateForm(pTemplateChild, bUseInstanceManager)) {
789 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubform, 790 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubform,
790 pTemplateChild, true, nullptr); 791 pTemplateChild, true, nullptr);
791 } else if (pTemplateChild->IsContainerNode()) { 792 } else if (pTemplateChild->IsContainerNode()) {
792 pDocument->DataMerge_CopyContainer(pTemplateChild, pSubform, 793 pDocument->DataMerge_CopyContainer(pTemplateChild, pSubform,
793 pDataNode, false, true, false); 794 pDataNode, false, true, false);
794 } 795 }
795 } 796 }
796 } 797 }
797 subformMapArray.RemoveAll(); 798 subformMapArray.clear();
798 } 799 }
799 800
800 for (; iMax < 0 || iCurRepeatIndex < iMax; iCurRepeatIndex++) { 801 for (; iMax < 0 || iCurRepeatIndex < iMax; iCurRepeatIndex++) {
801 bool bSelfMatch = false; 802 bool bSelfMatch = false;
802 XFA_ATTRIBUTEENUM eBindMatch = XFA_ATTRIBUTEENUM_None; 803 XFA_ATTRIBUTEENUM eBindMatch = XFA_ATTRIBUTEENUM_None;
803 if (!FindMatchingDataNode(pDocument, pTemplateNode, pDataScope, 804 if (!FindMatchingDataNode(pDocument, pTemplateNode, pDataScope,
804 bAccessedDataDOM, false, &sNodeIterator, 805 bAccessedDataDOM, false, &sNodeIterator,
805 bSelfMatch, eBindMatch, true)) { 806 bSelfMatch, eBindMatch, true)) {
806 break; 807 break;
807 } 808 }
(...skipping 706 matching lines...) Expand 10 before | Expand all | Expand 10 after
1514 } 1515 }
1515 } 1516 }
1516 1517
1517 void CXFA_Document::DoDataRemerge(bool bDoDataMerge) { 1518 void CXFA_Document::DoDataRemerge(bool bDoDataMerge) {
1518 CXFA_Node* pFormRoot = ToNode(GetXFAObject(XFA_HASHCODE_Form)); 1519 CXFA_Node* pFormRoot = ToNode(GetXFAObject(XFA_HASHCODE_Form));
1519 if (pFormRoot) { 1520 if (pFormRoot) {
1520 while (CXFA_Node* pNode = pFormRoot->GetNodeItem(XFA_NODEITEM_FirstChild)) 1521 while (CXFA_Node* pNode = pFormRoot->GetNodeItem(XFA_NODEITEM_FirstChild))
1521 pFormRoot->RemoveChild(pNode); 1522 pFormRoot->RemoveChild(pNode);
1522 pFormRoot->SetObject(XFA_ATTRIBUTE_BindingNode, nullptr); 1523 pFormRoot->SetObject(XFA_ATTRIBUTE_BindingNode, nullptr);
1523 } 1524 }
1524 m_rgGlobalBinding.RemoveAll(); 1525 m_rgGlobalBinding.clear();
1525 if (bDoDataMerge) 1526 if (bDoDataMerge)
1526 DoDataMerge(); 1527 DoDataMerge();
1527 1528
1528 CXFA_LayoutProcessor* pLayoutProcessor = GetLayoutProcessor(); 1529 CXFA_LayoutProcessor* pLayoutProcessor = GetLayoutProcessor();
1529 pLayoutProcessor->SetForceReLayout(true); 1530 pLayoutProcessor->SetForceReLayout(true);
1530 } 1531 }
OLDNEW
« no previous file with comments | « xfa/fxfa/parser/cxfa_scriptcontext.cpp ('k') | xfa/fxfa/parser/xfa_object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698