summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Grandin <noelgrandin@gmail.com>2021-09-21 20:33:22 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2021-09-22 09:07:44 +0200
commit8dda0309871b371e056c0c0f308203e2a8a0306f (patch)
treeae9e33fbcad805ff5b63cd5103303ea429f8b38a
parent743057da7a20d9eebad939f2baecb1e225920b56 (diff)
no need to allocate these SfxItemSet on the heap
Change-Id: I21b34386d3f2f408da329b0e5888566cbb126d0e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122402 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r--sw/source/filter/ascii/parasc.cxx46
-rw-r--r--sw/source/filter/html/htmlatr.cxx82
-rw-r--r--sw/source/filter/html/wrthtml.hxx3
-rw-r--r--sw/source/filter/xml/xmlfmt.cxx34
4 files changed, 83 insertions, 82 deletions
diff --git a/sw/source/filter/ascii/parasc.cxx b/sw/source/filter/ascii/parasc.cxx
index 23bc58230f62..e57a03557637 100644
--- a/sw/source/filter/ascii/parasc.cxx
+++ b/sw/source/filter/ascii/parasc.cxx
@@ -56,7 +56,7 @@ class SwASCIIParser
std::unique_ptr<char[]> m_pArr;
const SwAsciiOptions& m_rOpt;
SwAsciiOptions m_usedAsciiOptions;
- std::unique_ptr<SfxItemSet> m_pItemSet;
+ std::optional<SfxItemSet> m_oItemSet;
tools::Long m_nFileSize;
SvtScriptType m_nScript;
bool m_bNewDoc;
@@ -115,7 +115,7 @@ SwASCIIParser::SwASCIIParser(SwDoc& rD, const SwPaM& rCursor, SvStream& rIn, boo
m_pPam.reset(new SwPaM(*rCursor.GetPoint()));
m_pArr.reset(new char[ASC_BUFFLEN + 2]);
- m_pItemSet = std::make_unique<SfxItemSet>(
+ m_oItemSet.emplace(
m_rDoc.GetAttrPool(),
svl::Items<RES_CHRATR_FONT, RES_CHRATR_LANGUAGE, RES_CHRATR_CJK_FONT,
RES_CHRATR_CJK_LANGUAGE, RES_CHRATR_CTL_FONT, RES_CHRATR_CTL_LANGUAGE>);
@@ -124,11 +124,11 @@ SwASCIIParser::SwASCIIParser(SwDoc& rD, const SwPaM& rCursor, SvStream& rIn, boo
if (m_rOpt.GetLanguage())
{
SvxLanguageItem aLang(m_rOpt.GetLanguage(), RES_CHRATR_LANGUAGE);
- m_pItemSet->Put(aLang);
+ m_oItemSet->Put(aLang);
aLang.SetWhich(RES_CHRATR_CJK_LANGUAGE);
- m_pItemSet->Put(aLang);
+ m_oItemSet->Put(aLang);
aLang.SetWhich(RES_CHRATR_CTL_LANGUAGE);
- m_pItemSet->Put(aLang);
+ m_oItemSet->Put(aLang);
}
if (m_rOpt.GetFontName().isEmpty())
return;
@@ -138,11 +138,11 @@ SwASCIIParser::SwASCIIParser(SwDoc& rD, const SwPaM& rCursor, SvStream& rIn, boo
aTextFont = m_rDoc.getIDocumentDeviceAccess().getPrinter(false)->GetFontMetric(aTextFont);
SvxFontItem aFont( aTextFont.GetFamilyType(), aTextFont.GetFamilyName(),
OUString(), aTextFont.GetPitch(), aTextFont.GetCharSet(), RES_CHRATR_FONT );
- m_pItemSet->Put(aFont);
+ m_oItemSet->Put(aFont);
aFont.SetWhich(RES_CHRATR_CJK_FONT);
- m_pItemSet->Put(aFont);
+ m_oItemSet->Put(aFont);
aFont.SetWhich(RES_CHRATR_CTL_FONT);
- m_pItemSet->Put(aFont);
+ m_oItemSet->Put(aFont);
}
// Calling the parser
@@ -179,25 +179,25 @@ ErrCode SwASCIIParser::CallParser()
ErrCode nError = ReadChars();
- if (m_pItemSet)
+ if (m_oItemSet)
{
// set only the attribute, for scanned scripts.
if (!(SvtScriptType::LATIN & m_nScript))
{
- m_pItemSet->ClearItem(RES_CHRATR_FONT);
- m_pItemSet->ClearItem(RES_CHRATR_LANGUAGE);
+ m_oItemSet->ClearItem(RES_CHRATR_FONT);
+ m_oItemSet->ClearItem(RES_CHRATR_LANGUAGE);
}
if (!(SvtScriptType::ASIAN & m_nScript))
{
- m_pItemSet->ClearItem(RES_CHRATR_CJK_FONT);
- m_pItemSet->ClearItem(RES_CHRATR_CJK_LANGUAGE);
+ m_oItemSet->ClearItem(RES_CHRATR_CJK_FONT);
+ m_oItemSet->ClearItem(RES_CHRATR_CJK_LANGUAGE);
}
if (!(SvtScriptType::COMPLEX & m_nScript))
{
- m_pItemSet->ClearItem(RES_CHRATR_CTL_FONT);
- m_pItemSet->ClearItem(RES_CHRATR_CTL_LANGUAGE);
+ m_oItemSet->ClearItem(RES_CHRATR_CTL_FONT);
+ m_oItemSet->ClearItem(RES_CHRATR_CTL_LANGUAGE);
}
- if (m_pItemSet->Count())
+ if (m_oItemSet->Count())
{
if (m_bNewDoc)
{
@@ -224,16 +224,16 @@ ErrCode SwASCIIParser::CallParser()
{
const SfxPoolItem *pItem;
if (SfxItemState::SET
- == m_pItemSet->GetItemState(*pWhichIds, false, &pItem))
+ == m_oItemSet->GetItemState(*pWhichIds, false, &pItem))
{
pColl->SetFormatAttr( *pItem );
- m_pItemSet->ClearItem(*pWhichIds);
+ m_oItemSet->ClearItem(*pWhichIds);
}
++pWhichIds;
}
}
- if (m_pItemSet->Count())
- m_rDoc.SetDefault(*m_pItemSet);
+ if (m_oItemSet->Count())
+ m_rDoc.SetDefault(*m_oItemSet);
}
else if( pInsPam )
{
@@ -245,10 +245,10 @@ ErrCode SwASCIIParser::CallParser()
// !!!!!
OSL_ENSURE( false, "Have to change - hard attr. to para. style" );
- m_rDoc.getIDocumentContentOperations().InsertItemSet(*pInsPam, *m_pItemSet);
+ m_rDoc.getIDocumentContentOperations().InsertItemSet(*pInsPam, *m_oItemSet);
}
}
- m_pItemSet.reset();
+ m_oItemSet.reset();
}
pInsPam.reset();
@@ -513,7 +513,7 @@ void SwASCIIParser::InsertText( const OUString& rStr )
{
m_rDoc.getIDocumentContentOperations().InsertString(*m_pPam, rStr);
- if (m_pItemSet && g_pBreakIt
+ if (m_oItemSet && g_pBreakIt
&& m_nScript != (SvtScriptType::LATIN | SvtScriptType::ASIAN | SvtScriptType::COMPLEX))
m_nScript |= g_pBreakIt->GetAllScriptsOfText(rStr);
}
diff --git a/sw/source/filter/html/htmlatr.cxx b/sw/source/filter/html/htmlatr.cxx
index 43edfe64ce0b..2c9e54a49d62 100644
--- a/sw/source/filter/html/htmlatr.cxx
+++ b/sw/source/filter/html/htmlatr.cxx
@@ -201,7 +201,7 @@ namespace {
struct SwHTMLTextCollOutputInfo
{
OString aToken; // End token to be output
- std::unique_ptr<SfxItemSet> pItemSet; // hard attribute
+ std::optional<SfxItemSet> moItemSet; // hard attribute
bool bInNumberBulletList; // in an enumerated list;
bool bParaPossible; // a </P> may be output additionally
@@ -291,22 +291,22 @@ SwHTMLFormatInfo::SwHTMLFormatInfo( const SwFormat *pF, SwDoc *pDoc, SwDoc *pTem
if( pReferenceFormat || nDeep==0 )
{
- pItemSet.reset( new SfxItemSet( *pFormat->GetAttrSet().GetPool(),
- pFormat->GetAttrSet().GetRanges() ) );
+ moItemSet.emplace( *pFormat->GetAttrSet().GetPool(),
+ pFormat->GetAttrSet().GetRanges() );
// if the differences to a different style are supposed to be
// written, hard attribute is necessary. This is always true
// for styles that are not derived from HTML-tag styles.
- pItemSet->Set( pFormat->GetAttrSet() );
+ moItemSet->Set( pFormat->GetAttrSet() );
if( pReferenceFormat )
- SwHTMLWriter::SubtractItemSet( *pItemSet, pReferenceFormat->GetAttrSet(), true );
+ SwHTMLWriter::SubtractItemSet( *moItemSet, pReferenceFormat->GetAttrSet(), true );
// delete ItemSet that is empty straight away. This will save work
// later on
- if( !pItemSet->Count() )
+ if( !moItemSet->Count() )
{
- pItemSet.reset();
+ moItemSet.reset();
}
}
@@ -355,10 +355,10 @@ SwHTMLFormatInfo::SwHTMLFormatInfo( const SwFormat *pF, SwDoc *pDoc, SwDoc *pTem
const SfxPoolItem& rSet = pFormat->GetFormatAttr( aWhichIds[nSet][i] );
if( rSet != rRef )
{
- if( !pItemSet )
- pItemSet.reset( new SfxItemSet( *pFormat->GetAttrSet().GetPool(),
- pFormat->GetAttrSet().GetRanges() ) );
- pItemSet->Put( rSet );
+ if( !moItemSet )
+ moItemSet.emplace( *pFormat->GetAttrSet().GetPool(),
+ pFormat->GetAttrSet().GetRanges() );
+ moItemSet->Put( rSet );
}
}
}
@@ -385,10 +385,10 @@ SwHTMLFormatInfo::SwHTMLFormatInfo( const SwFormat *pF, SwDoc *pDoc, SwDoc *pTem
LanguageType eLang = rLang.GetLanguage();
if( eLang != eDfltLang )
{
- if( !pItemSet )
- pItemSet.reset( new SfxItemSet( *pFormat->GetAttrSet().GetPool(),
- pFormat->GetAttrSet().GetRanges() ) );
- pItemSet->Put( rLang );
+ if( !moItemSet )
+ moItemSet.emplace( *pFormat->GetAttrSet().GetPool(),
+ pFormat->GetAttrSet().GetRanges() );
+ moItemSet->Put( rLang );
}
static const sal_uInt16 aWhichIds[3] =
@@ -402,10 +402,10 @@ SwHTMLFormatInfo::SwHTMLFormatInfo( const SwFormat *pF, SwDoc *pDoc, SwDoc *pTem
static_cast<const SvxLanguageItem&>(pFormat->GetFormatAttr(i));
if( rTmpLang.GetLanguage() != eLang )
{
- if( !pItemSet )
- pItemSet.reset( new SfxItemSet( *pFormat->GetAttrSet().GetPool(),
- pFormat->GetAttrSet().GetRanges() ) );
- pItemSet->Put( rTmpLang );
+ if( !moItemSet )
+ moItemSet.emplace( *pFormat->GetAttrSet().GetPool(),
+ pFormat->GetAttrSet().GetRanges() );
+ moItemSet->Put( rTmpLang );
}
}
}
@@ -562,19 +562,19 @@ static void OutHTML_SwFormat( Writer& rWrt, const SwFormat& rFormat,
}
// If necessary, take the hard attribute from the style
- if( pFormatInfo->pItemSet )
+ if( pFormatInfo->moItemSet )
{
- OSL_ENSURE(!rInfo.pItemSet, "Where does this ItemSet come from?");
- rInfo.pItemSet.reset(new SfxItemSet( *pFormatInfo->pItemSet ));
+ OSL_ENSURE(!rInfo.moItemSet, "Where does this ItemSet come from?");
+ rInfo.moItemSet.emplace( *pFormatInfo->moItemSet );
}
// additionally, add the hard attribute from the paragraph
if( pNodeItemSet )
{
- if (rInfo.pItemSet)
- rInfo.pItemSet->Put( *pNodeItemSet );
+ if (rInfo.moItemSet)
+ rInfo.moItemSet->Put( *pNodeItemSet );
else
- rInfo.pItemSet.reset(new SfxItemSet( *pNodeItemSet ));
+ rInfo.moItemSet.emplace( *pNodeItemSet );
}
// we will need the lower spacing of the paragraph later on
@@ -595,11 +595,11 @@ static void OutHTML_SwFormat( Writer& rWrt, const SwFormat& rFormat,
else
aULSpaceItem.SetUpper( rHWrt.m_nHeaderFooterSpace );
- if (!rInfo.pItemSet)
+ if (!rInfo.moItemSet)
{
- rInfo.pItemSet.reset(new SfxItemSet(*rFormat.GetAttrSet().GetPool(), svl::Items<RES_UL_SPACE, RES_UL_SPACE>));
+ rInfo.moItemSet.emplace(*rFormat.GetAttrSet().GetPool(), svl::Items<RES_UL_SPACE, RES_UL_SPACE>);
}
- rInfo.pItemSet->Put( aULSpaceItem );
+ rInfo.moItemSet->Put( aULSpaceItem );
}
rHWrt.m_bOutHeader = false;
rHWrt.m_bOutFooter = false;
@@ -619,8 +619,8 @@ static void OutHTML_SwFormat( Writer& rWrt, const SwFormat& rFormat,
const SfxPoolItem* pAdjItem = nullptr;
const SfxPoolItem* pItem;
- if( rInfo.pItemSet &&
- SfxItemState::SET == rInfo.pItemSet->GetItemState( RES_PARATR_ADJUST,
+ if( rInfo.moItemSet &&
+ SfxItemState::SET == rInfo.moItemSet->GetItemState( RES_PARATR_ADJUST,
false, &pItem ) )
{
pAdjItem = pItem;
@@ -812,12 +812,12 @@ static void OutHTML_SwFormat( Writer& rWrt, const SwFormat& rFormat,
}
LanguageType eLang;
- if (rInfo.pItemSet)
- eLang = static_cast<const SvxLanguageItem&>(rInfo.pItemSet->Get(SwHTMLWriter::GetLangWhichIdFromScript(rHWrt.m_nCSS1Script))).GetLanguage();
+ if (rInfo.moItemSet)
+ eLang = static_cast<const SvxLanguageItem&>(rInfo.moItemSet->Get(SwHTMLWriter::GetLangWhichIdFromScript(rHWrt.m_nCSS1Script))).GetLanguage();
else
eLang = rHWrt.m_eLang;
- if( rInfo.pItemSet )
+ if( rInfo.moItemSet )
{
static const sal_uInt16 aWhichIds[3] = { RES_CHRATR_LANGUAGE, RES_CHRATR_CJK_LANGUAGE, RES_CHRATR_CTL_LANGUAGE };
@@ -825,10 +825,10 @@ static void OutHTML_SwFormat( Writer& rWrt, const SwFormat& rFormat,
{
// export language if it differs from the default language only.
const SfxPoolItem *pTmpItem;
- if( SfxItemState::SET == rInfo.pItemSet->GetItemState( i,
+ if( SfxItemState::SET == rInfo.moItemSet->GetItemState( i,
true, &pTmpItem ) &&
static_cast<const SvxLanguageItem *>(pTmpItem)->GetLanguage() == eLang )
- rInfo.pItemSet->ClearItem( i );
+ rInfo.moItemSet->ClearItem( i );
}
}
@@ -918,9 +918,9 @@ static void OutHTML_SwFormat( Writer& rWrt, const SwFormat& rFormat,
pTextNd->GetAnyFormatColl().GetPoolFormatId(), pTextNd->GetText()) > -1;
// and now, if necessary, the STYLE options
- if (rHWrt.m_bCfgOutStyles && rInfo.pItemSet)
+ if (rHWrt.m_bCfgOutStyles && rInfo.moItemSet)
{
- OutCSS1_ParaTagStyleOpt( rWrt, *rInfo.pItemSet );
+ OutCSS1_ParaTagStyleOpt( rWrt, *rInfo.moItemSet );
}
if (rHWrt.m_bParaDotLeaders) {
@@ -1652,9 +1652,9 @@ void HTMLEndPosLst::InsertNoScript( const SfxPoolItem& rItem,
// attributes
InsertItem( rItem, nStart, nEnd );
}
- if( pFormatInfo->pItemSet )
+ if( pFormatInfo->moItemSet )
{
- Insert( *pFormatInfo->pItemSet, nStart, nEnd,
+ Insert( *pFormatInfo->moItemSet, nStart, nEnd,
rFormatInfos, true, bParaAttrs );
}
}
@@ -2263,9 +2263,9 @@ Writer& OutHTML_SwTextNode( Writer& rWrt, const SwContentNode& rNode )
rHTMLWrt.m_xDfltColor, rHTMLWrt.m_bCfgOutStyles,
rHTMLWrt.GetHTMLMode(), aFullText,
rHTMLWrt.m_aScriptTextStyles );
- if( aFormatInfo.pItemSet )
+ if( aFormatInfo.moItemSet )
{
- aEndPosLst.Insert( *aFormatInfo.pItemSet, 0, nEnd + nOffset,
+ aEndPosLst.Insert( *aFormatInfo.moItemSet, 0, nEnd + nOffset,
rHTMLWrt.m_CharFormatInfos, false, true );
}
diff --git a/sw/source/filter/html/wrthtml.hxx b/sw/source/filter/html/wrthtml.hxx
index 0af1003fa8d0..5365214b504d 100644
--- a/sw/source/filter/html/wrthtml.hxx
+++ b/sw/source/filter/html/wrthtml.hxx
@@ -24,6 +24,7 @@
#include <set>
#include <string_view>
#include <map>
+#include <optional>
#include <com/sun/star/container/XIndexContainer.hpp>
#include <com/sun/star/form/XForm.hpp>
@@ -213,7 +214,7 @@ struct SwHTMLFormatInfo
OString aToken; // the token to output
OUString aClass; // the class to output
- std::unique_ptr<SfxItemSet> pItemSet; // the attribute set to output
+ std::optional<SfxItemSet> moItemSet; // the attribute set to output
sal_Int32 nLeftMargin; // some default values for
sal_Int32 nRightMargin; // paragraph styles
diff --git a/sw/source/filter/xml/xmlfmt.cxx b/sw/source/filter/xml/xmlfmt.cxx
index 9dffac99c8c2..fe5e2174e7e4 100644
--- a/sw/source/filter/xml/xmlfmt.cxx
+++ b/sw/source/filter/xml/xmlfmt.cxx
@@ -384,7 +384,7 @@ public:
class SwXMLItemSetStyleContext_Impl : public SvXMLStyleContext
{
OUString m_sMasterPageName;
- std::unique_ptr<SfxItemSet> m_pItemSet;
+ std::optional<SfxItemSet> m_oItemSet;
SwXMLTextStyleContext_Impl *m_pTextStyle;
SvXMLStylesContext &m_rStyles;
@@ -419,7 +419,7 @@ public:
sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList >& AttrList ) override;
// The item set may be empty!
- SfxItemSet *GetItemSet() { return m_pItemSet.get(); }
+ SfxItemSet *GetItemSet() { return m_oItemSet ? &*m_oItemSet : nullptr; }
bool HasMasterPageName() const { return m_bHasMasterPageName; }
@@ -519,7 +519,7 @@ SvXMLImportContext *SwXMLItemSetStyleContext_Impl::CreateItemSetContext(
sal_Int32 nElement,
const uno::Reference< xml::sax::XFastAttributeList > & xAttrList )
{
- OSL_ENSURE( !m_pItemSet,
+ OSL_ENSURE( !m_oItemSet,
"SwXMLItemSetStyleContext_Impl::CreateItemSetContext: item set exists" );
SvXMLImportContext *pContext = nullptr;
@@ -530,29 +530,29 @@ SvXMLImportContext *SwXMLItemSetStyleContext_Impl::CreateItemSetContext(
switch( GetFamily() )
{
case XmlStyleFamily::TABLE_TABLE:
- m_pItemSet.reset( new SfxItemSet( rItemPool, aTableSetRange ) );
+ m_oItemSet.emplace( rItemPool, aTableSetRange );
break;
case XmlStyleFamily::TABLE_COLUMN:
- m_pItemSet.reset( new SfxItemSet( rItemPool, svl::Items<RES_FRM_SIZE, RES_FRM_SIZE> ) );
+ m_oItemSet.emplace( rItemPool, svl::Items<RES_FRM_SIZE, RES_FRM_SIZE> );
break;
case XmlStyleFamily::TABLE_ROW:
- m_pItemSet.reset( new SfxItemSet( rItemPool, aTableLineSetRange ) );
+ m_oItemSet.emplace( rItemPool, aTableLineSetRange );
break;
case XmlStyleFamily::TABLE_CELL:
- m_pItemSet.reset( new SfxItemSet( rItemPool, aTableBoxSetRange ) );
+ m_oItemSet.emplace( rItemPool, aTableBoxSetRange );
break;
default:
OSL_ENSURE( false,
"SwXMLItemSetStyleContext_Impl::CreateItemSetContext: unknown family" );
break;
}
- if( m_pItemSet )
+ if( m_oItemSet )
pContext = GetSwImport().CreateTableItemImportContext(
nElement, xAttrList, GetFamily(),
- *m_pItemSet );
+ *m_oItemSet );
if( !pContext )
{
- m_pItemSet.reset();
+ m_oItemSet.reset();
}
return pContext;
@@ -636,15 +636,15 @@ void SwXMLItemSetStyleContext_Impl::ConnectPageDesc()
if( !pPageDesc )
return;
- if( !m_pItemSet )
+ if( !m_oItemSet )
{
SfxItemPool& rItemPool = pDoc->GetAttrPool();
- m_pItemSet.reset( new SfxItemSet( rItemPool, aTableSetRange ) );
+ m_oItemSet.emplace( rItemPool, aTableSetRange );
}
const SfxPoolItem *pItem;
std::unique_ptr<SwFormatPageDesc> pFormatPageDesc;
- if( SfxItemState::SET == m_pItemSet->GetItemState( RES_PAGEDESC, false,
+ if( SfxItemState::SET == m_oItemSet->GetItemState( RES_PAGEDESC, false,
&pItem ) )
{
if( static_cast<const SwFormatPageDesc *>(pItem)->GetPageDesc() != pPageDesc )
@@ -656,7 +656,7 @@ void SwXMLItemSetStyleContext_Impl::ConnectPageDesc()
if( pFormatPageDesc )
{
pFormatPageDesc->RegisterToPageDesc( *pPageDesc );
- m_pItemSet->Put( *pFormatPageDesc );
+ m_oItemSet->Put( *pFormatPageDesc );
}
}
@@ -672,15 +672,15 @@ bool SwXMLItemSetStyleContext_Impl::ResolveDataStyleName()
// if the key is valid, insert Item into ItemSet
if( -1 != nFormat )
{
- if( !m_pItemSet )
+ if( !m_oItemSet )
{
SwDoc *pDoc = SwImport::GetDocFromXMLImport( GetSwImport() );
SfxItemPool& rItemPool = pDoc->GetAttrPool();
- m_pItemSet.reset( new SfxItemSet( rItemPool, aTableBoxSetRange ) );
+ m_oItemSet.emplace( rItemPool, aTableBoxSetRange );
}
SwTableBoxNumFormat aNumFormatItem(nFormat);
- m_pItemSet->Put(aNumFormatItem);
+ m_oItemSet->Put(aNumFormatItem);
}
// now resolved