summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2019-04-17 15:19:25 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2019-04-20 08:02:25 +0200
commitec7ba61a6164c805f5a71b077715b7e1521a2d62 (patch)
tree4d4f3fb1ad960465897754601b0842c78db564bf /sw
parent7d58f26bf4dbeb4e138c2a91f039d8bc7fa00f0c (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.cxx24
-rw-r--r--sw/source/core/doc/DocumentFieldsManager.cxx18
-rw-r--r--sw/source/core/doc/doc.cxx44
-rw-r--r--sw/source/core/doc/docbasic.cxx8
-rw-r--r--sw/source/core/doc/docfld.cxx22
-rw-r--r--sw/source/core/doc/docfmt.cxx19
-rw-r--r--sw/source/core/doc/doctxm.cxx5
-rw-r--r--sw/source/core/doc/visiturl.cxx11
-rw-r--r--sw/source/core/docnode/node.cxx10
-rw-r--r--sw/source/core/edit/edfld.cxx22
-rw-r--r--sw/source/core/fields/docufld.cxx8
-rw-r--r--sw/source/core/layout/trvlfrm.cxx8
-rw-r--r--sw/source/core/unocore/unostyle.cxx25
-rw-r--r--sw/source/core/view/vprint.cxx15
-rw-r--r--sw/source/filter/html/htmlflywriter.cxx15
-rw-r--r--sw/source/filter/writer/writer.cxx6
-rw-r--r--sw/source/filter/ww8/rtfexport.cxx48
-rw-r--r--sw/source/filter/ww8/wrtw8sty.cxx12
-rw-r--r--sw/source/filter/ww8/wrtww8.cxx10
-rw-r--r--sw/source/filter/xml/xmlexp.cxx24
-rw-r--r--sw/source/filter/xml/xmlfonte.cxx16
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();