diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2019-04-17 15:19:25 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2019-04-20 08:02:25 +0200 |
commit | ec7ba61a6164c805f5a71b077715b7e1521a2d62 (patch) | |
tree | 4d4f3fb1ad960465897754601b0842c78db564bf /sw | |
parent | 7d58f26bf4dbeb4e138c2a91f039d8bc7fa00f0c (diff) |
simplify SfxPoolItemArray_Impl (tdf#81765 related)
Since we want to look up items by pointer, just store them in a
std::unordered_set, which allows fast find().
This dramatically simplifies most operations on this data structure.
Fix a dodgy sd test that was relying on items with the same whichid
being in the pool being in a certain order.
Change-Id: I4d79fc718f95e3083a20788be1050fbe9fca7263
Reviewed-on: https://gerrit.libreoffice.org/70881
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'sw')
-rw-r--r-- | sw/source/core/crsr/crstrvl.cxx | 24 | ||||
-rw-r--r-- | sw/source/core/doc/DocumentFieldsManager.cxx | 18 | ||||
-rw-r--r-- | sw/source/core/doc/doc.cxx | 44 | ||||
-rw-r--r-- | sw/source/core/doc/docbasic.cxx | 8 | ||||
-rw-r--r-- | sw/source/core/doc/docfld.cxx | 22 | ||||
-rw-r--r-- | sw/source/core/doc/docfmt.cxx | 19 | ||||
-rw-r--r-- | sw/source/core/doc/doctxm.cxx | 5 | ||||
-rw-r--r-- | sw/source/core/doc/visiturl.cxx | 11 | ||||
-rw-r--r-- | sw/source/core/docnode/node.cxx | 10 | ||||
-rw-r--r-- | sw/source/core/edit/edfld.cxx | 22 | ||||
-rw-r--r-- | sw/source/core/fields/docufld.cxx | 8 | ||||
-rw-r--r-- | sw/source/core/layout/trvlfrm.cxx | 8 | ||||
-rw-r--r-- | sw/source/core/unocore/unostyle.cxx | 25 | ||||
-rw-r--r-- | sw/source/core/view/vprint.cxx | 15 | ||||
-rw-r--r-- | sw/source/filter/html/htmlflywriter.cxx | 15 | ||||
-rw-r--r-- | sw/source/filter/writer/writer.cxx | 6 | ||||
-rw-r--r-- | sw/source/filter/ww8/rtfexport.cxx | 48 | ||||
-rw-r--r-- | sw/source/filter/ww8/wrtw8sty.cxx | 12 | ||||
-rw-r--r-- | sw/source/filter/ww8/wrtww8.cxx | 10 | ||||
-rw-r--r-- | sw/source/filter/xml/xmlexp.cxx | 24 | ||||
-rw-r--r-- | sw/source/filter/xml/xmlfonte.cxx | 16 |
21 files changed, 146 insertions, 224 deletions
diff --git a/sw/source/core/crsr/crstrvl.cxx b/sw/source/core/crsr/crstrvl.cxx index 4e190bc7d2f4..a593db4de4bd 100644 --- a/sw/source/core/crsr/crstrvl.cxx +++ b/sw/source/core/crsr/crstrvl.cxx @@ -449,23 +449,22 @@ bool SwCursorShell::GotoNxtPrvTableFormula( bool bNext, bool bOnlyErrors ) &rPos, &tmp) ); } { - sal_uInt32 n, nMaxItems = GetDoc()->GetAttrPool().GetItemCount2( RES_BOXATR_FORMULA ); + sal_uInt32 nMaxItems = GetDoc()->GetAttrPool().GetItemCount2( RES_BOXATR_FORMULA ); if( nMaxItems > 0 ) { sal_uInt8 nMaxDo = 2; do { - for( n = 0; n < nMaxItems; ++n ) + for (const SfxPoolItem* pItem : GetDoc()->GetAttrPool().GetItemSurrogates(RES_BOXATR_FORMULA)) { const SwTableBox* pTBox; - const SfxPoolItem* pItem; - if( nullptr != (pItem = GetDoc()->GetAttrPool().GetItem2( - RES_BOXATR_FORMULA, n ) ) && - nullptr != (pTBox = static_cast<const SwTableBoxFormula*>(pItem)->GetTableBox() ) && + auto pFormulaItem = dynamic_cast<const SwTableBoxFormula*>(pItem); + if( pFormulaItem && + nullptr != (pTBox = pFormulaItem->GetTableBox() ) && pTBox->GetSttNd() && pTBox->GetSttNd()->GetNodes().IsDocNodes() && ( !bOnlyErrors || - !static_cast<const SwTableBoxFormula*>(pItem)->HasValidBoxes() ) ) + !pFormulaItem->HasValidBoxes() ) ) { const SwContentFrame* pCFrame; SwNodeIndex aIdx( *pTBox->GetSttNd() ); @@ -556,20 +555,19 @@ bool SwCursorShell::GotoNxtPrvTOXMark( bool bNext ) { const SwTextNode* pTextNd; const SwTextTOXMark* pTextTOX; - sal_uInt32 n, nMaxItems = GetDoc()->GetAttrPool().GetItemCount2( RES_TXTATR_TOXMARK ); + sal_uInt32 nMaxItems = GetDoc()->GetAttrPool().GetItemCount2( RES_TXTATR_TOXMARK ); if( nMaxItems > 0 ) { do { - for( n = 0; n < nMaxItems; ++n ) + for (const SfxPoolItem* pItem : GetDoc()->GetAttrPool().GetItemSurrogates(RES_TXTATR_TOXMARK)) { - const SfxPoolItem* pItem; + auto pToxMarkItem = dynamic_cast<const SwTOXMark*>(pItem); const SwContentFrame* pCFrame; std::pair<Point, bool> const tmp(aPt, false); - if( nullptr != (pItem = GetDoc()->GetAttrPool().GetItem2( - RES_TXTATR_TOXMARK, n ) ) && - nullptr != (pTextTOX = static_cast<const SwTOXMark*>(pItem)->GetTextTOXMark() ) && + if( pToxMarkItem && + nullptr != (pTextTOX = pToxMarkItem->GetTextTOXMark() ) && ( pTextNd = &pTextTOX->GetTextNode())->GetNodes().IsDocNodes() && nullptr != (pCFrame = pTextNd->getLayoutFrame(GetLayout(), nullptr, &tmp)) && ( IsReadOnlyAvailable() || !pCFrame->IsProtected() )) diff --git a/sw/source/core/doc/DocumentFieldsManager.cxx b/sw/source/core/doc/DocumentFieldsManager.cxx index 4ef15a9f56e4..c9c1d34157b8 100644 --- a/sw/source/core/doc/DocumentFieldsManager.cxx +++ b/sw/source/core/doc/DocumentFieldsManager.cxx @@ -700,14 +700,12 @@ void DocumentFieldsManager::UpdateTableFields( SfxPoolItem* pHt ) } // process all table box formulas - const SfxPoolItem* pItem; - sal_uInt32 nMaxItems = m_rDoc.GetAttrPool().GetItemCount2( RES_BOXATR_FORMULA ); - for (sal_uInt32 i = 0; i < nMaxItems; ++i) + for (const SfxPoolItem* pItem : m_rDoc.GetAttrPool().GetItemSurrogates(RES_BOXATR_FORMULA)) { - if( nullptr != (pItem = m_rDoc.GetAttrPool().GetItem2( RES_BOXATR_FORMULA, i ) ) && - static_cast<const SwTableBoxFormula*>(pItem)->GetDefinedIn() ) + auto pBoxFormula = dynamic_cast<const SwTableBoxFormula*>(pItem); + if( pBoxFormula && pBoxFormula->GetDefinedIn() ) { - const_cast<SwTableBoxFormula*>(static_cast<const SwTableBoxFormula*>(pItem))->ChangeState( pHt ); + const_cast<SwTableBoxFormula*>(pBoxFormula)->ChangeState( pHt ); } } @@ -807,13 +805,11 @@ void DocumentFieldsManager::UpdateTableFields( SfxPoolItem* pHt ) } // calculate the formula at the boxes - for (sal_uInt32 i = 0; i < nMaxItems; ++i ) + for (const SfxPoolItem* pItem : m_rDoc.GetAttrPool().GetItemSurrogates(RES_BOXATR_FORMULA)) { - if( nullptr != (pItem = m_rDoc.GetAttrPool().GetItem2( RES_BOXATR_FORMULA, i ) ) && - static_cast<const SwTableBoxFormula*>(pItem)->GetDefinedIn() && - !static_cast<const SwTableBoxFormula*>(pItem)->IsValid() ) + auto pFormula = const_cast<SwTableBoxFormula*>(dynamic_cast<const SwTableBoxFormula*>(pItem)); + if( pFormula && pFormula->GetDefinedIn() && !pFormula->IsValid() ) { - SwTableBoxFormula* pFormula = const_cast<SwTableBoxFormula*>(static_cast<const SwTableBoxFormula*>(pItem)); SwTableBox* pBox = pFormula->GetTableBox(); if( pBox && pBox->GetSttNd() && pBox->GetSttNd()->GetNodes().IsDocNodes() ) diff --git a/sw/source/core/doc/doc.cxx b/sw/source/core/doc/doc.cxx index 77408b4e9f53..de810a488f33 100644 --- a/sw/source/core/doc/doc.cxx +++ b/sw/source/core/doc/doc.cxx @@ -1069,14 +1069,12 @@ void SwDoc::CalculatePagePairsForProspectPrinting( /// @return the reference in the doc for the name const SwFormatRefMark* SwDoc::GetRefMark( const OUString& rName ) const { - sal_uInt32 nMaxItems = GetAttrPool().GetItemCount2( RES_TXTATR_REFMARK ); - for( sal_uInt32 n = 0; n < nMaxItems; ++n ) + for (const SfxPoolItem* pItem : GetAttrPool().GetItemSurrogates(RES_TXTATR_REFMARK)) { - const SfxPoolItem* pItem; - if( nullptr == (pItem = GetAttrPool().GetItem2( RES_TXTATR_REFMARK, n ) )) + auto pFormatRef = dynamic_cast<const SwFormatRefMark*>(pItem); + if(!pFormatRef) continue; - const SwFormatRefMark* pFormatRef = static_cast<const SwFormatRefMark*>(pItem); const SwTextRefMark* pTextRef = pFormatRef->GetTextRefMark(); if( pTextRef && &pTextRef->GetTextNode().GetNodes() == &GetNodes() && rName == pFormatRef->GetRefName() ) @@ -1091,19 +1089,18 @@ const SwFormatRefMark* SwDoc::GetRefMark( sal_uInt16 nIndex ) const const SwTextRefMark* pTextRef; const SwFormatRefMark* pRet = nullptr; - sal_uInt32 nMaxItems = GetAttrPool().GetItemCount2( RES_TXTATR_REFMARK ); sal_uInt32 nCount = 0; - for( sal_uInt32 n = 0; n < nMaxItems; ++n ) + for (const SfxPoolItem* pItem : GetAttrPool().GetItemSurrogates(RES_TXTATR_REFMARK)) { - const SfxPoolItem* pItem; + auto pRefMark = dynamic_cast<const SwFormatRefMark*>(pItem); - if( nullptr != (pItem = GetAttrPool().GetItem2( RES_TXTATR_REFMARK, n )) && - nullptr != (pTextRef = static_cast<const SwFormatRefMark*>(pItem)->GetTextRefMark()) && + if( pRefMark && + nullptr != (pTextRef = pRefMark->GetTextRefMark()) && &pTextRef->GetTextNode().GetNodes() == &GetNodes() ) { if(nCount == nIndex) { - pRet = static_cast<const SwFormatRefMark*>(pItem); + pRet = pRefMark; break; } nCount++; @@ -1119,19 +1116,18 @@ sal_uInt16 SwDoc::GetRefMarks( std::vector<OUString>* pNames ) const { const SwTextRefMark* pTextRef; - const sal_uInt32 nMaxItems = GetAttrPool().GetItemCount2( RES_TXTATR_REFMARK ); sal_uInt16 nCount = 0; - for( sal_uInt32 n = 0; n < nMaxItems; ++n ) + for (const SfxPoolItem* pItem : GetAttrPool().GetItemSurrogates(RES_TXTATR_REFMARK)) { - const SfxPoolItem* pItem; + auto pRefMark = dynamic_cast<const SwFormatRefMark*>(pItem); - if( nullptr != (pItem = GetAttrPool().GetItem2( RES_TXTATR_REFMARK, n )) && - nullptr != (pTextRef = static_cast<const SwFormatRefMark*>(pItem)->GetTextRefMark()) && + if( pRefMark && + nullptr != (pTextRef = pRefMark->GetTextRefMark()) && &pTextRef->GetTextNode().GetNodes() == &GetNodes() ) { if( pNames ) { - OUString aTmp(static_cast<const SwFormatRefMark*>(pItem)->GetRefName()); + OUString aTmp(pRefMark->GetRefName()); pNames->insert(pNames->begin() + nCount, aTmp); } ++nCount; @@ -1233,20 +1229,18 @@ void SwDoc::InvalidateAutoCompleteFlag() const SwFormatINetFormat* SwDoc::FindINetAttr( const OUString& rName ) const { - const SwFormatINetFormat* pItem; const SwTextINetFormat* pTextAttr; const SwTextNode* pTextNd; - sal_uInt32 n, nMaxItems = GetAttrPool().GetItemCount2( RES_TXTATR_INETFMT ); - for( n = 0; n < nMaxItems; ++n ) + for (const SfxPoolItem* pItem : GetAttrPool().GetItemSurrogates(RES_TXTATR_INETFMT)) { - pItem = GetAttrPool().GetItem2( RES_TXTATR_INETFMT, n ); - if( nullptr != pItem && - pItem->GetName() == rName && - nullptr != ( pTextAttr = pItem->GetTextINetFormat()) && + auto pFormatItem = dynamic_cast<const SwFormatINetFormat*>(pItem); + if( pFormatItem && + pFormatItem->GetName() == rName && + nullptr != ( pTextAttr = pFormatItem->GetTextINetFormat()) && nullptr != ( pTextNd = pTextAttr->GetpTextNode() ) && &pTextNd->GetNodes() == &GetNodes() ) { - return pItem; + return pFormatItem; } } return nullptr; diff --git a/sw/source/core/doc/docbasic.cxx b/sw/source/core/doc/docbasic.cxx index 8cab339903b6..2f11382e5298 100644 --- a/sw/source/core/doc/docbasic.cxx +++ b/sw/source/core/doc/docbasic.cxx @@ -140,12 +140,10 @@ sal_uInt16 SwDoc::CallEvent( SvMacroItemId nEvent, const SwCallMouseEvent& rCall case EVENT_OBJECT_INETATTR: if( bCheckPtr ) { - sal_uInt32 n, nMaxItems = GetAttrPool().GetItemCount2( RES_TXTATR_INETFMT ); - for( n = 0; n < nMaxItems; ++n ) + for (const SfxPoolItem* pItem : GetAttrPool().GetItemSurrogates(RES_TXTATR_INETFMT)) { - const SfxPoolItem* pItem; - if( nullptr != (pItem = GetAttrPool().GetItem2( RES_TXTATR_INETFMT, n ) ) - && rCallEvent.PTR.pINetAttr == pItem ) + auto pFormatItem = dynamic_cast<const SwFormatINetFormat*>(pItem); + if( pFormatItem && rCallEvent.PTR.pINetAttr == pFormatItem ) { bCheckPtr = false; // misuse as a flag break; diff --git a/sw/source/core/doc/docfld.cxx b/sw/source/core/doc/docfld.cxx index a9c3f251849e..bd62b5842b6a 100644 --- a/sw/source/core/doc/docfld.cxx +++ b/sw/source/core/doc/docfld.cxx @@ -452,13 +452,8 @@ void SwDoc::GetAllUsedDB( std::vector<OUString>& rDBNameList, for (sal_uInt16 const nWhichHint : { RES_TXTATR_FIELD, RES_TXTATR_INPUTFIELD }) { - sal_uInt32 nMaxItems = GetAttrPool().GetItemCount2(nWhichHint); - for (sal_uInt32 n = 0; n < nMaxItems; ++n) + for (const SfxPoolItem* pItem : GetAttrPool().GetItemSurrogates(nWhichHint)) { - const SfxPoolItem *const pItem(GetAttrPool().GetItem2(nWhichHint, n)); - if (nullptr == pItem) - continue; - const SwFormatField* pFormatField = static_cast<const SwFormatField*>(pItem); const SwTextField* pTextField = pFormatField->GetTextField(); if (!pTextField || !pTextField->GetTextNode().GetNodes().IsDocNodes()) @@ -613,14 +608,8 @@ void SwDoc::ChangeDBFields( const std::vector<OUString>& rOldNames, for (sal_uInt16 const nWhichHint : { RES_TXTATR_FIELD, RES_TXTATR_INPUTFIELD }) { - sal_uInt32 nMaxItems = GetAttrPool().GetItemCount2(nWhichHint); - - for (sal_uInt32 n = 0; n < nMaxItems; ++n) + for (const SfxPoolItem* pItem : GetAttrPool().GetItemSurrogates(nWhichHint)) { - const SfxPoolItem* pItem = GetAttrPool().GetItem2(nWhichHint, n); - if (!pItem) - continue; - SwFormatField* pFormatField = const_cast<SwFormatField*>(static_cast<const SwFormatField*>(pItem)); SwTextField* pTextField = pFormatField->GetTextField(); if (!pTextField || !pTextField->GetTextNode().GetNodes().IsDocNodes()) @@ -899,13 +888,8 @@ void SwDocUpdateField::MakeFieldList_( SwDoc& rDoc, int eGetMode ) for (sal_uInt16 const nWhichHint : { RES_TXTATR_FIELD, RES_TXTATR_INPUTFIELD }) { - const sal_uInt32 nMaxItems = rDoc.GetAttrPool().GetItemCount2(nWhichHint); - for (sal_uInt32 n = 0; n < nMaxItems; ++n) + for (const SfxPoolItem* pItem : rDoc.GetAttrPool().GetItemSurrogates(nWhichHint)) { - const SfxPoolItem* pItem = rDoc.GetAttrPool().GetItem2(nWhichHint, n); - if (!pItem) - continue; - const SwFormatField* pFormatField = static_cast<const SwFormatField*>(pItem); const SwTextField* pTextField = pFormatField->GetTextField(); if (!pTextField || !pTextField->GetTextNode().GetNodes().IsDocNodes()) diff --git a/sw/source/core/doc/docfmt.cxx b/sw/source/core/doc/docfmt.cxx index c870a63068c9..d1e1cb6c1873 100644 --- a/sw/source/core/doc/docfmt.cxx +++ b/sw/source/core/doc/docfmt.cxx @@ -644,11 +644,13 @@ void SwDoc::SetDefault( const SfxItemSet& rSet ) nOldWidth = aOld.Get(RES_PARATR_TABSTOP)[ 0 ].GetTabPos(); bool bChg = false; - sal_uInt32 nMaxItems = GetAttrPool().GetItemCount2( RES_PARATR_TABSTOP ); - for( sal_uInt32 n = 0; n < nMaxItems; ++n ) - if( nullptr != (pTmpItem = GetAttrPool().GetItem2( RES_PARATR_TABSTOP, n ) )) + for (const SfxPoolItem* pItem2 : GetAttrPool().GetItemSurrogates(RES_PARATR_TABSTOP)) + { + auto pTabStopItem = dynamic_cast<const SvxTabStopItem*>(pItem2); + if(pTabStopItem) bChg |= lcl_SetNewDefTabStops( nOldWidth, nNewWidth, - *const_cast<SvxTabStopItem*>(static_cast<const SvxTabStopItem*>(pTmpItem)) ); + *const_cast<SvxTabStopItem*>(pTabStopItem) ); + } aNew.ClearItem( RES_PARATR_TABSTOP ); aOld.ClearItem( RES_PARATR_TABSTOP ); @@ -2005,13 +2007,10 @@ std::set<Color> SwDoc::GetDocColors() const sal_uInt16 pAttribs[] = {RES_CHRATR_COLOR, RES_CHRATR_HIGHLIGHT, RES_BACKGROUND}; for (sal_uInt16 nAttrib : pAttribs) { - const sal_uInt32 nCount = rPool.GetItemCount2(nAttrib); - for (sal_uInt32 j=0; j<nCount; j++) + for (const SfxPoolItem* pItem : rPool.GetItemSurrogates(nAttrib)) { - const SvxColorItem *pItem = static_cast<const SvxColorItem*>(rPool.GetItem2(nAttrib, j)); - if (pItem == nullptr) - continue; - Color aColor( pItem->GetValue() ); + auto pColorItem = static_cast<const SvxColorItem*>(pItem); + Color aColor( pColorItem->GetValue() ); if (COL_AUTO != aColor) aDocColors.insert(aColor); } diff --git a/sw/source/core/doc/doctxm.cxx b/sw/source/core/doc/doctxm.cxx index a116479520c3..6210e4b4b6a9 100644 --- a/sw/source/core/doc/doctxm.cxx +++ b/sw/source/core/doc/doctxm.cxx @@ -93,10 +93,9 @@ void SwDoc::GetTOIKeys(SwTOIKeyType eTyp, std::vector<OUString>& rArr, rArr.clear(); // Look up all Primary and Secondary via the Pool - const sal_uInt32 nMaxItems = GetAttrPool().GetItemCount2( RES_TXTATR_TOXMARK ); - for( sal_uInt32 i = 0; i < nMaxItems; ++i ) + for (const SfxPoolItem* pPoolItem : GetAttrPool().GetItemSurrogates(RES_TXTATR_TOXMARK)) { - const SwTOXMark* pItem = GetAttrPool().GetItem2( RES_TXTATR_TOXMARK, i ); + const SwTOXMark* pItem = dynamic_cast<const SwTOXMark*>(pPoolItem); if( !pItem ) continue; const SwTOXType* pTOXType = pItem->GetTOXType(); diff --git a/sw/source/core/doc/visiturl.cxx b/sw/source/core/doc/visiturl.cxx index 9a17df6b2010..1e284f1d8509 100644 --- a/sw/source/core/doc/visiturl.cxx +++ b/sw/source/core/doc/visiturl.cxx @@ -56,14 +56,13 @@ void SwURLStateChanged::Notify( SfxBroadcaster& , const SfxHint& rHint ) sBkmk = "#" + pIURL->GetMark(); bool bAction = false, bUnLockView = false; - sal_uInt32 nMaxItems = pDoc->GetAttrPool().GetItemCount2( RES_TXTATR_INETFMT ); - for( sal_uInt32 n = 0; n < nMaxItems; ++n ) + for (const SfxPoolItem* pItem : pDoc->GetAttrPool().GetItemSurrogates(RES_TXTATR_INETFMT)) { - const SwFormatINetFormat* pItem = pDoc->GetAttrPool().GetItem2(RES_TXTATR_INETFMT, n ); - if( pItem != nullptr && - ( pItem->GetValue() == sURL || ( !sBkmk.isEmpty() && pItem->GetValue() == sBkmk ))) + const SwFormatINetFormat* pFormatItem = dynamic_cast<const SwFormatINetFormat*>(pItem); + if( pFormatItem != nullptr && + ( pFormatItem->GetValue() == sURL || ( !sBkmk.isEmpty() && pFormatItem->GetValue() == sBkmk ))) { - const SwTextINetFormat* pTextAttr = pItem->GetTextINetFormat(); + const SwTextINetFormat* pTextAttr = pFormatItem->GetTextINetFormat(); if (pTextAttr != nullptr) { const SwTextNode* pTextNd = pTextAttr->GetpTextNode(); diff --git a/sw/source/core/docnode/node.cxx b/sw/source/core/docnode/node.cxx index 56c20dc229d0..db564aeec12f 100644 --- a/sw/source/core/docnode/node.cxx +++ b/sw/source/core/docnode/node.cxx @@ -670,14 +670,12 @@ const SwPageDesc* SwNode::FindPageDesc( size_t* pPgDescNdIdx ) const { SwFindNearestNode aInfo( *pNd ); // Over all Nodes of all PageDescs - sal_uInt32 i, nMaxItems = pDoc->GetAttrPool().GetItemCount2( RES_PAGEDESC ); - for( i = 0; i < nMaxItems; ++i ) + for (const SfxPoolItem* pItem : pDoc->GetAttrPool().GetItemSurrogates(RES_PAGEDESC)) { - const SfxPoolItem* pItem; - if( nullptr != (pItem = pDoc->GetAttrPool().GetItem2( RES_PAGEDESC, i ) ) && - static_cast<const SwFormatPageDesc*>(pItem)->GetDefinedIn() ) + auto pPageDescItem = dynamic_cast<const SwFormatPageDesc*>(pItem); + if( pPageDescItem && pPageDescItem->GetDefinedIn() ) { - const SwModify* pMod = static_cast<const SwFormatPageDesc*>(pItem)->GetDefinedIn(); + const SwModify* pMod = pPageDescItem->GetDefinedIn(); if( auto pContentNode = dynamic_cast<const SwContentNode*>( pMod) ) aInfo.CheckNode( *pContentNode ); else if( auto pFormat = dynamic_cast<const SwFormat*>( pMod) ) diff --git a/sw/source/core/edit/edfld.cxx b/sw/source/core/edit/edfld.cxx index 8b744bfd33b6..41a69ac6c9e1 100644 --- a/sw/source/core/edit/edfld.cxx +++ b/sw/source/core/edit/edfld.cxx @@ -179,15 +179,12 @@ static SwTextField* lcl_FindInputField( SwDoc* pDoc, SwField& rField ) && (static_cast<SwSetExpFieldType*>(rField.GetTyp())->GetType() & nsSwGetSetExpType::GSE_STRING))) { - const sal_uInt32 nMaxItems = - pDoc->GetAttrPool().GetItemCount2( RES_TXTATR_INPUTFIELD ); - for( sal_uInt32 n = 0; n < nMaxItems; ++n ) + for (const SfxPoolItem* pItem : pDoc->GetAttrPool().GetItemSurrogates(RES_TXTATR_INPUTFIELD)) { - const SfxPoolItem* pItem = nullptr; - if( nullptr != (pItem = pDoc->GetAttrPool().GetItem2( RES_TXTATR_INPUTFIELD, n ) ) - && static_cast<const SwFormatField*>(pItem)->GetField() == &rField ) + auto pFormatField = dynamic_cast<const SwFormatField*>(pItem); + if( pFormatField && pFormatField->GetField() == &rField ) { - pTField = const_cast<SwFormatField*>(static_cast<const SwFormatField*>(pItem))->GetTextField(); + pTField = const_cast<SwFormatField*>(pFormatField)->GetTextField(); break; } } @@ -195,15 +192,12 @@ static SwTextField* lcl_FindInputField( SwDoc* pDoc, SwField& rField ) else if( SwFieldIds::SetExp == rField.Which() && static_cast<SwSetExpField&>(rField).GetInputFlag() ) { - const sal_uInt32 nMaxItems = - pDoc->GetAttrPool().GetItemCount2( RES_TXTATR_FIELD ); - for( sal_uInt32 n = 0; n < nMaxItems; ++n ) + for (const SfxPoolItem* pItem : pDoc->GetAttrPool().GetItemSurrogates(RES_TXTATR_FIELD)) { - const SfxPoolItem* pItem = nullptr; - if( nullptr != (pItem = pDoc->GetAttrPool().GetItem2( RES_TXTATR_FIELD, n ) ) - && static_cast<const SwFormatField*>(pItem)->GetField() == &rField ) + auto pFormatField = dynamic_cast<const SwFormatField*>(pItem); + if( pFormatField && pFormatField->GetField() == &rField ) { - pTField = const_cast<SwFormatField*>(static_cast<const SwFormatField*>(pItem))->GetTextField(); + pTField = const_cast<SwFormatField*>(pFormatField)->GetTextField(); break; } } diff --git a/sw/source/core/fields/docufld.cxx b/sw/source/core/fields/docufld.cxx index 04b4f1c9657f..53e9097279eb 100644 --- a/sw/source/core/fields/docufld.cxx +++ b/sw/source/core/fields/docufld.cxx @@ -143,12 +143,10 @@ void SwPageNumberFieldType::ChangeExpansion( SwDoc* pDoc, { // check the flag since the layout NEVER sets it back const SfxItemPool &rPool = pDoc->GetAttrPool(); - sal_uInt32 nMaxItems = rPool.GetItemCount2( RES_PAGEDESC ); - for( sal_uInt32 n = 0; n < nMaxItems; ++n ) + for (const SfxPoolItem* pItem : rPool.GetItemSurrogates(RES_PAGEDESC)) { - const SwFormatPageDesc *pDesc; - if( nullptr != (pDesc = rPool.GetItem2( RES_PAGEDESC, n ) ) - && pDesc->GetNumOffset() && pDesc->GetDefinedIn() ) + auto pDesc = dynamic_cast<const SwFormatPageDesc*>(pItem); + if( pDesc && pDesc->GetNumOffset() && pDesc->GetDefinedIn() ) { const SwContentNode* pNd = dynamic_cast<const SwContentNode*>( pDesc->GetDefinedIn() ); if( pNd ) diff --git a/sw/source/core/layout/trvlfrm.cxx b/sw/source/core/layout/trvlfrm.cxx index 3abc0276ccac..86747c4901b8 100644 --- a/sw/source/core/layout/trvlfrm.cxx +++ b/sw/source/core/layout/trvlfrm.cxx @@ -1818,14 +1818,12 @@ sal_uInt16 SwFrame::GetVirtPageNum() const const SwPageFrame *pVirtPage = nullptr; const SwFrame *pFrame = nullptr; const SfxItemPool &rPool = pPage->GetFormat()->GetDoc()->GetAttrPool(); - sal_uInt32 nMaxItems = rPool.GetItemCount2( RES_PAGEDESC ); - for( sal_uInt32 n = 0; n < nMaxItems; ++n ) + for (const SfxPoolItem* pItem : rPool.GetItemSurrogates(RES_PAGEDESC)) { - const SfxPoolItem* pItem = rPool.GetItem2( RES_PAGEDESC, n ); - if ( nullptr == pItem ) + const SwFormatPageDesc *pDesc = dynamic_cast<const SwFormatPageDesc*>(pItem); + if ( !pDesc ) continue; - const SwFormatPageDesc *pDesc = static_cast<const SwFormatPageDesc*>(pItem); if ( pDesc->GetNumOffset() && pDesc->GetDefinedIn() ) { const SwModify *pMod = pDesc->GetDefinedIn(); diff --git a/sw/source/core/unocore/unostyle.cxx b/sw/source/core/unocore/unostyle.cxx index 95ad63c1af03..2dfc44ef08c3 100644 --- a/sw/source/core/unocore/unostyle.cxx +++ b/sw/source/core/unocore/unostyle.cxx @@ -3739,20 +3739,23 @@ SwAutoStylesEnumImpl::SwAutoStylesEnumImpl( SwDoc* pInitDoc, IStyleAccess::SwAut { std::set< std::pair< sal_uInt16, text::RubyAdjust > > aRubyMap; SwAttrPool& rAttrPool = pDoc->GetAttrPool(); - sal_uInt32 nCount = rAttrPool.GetItemCount2( RES_TXTATR_CJK_RUBY ); - for ( sal_uInt32 nI = 0; nI < nCount; ++nI ) + // do this in two phases otherwise we invalidate the iterators when we insert into the pool + std::vector<const SwFormatRuby*> vRubyItems; + for (const SfxPoolItem* pItem : rAttrPool.GetItemSurrogates(RES_TXTATR_CJK_RUBY)) { - const SwFormatRuby* pItem = rAttrPool.GetItem2( RES_TXTATR_CJK_RUBY, nI ); - if ( pItem && pItem->GetTextRuby() ) + auto pRubyItem = dynamic_cast<const SwFormatRuby*>(pItem); + if ( pRubyItem && pRubyItem->GetTextRuby() ) + vRubyItems.push_back(pRubyItem); + } + for (const SwFormatRuby* pRubyItem : vRubyItems) + { + std::pair< sal_uInt16, text::RubyAdjust > aPair( pRubyItem->GetPosition(), pRubyItem->GetAdjustment() ); + if ( aRubyMap.insert( aPair ).second ) { - std::pair< sal_uInt16, text::RubyAdjust > aPair( pItem->GetPosition(), pItem->GetAdjustment() ); - if ( aRubyMap.insert( aPair ).second ) - { - std::shared_ptr<SfxItemSet> pItemSet( new SfxItemSet( rAttrPool, svl::Items<RES_TXTATR_CJK_RUBY, RES_TXTATR_CJK_RUBY>{} ) ); - pItemSet->Put( *pItem ); - mAutoStyles.push_back( pItemSet ); - } + std::shared_ptr<SfxItemSet> pItemSet( new SfxItemSet( rAttrPool, svl::Items<RES_TXTATR_CJK_RUBY, RES_TXTATR_CJK_RUBY>{} ) ); + pItemSet->Put( *pRubyItem ); + mAutoStyles.push_back( pItemSet ); } } } diff --git a/sw/source/core/view/vprint.cxx b/sw/source/core/view/vprint.cxx index 4cff1e47f00a..8f0600d59a1d 100644 --- a/sw/source/core/view/vprint.cxx +++ b/sw/source/core/view/vprint.cxx @@ -632,13 +632,11 @@ void SwViewShell::PrtOle2( SwDoc *pDoc, const SwViewOption *pOpt, const SwPrintD /// Check if the DocNodesArray contains fields. bool SwViewShell::IsAnyFieldInDoc() const { - const SfxPoolItem* pItem; - sal_uInt32 nMaxItems = mxDoc->GetAttrPool().GetItemCount2( RES_TXTATR_FIELD ); - for( sal_uInt32 n = 0; n < nMaxItems; ++n ) + for (const SfxPoolItem* pItem : mxDoc->GetAttrPool().GetItemSurrogates(RES_TXTATR_FIELD)) { - if( nullptr != (pItem = mxDoc->GetAttrPool().GetItem2( RES_TXTATR_FIELD, n ))) + auto pFormatField = dynamic_cast<const SwFormatField*>(pItem); + if(pFormatField) { - const SwFormatField* pFormatField = static_cast<const SwFormatField*>(pItem); const SwTextField* pTextField = pFormatField->GetTextField(); if( pTextField && pTextField->GetTextNode().GetNodes().IsDocNodes() ) { @@ -647,12 +645,11 @@ bool SwViewShell::IsAnyFieldInDoc() const } } - nMaxItems = mxDoc->GetAttrPool().GetItemCount2( RES_TXTATR_INPUTFIELD ); - for( sal_uInt32 n = 0; n < nMaxItems; ++n ) + for (const SfxPoolItem* pItem : mxDoc->GetAttrPool().GetItemSurrogates(RES_TXTATR_INPUTFIELD)) { - if( nullptr != (pItem = mxDoc->GetAttrPool().GetItem2( RES_TXTATR_INPUTFIELD, n ))) + const SwFormatField* pFormatField = dynamic_cast<const SwFormatField*>(pItem); + if(pFormatField) { - const SwFormatField* pFormatField = static_cast<const SwFormatField*>(pItem); const SwTextField* pTextField = pFormatField->GetTextField(); if( pTextField && pTextField->GetTextNode().GetNodes().IsDocNodes() ) { diff --git a/sw/source/filter/html/htmlflywriter.cxx b/sw/source/filter/html/htmlflywriter.cxx index 3ff39a940422..54051a63b8bf 100644 --- a/sw/source/filter/html/htmlflywriter.cxx +++ b/sw/source/filter/html/htmlflywriter.cxx @@ -2096,15 +2096,14 @@ void SwHTMLWriter::AddLinkTarget( const OUString& rURL ) void SwHTMLWriter::CollectLinkTargets() { - const SwFormatINetFormat* pINetFormat; const SwTextINetFormat* pTextAttr; - sal_uInt32 n, nMaxItems = m_pDoc->GetAttrPool().GetItemCount2( RES_TXTATR_INETFMT ); - for( n = 0; n < nMaxItems; ++n ) + for (const SfxPoolItem* pItem : m_pDoc->GetAttrPool().GetItemSurrogates(RES_TXTATR_INETFMT)) { + auto pINetFormat = dynamic_cast<const SwFormatINetFormat*>(pItem); const SwTextNode* pTextNd; - if( nullptr != ( pINetFormat = m_pDoc->GetAttrPool().GetItem2( RES_TXTATR_INETFMT, n ) ) && + if( pINetFormat && nullptr != ( pTextAttr = pINetFormat->GetTextINetFormat()) && nullptr != ( pTextNd = pTextAttr->GetpTextNode() ) && pTextNd->GetNodes().IsDocNodes() ) @@ -2113,12 +2112,10 @@ void SwHTMLWriter::CollectLinkTargets() } } - const SwFormatURL *pURL; - nMaxItems = m_pDoc->GetAttrPool().GetItemCount2( RES_URL ); - for( n = 0; n < nMaxItems; ++n ) + for (const SfxPoolItem* pItem : m_pDoc->GetAttrPool().GetItemSurrogates(RES_URL)) { - if( nullptr != (pURL = m_pDoc->GetAttrPool().GetItem2( - RES_URL, n ) ) ) + auto pURL = dynamic_cast<const SwFormatURL*>(pItem); + if( pURL ) { AddLinkTarget( pURL->GetURL() ); const ImageMap *pIMap = pURL->GetMap(); diff --git a/sw/source/filter/writer/writer.cxx b/sw/source/filter/writer/writer.cxx index cd4c1f1e56aa..8b5c2406b181 100644 --- a/sw/source/filter/writer/writer.cxx +++ b/sw/source/filter/writer/writer.cxx @@ -409,10 +409,8 @@ void Writer::AddFontItems_( SfxItemPool& rPool, sal_uInt16 nW ) if( nullptr != ( pFont = static_cast<const SvxFontItem*>(rPool.GetPoolDefaultItem( nW ))) ) AddFontItem( rPool, *pFont ); - sal_uInt32 nMaxItem = rPool.GetItemCount2( nW ); - for( sal_uInt32 nGet = 0; nGet < nMaxItem; ++nGet ) - if( nullptr != (pFont = static_cast<const SvxFontItem*>(rPool.GetItem2( nW, nGet ))) ) - AddFontItem( rPool, *pFont ); + for (const SfxPoolItem* pItem : rPool.GetItemSurrogates(nW)) + AddFontItem( rPool, *static_cast<const SvxFontItem*>(pItem) ); } void Writer::AddFontItem( SfxItemPool& rPool, const SvxFontItem& rFont ) diff --git a/sw/source/filter/ww8/rtfexport.cxx b/sw/source/filter/ww8/rtfexport.cxx index 494c26c2dafa..b2b06a77443b 100644 --- a/sw/source/filter/ww8/rtfexport.cxx +++ b/sw/source/filter/ww8/rtfexport.cxx @@ -747,10 +747,9 @@ ErrCode RtfExport::ExportDocument_Impl() // protected section in the document. { const SfxItemPool& rPool = m_pDoc->GetAttrPool(); - sal_uInt32 const nMaxItem = rPool.GetItemCount2(RES_PROTECT); - for (sal_uInt32 n = 0; n < nMaxItem; ++n) + for (const SfxPoolItem* pItem2 : rPool.GetItemSurrogates(RES_PROTECT)) { - auto pProtect = rPool.GetItem2(RES_PROTECT, n); + auto pProtect = dynamic_cast<const SvxProtectItem*>(pItem2); if (pProtect && pProtect->IsContentProtected()) { Strm().WriteCharPtr(OOO_STRING_SVTOOLS_RTF_FORMPROT); @@ -1182,7 +1181,6 @@ void RtfExport::OutColorTable() { // Build the table from rPool since the colors provided to // RtfAttributeOutput callbacks are too late. - sal_uInt32 nMaxItem; const SfxItemPool& rPool = m_pDoc->GetAttrPool(); // MSO Word uses a default color table with 16 colors (which is used e.g. for highlighting) @@ -1209,28 +1207,25 @@ void RtfExport::OutColorTable() InsColor(pCol->GetValue()); if ((pCol = rPool.GetPoolDefaultItem(RES_CHRATR_COLOR))) InsColor(pCol->GetValue()); - nMaxItem = rPool.GetItemCount2(RES_CHRATR_COLOR); - for (sal_uInt32 n = 0; n < nMaxItem; ++n) + for (const SfxPoolItem* pItem : rPool.GetItemSurrogates(RES_CHRATR_COLOR)) { - if ((pCol = rPool.GetItem2(RES_CHRATR_COLOR, n))) + if ((pCol = dynamic_cast<const SvxColorItem*>(pItem))) InsColor(pCol->GetValue()); } auto pUnder = GetDfltAttr(RES_CHRATR_UNDERLINE); InsColor(pUnder->GetColor()); - nMaxItem = rPool.GetItemCount2(RES_CHRATR_UNDERLINE); - for (sal_uInt32 n = 0; n < nMaxItem; ++n) + for (const SfxPoolItem* pItem : rPool.GetItemSurrogates(RES_CHRATR_UNDERLINE)) { - if ((pUnder = rPool.GetItem2(RES_CHRATR_UNDERLINE, n))) + if ((pUnder = dynamic_cast<const SvxUnderlineItem*>(pItem))) InsColor(pUnder->GetColor()); } auto pOver = GetDfltAttr(RES_CHRATR_OVERLINE); InsColor(pOver->GetColor()); - nMaxItem = rPool.GetItemCount2(RES_CHRATR_OVERLINE); - for (sal_uInt32 n = 0; n < nMaxItem; ++n) + for (const SfxPoolItem* pItem : rPool.GetItemSurrogates(RES_CHRATR_OVERLINE)) { - if ((pOver = rPool.GetItem2(RES_CHRATR_OVERLINE, n))) + if ((pOver = dynamic_cast<const SvxOverlineItem*>(pItem))) InsColor(pOver->GetColor()); } } @@ -1246,10 +1241,9 @@ void RtfExport::OutColorTable() { InsColor(pBackground->GetColor()); } - nMaxItem = rPool.GetItemCount2(*pIds); - for (sal_uInt32 n = 0; n < nMaxItem; ++n) + for (const SfxPoolItem* pItem : rPool.GetItemSurrogates(*pIds)) { - if ((pBackground = static_cast<const SvxBrushItem*>(rPool.GetItem2(*pIds, n)))) + if ((pBackground = static_cast<const SvxBrushItem*>(pItem))) { InsColor(pBackground->GetColor()); } @@ -1264,10 +1258,9 @@ void RtfExport::OutColorTable() { InsColor(pShadow->GetColor()); } - nMaxItem = rPool.GetItemCount2(RES_SHADOW); - for (sal_uInt32 n = 0; n < nMaxItem; ++n) + for (const SfxPoolItem* pItem : rPool.GetItemSurrogates(RES_SHADOW)) { - if (nullptr != (pShadow = rPool.GetItem2(RES_SHADOW, n))) + if ((pShadow = dynamic_cast<const SvxShadowItem*>(pItem))) { InsColor(pShadow->GetColor()); } @@ -1279,10 +1272,9 @@ void RtfExport::OutColorTable() const SvxBoxItem* pBox; if (nullptr != (pBox = rPool.GetPoolDefaultItem(RES_BOX))) InsColorLine(*pBox); - nMaxItem = rPool.GetItemCount2(RES_BOX); - for (sal_uInt32 n = 0; n < nMaxItem; ++n) + for (const SfxPoolItem* pItem : rPool.GetItemSurrogates(RES_BOX)) { - if (nullptr != (pBox = rPool.GetItem2(RES_BOX, n))) + if ((pBox = dynamic_cast<const SvxBoxItem*>(pItem))) InsColorLine(*pBox); } } @@ -1291,20 +1283,18 @@ void RtfExport::OutColorTable() const SvxBoxItem* pCharBox; if ((pCharBox = rPool.GetPoolDefaultItem(RES_CHRATR_BOX))) InsColorLine(*pCharBox); - nMaxItem = rPool.GetItemCount2(RES_CHRATR_BOX); - for (sal_uInt32 n = 0; n < nMaxItem; ++n) + for (const SfxPoolItem* pItem : rPool.GetItemSurrogates(RES_CHRATR_BOX)) { - if ((pCharBox = rPool.GetItem2(RES_CHRATR_BOX, n))) + if ((pCharBox = dynamic_cast<const SvxBoxItem*>(pItem))) InsColorLine(*pCharBox); } } // TextFrame or paragraph background solid fill. - nMaxItem = rPool.GetItemCount2(XATTR_FILLCOLOR); - for (sal_uInt32 i = 0; i < nMaxItem; ++i) + for (const SfxPoolItem* pItem : rPool.GetItemSurrogates(XATTR_FILLCOLOR)) { - if (auto pItem = rPool.GetItem2(XATTR_FILLCOLOR, i)) - InsColor(pItem->GetColorValue()); + if (auto pColorItem = dynamic_cast<const XFillColorItem*>(pItem)) + InsColor(pColorItem->GetColorValue()); } for (std::size_t n = 0; n < m_aColTable.size(); ++n) diff --git a/sw/source/filter/ww8/wrtw8sty.cxx b/sw/source/filter/ww8/wrtw8sty.cxx index e4e24952f763..8725e7474278 100644 --- a/sw/source/filter/ww8/wrtw8sty.cxx +++ b/sw/source/filter/ww8/wrtw8sty.cxx @@ -867,15 +867,11 @@ void wwFontHelper::InitFontTable(const SwDoc& rDoc) const sal_uInt16 aTypes[] = { RES_CHRATR_FONT, RES_CHRATR_CJK_FONT, RES_CHRATR_CTL_FONT, 0 }; for (const sal_uInt16* pId = aTypes; *pId; ++pId) { - sal_uInt32 const nMaxItem = rPool.GetItemCount2( *pId ); - for (sal_uInt32 nGet = 0; nGet < nMaxItem; ++nGet) + for (const SfxPoolItem* pItem : rPool.GetItemSurrogates(*pId)) { - pFont = static_cast<const SvxFontItem*>(rPool.GetItem2( *pId, nGet )); - if (nullptr != pFont) - { - GetId(wwFont(pFont->GetFamilyName(), pFont->GetPitch(), - pFont->GetFamily(), pFont->GetCharSet())); - } + pFont = static_cast<const SvxFontItem*>(pItem); + GetId(wwFont(pFont->GetFamilyName(), pFont->GetPitch(), + pFont->GetFamily(), pFont->GetCharSet())); } } } diff --git a/sw/source/filter/ww8/wrtww8.cxx b/sw/source/filter/ww8/wrtww8.cxx index 5b66db607afb..07ba40b373fd 100644 --- a/sw/source/filter/ww8/wrtww8.cxx +++ b/sw/source/filter/ww8/wrtww8.cxx @@ -3086,10 +3086,9 @@ void MSWordExportBase::AddLinkTarget(const OUString& rURL) void MSWordExportBase::CollectOutlineBookmarks(const SwDoc &rDoc) { - sal_uInt32 nMaxItems = rDoc.GetAttrPool().GetItemCount2(RES_TXTATR_INETFMT); - for (sal_uInt32 n = 0; n < nMaxItems; ++n) + for (const SfxPoolItem* pItem : rDoc.GetAttrPool().GetItemSurrogates(RES_TXTATR_INETFMT)) { - const SwFormatINetFormat* pINetFormat = rDoc.GetAttrPool().GetItem2(RES_TXTATR_INETFMT, n); + auto pINetFormat = dynamic_cast<const SwFormatINetFormat*>(pItem); if (!pINetFormat) continue; @@ -3107,10 +3106,9 @@ void MSWordExportBase::CollectOutlineBookmarks(const SwDoc &rDoc) AddLinkTarget( pINetFormat->GetValue() ); } - nMaxItems = rDoc.GetAttrPool().GetItemCount2( RES_URL ); - for (sal_uInt32 n = 0; n < nMaxItems; ++n) + for (const SfxPoolItem* pItem : rDoc.GetAttrPool().GetItemSurrogates(RES_URL)) { - const SwFormatURL *pURL = rDoc.GetAttrPool().GetItem2(RES_URL, n); + auto pURL = dynamic_cast<const SwFormatURL*>(pItem); if (!pURL) continue; diff --git a/sw/source/filter/xml/xmlexp.cxx b/sw/source/filter/xml/xmlexp.cxx index 5c21ff3a4309..da4020083fbc 100644 --- a/sw/source/filter/xml/xmlexp.cxx +++ b/sw/source/filter/xml/xmlexp.cxx @@ -154,24 +154,18 @@ ErrCode SwXMLExport::exportDoc( enum XMLTokenEnum eClass ) for( int j=0; j < nWhichIds; ++j ) { const sal_uInt16 nWhichId = aWhichIds[j]; - const sal_uInt32 nItems = rPool.GetItemCount2( nWhichId ); - for( sal_uInt32 i = 0; i < nItems; ++i ) + for (const SfxPoolItem* pItem : rPool.GetItemSurrogates(nWhichId)) { - const SfxPoolItem* const pItem = rPool.GetItem2( nWhichId , i ); - if( nullptr != pItem ) + auto pUnknown = dynamic_cast<const SvXMLAttrContainerItem*>( pItem ); + OSL_ENSURE( pUnknown, "illegal attribute container item" ); + if( pUnknown && (pUnknown->GetAttrCount() > 0) ) { - const SvXMLAttrContainerItem *pUnknown = - dynamic_cast<const SvXMLAttrContainerItem*>( pItem ); - OSL_ENSURE( pUnknown, "illegal attribute container item" ); - if( pUnknown && (pUnknown->GetAttrCount() > 0) ) + sal_uInt16 nIdx = pUnknown->GetFirstNamespaceIndex(); + while( USHRT_MAX != nIdx ) { - sal_uInt16 nIdx = pUnknown->GetFirstNamespaceIndex(); - while( USHRT_MAX != nIdx ) - { - GetNamespaceMap_().Add( pUnknown->GetPrefix( nIdx ), - pUnknown->GetNamespace( nIdx ) ); - nIdx = pUnknown->GetNextNamespaceIndex( nIdx ); - } + GetNamespaceMap_().Add( pUnknown->GetPrefix( nIdx ), + pUnknown->GetNamespace( nIdx ) ); + nIdx = pUnknown->GetNextNamespaceIndex( nIdx ); } } } diff --git a/sw/source/filter/xml/xmlfonte.cxx b/sw/source/filter/xml/xmlfonte.cxx index 8c11072327f2..7b92a8c43419 100644 --- a/sw/source/filter/xml/xmlfonte.cxx +++ b/sw/source/filter/xml/xmlfonte.cxx @@ -43,7 +43,6 @@ SwXMLFontAutoStylePool_Impl::SwXMLFontAutoStylePool_Impl(SwXMLExport& _rExport, RES_CHRATR_CTL_FONT }; const SfxItemPool& rPool = _rExport.getDoc()->GetAttrPool(); - const SfxPoolItem* pItem; for(sal_uInt16 nWhichId : aWhichIds) { const SvxFontItem& rFont = @@ -51,17 +50,12 @@ SwXMLFontAutoStylePool_Impl::SwXMLFontAutoStylePool_Impl(SwXMLExport& _rExport, Add( rFont.GetFamilyName(), rFont.GetStyleName(), rFont.GetFamily(), rFont.GetPitch(), rFont.GetCharSet() ); - sal_uInt32 nItems = rPool.GetItemCount2( nWhichId ); - for( sal_uInt32 j = 0; j < nItems; ++j ) + for (const SfxPoolItem* pItem : rPool.GetItemSurrogates(nWhichId)) { - if( nullptr != (pItem = rPool.GetItem2( nWhichId, j ) ) ) - { - const SvxFontItem *pFont = - static_cast<const SvxFontItem *>(pItem); - Add( pFont->GetFamilyName(), pFont->GetStyleName(), - pFont->GetFamily(), pFont->GetPitch(), - pFont->GetCharSet() ); - } + auto pFont = static_cast<const SvxFontItem *>(pItem); + Add( pFont->GetFamilyName(), pFont->GetStyleName(), + pFont->GetFamily(), pFont->GetPitch(), + pFont->GetCharSet() ); } } auto const & pDocument = _rExport.getDoc(); |