diff options
author | Noel Grandin <noel@peralex.com> | 2021-04-12 13:07:56 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2021-04-12 17:45:19 +0200 |
commit | fe23e35ba5705d7f51f69c3f4e7ccd6c5b575a6b (patch) | |
tree | bace053173689b600f8b6a75145e07cc2b933743 /sw/source | |
parent | 27911b0455d8dcc08a0702372492a6ce00250cb7 (diff) |
less copying in SfxItemPropertyMap::getPropertyEntries
we can just expose the map now, and avoid copying all the properties
Change-Id: Icb22975508582268dfa96e41eb98ac01e7f51317
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113982
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'sw/source')
-rw-r--r-- | sw/source/core/access/accpara.cxx | 18 | ||||
-rw-r--r-- | sw/source/core/unocore/unocrsrhelper.cxx | 8 | ||||
-rw-r--r-- | sw/source/core/unocore/unosrch.cxx | 451 | ||||
-rw-r--r-- | sw/source/core/unocore/unostyle.cxx | 18 |
4 files changed, 191 insertions, 304 deletions
diff --git a/sw/source/core/access/accpara.cxx b/sw/source/core/access/accpara.cxx index f8e9ac6d925c..e4008dc10a41 100644 --- a/sw/source/core/access/accpara.cxx +++ b/sw/source/core/access/accpara.cxx @@ -1488,17 +1488,16 @@ void SwAccessibleParagraph::_getDefaultAttributesImpl( { const SfxItemPropertyMap& rPropMap = aSwMapProvider.GetPropertySet( PROPERTY_MAP_TEXT_CURSOR )->getPropertyMap(); - PropertyEntryVector_t aPropertyEntries = rPropMap.getPropertyEntries(); - for ( const auto& rProp : aPropertyEntries ) + for ( const auto& rPair : rPropMap.getPropertyEntries() ) { - const SfxPoolItem* pItem = pSet->GetItem( rProp.nWID ); + const SfxPoolItem* pItem = pSet->GetItem( rPair.second.nWID ); if ( pItem ) { uno::Any aVal; - pItem->QueryValue( aVal, rProp.nMemberId ); + pItem->QueryValue( aVal, rPair.second.nMemberId ); PropertyValue rPropVal; - rPropVal.Name = rProp.sName; + rPropVal.Name = rPair.first; rPropVal.Value = aVal; rPropVal.Handle = -1; rPropVal.State = beans::PropertyState_DEFAULT_VALUE; @@ -1681,19 +1680,18 @@ void SwAccessibleParagraph::_getRunAttributesImpl( const SfxItemPropertyMap& rPropMap = aSwMapProvider.GetPropertySet( PROPERTY_MAP_TEXT_CURSOR )->getPropertyMap(); - PropertyEntryVector_t aPropertyEntries = rPropMap.getPropertyEntries(); - for ( const auto& rProp : aPropertyEntries ) + for ( const auto& rPair : rPropMap.getPropertyEntries() ) { const SfxPoolItem* pItem( nullptr ); // #i82637# - Found character attributes, whose value equals the value of // the corresponding default character attributes, are excluded. - if ( aSet.GetItemState( rProp.nWID, true, &pItem ) == SfxItemState::SET ) + if ( aSet.GetItemState( rPair.second.nWID, true, &pItem ) == SfxItemState::SET ) { uno::Any aVal; - pItem->QueryValue( aVal, rProp.nMemberId ); + pItem->QueryValue( aVal, rPair.second.nMemberId ); PropertyValue rPropVal; - rPropVal.Name = rProp.sName; + rPropVal.Name = rPair.first; rPropVal.Value = aVal; rPropVal.Handle = -1; rPropVal.State = PropertyState_DIRECT_VALUE; diff --git a/sw/source/core/unocore/unocrsrhelper.cxx b/sw/source/core/unocore/unocrsrhelper.cxx index 1abb9f207cf2..fdcdb0f76c1e 100644 --- a/sw/source/core/unocore/unocrsrhelper.cxx +++ b/sw/source/core/unocore/unocrsrhelper.cxx @@ -317,13 +317,13 @@ static uno::Any GetParaListAutoFormat(SwTextNode const& rNode) SfxItemPropertyMap const& rMap(rPropSet.getPropertyMap()); std::vector<beans::NamedValue> props; // have to iterate the map, not the item set? - for (auto const& rEntry : rMap.getPropertyEntries()) + for (auto const& rPair : rMap.getPropertyEntries()) { - if (rPropSet.getPropertyState(rEntry, rSet) == PropertyState_DIRECT_VALUE) + if (rPropSet.getPropertyState(rPair.second, rSet) == PropertyState_DIRECT_VALUE) { Any value; - rPropSet.getPropertyValue(rEntry, rSet, value); - props.emplace_back(rEntry.sName, value); + rPropSet.getPropertyValue(rPair.second, rSet, value); + props.emplace_back(OUString(rPair.first), value); } } return uno::makeAny(comphelper::containerToSequence(props)); diff --git a/sw/source/core/unocore/unosrch.cxx b/sw/source/core/unocore/unosrch.cxx index cb826a2b439b..0c4e6a50aee7 100644 --- a/sw/source/core/unocore/unosrch.cxx +++ b/sw/source/core/unocore/unosrch.cxx @@ -40,8 +40,8 @@ using namespace ::com::sun::star; class SwSearchProperties_Impl { - std::unique_ptr<std::unique_ptr<beans::PropertyValue>[]> pValueArr; - const PropertyEntryVector_t aPropertyEntries; + std::unordered_map<OUString, beans::PropertyValue> maValues; + SfxItemPropertyMap mrMap; SwSearchProperties_Impl(const SwSearchProperties_Impl&) = delete; SwSearchProperties_Impl& operator=(const SwSearchProperties_Impl&) = delete; @@ -60,48 +60,32 @@ public: }; SwSearchProperties_Impl::SwSearchProperties_Impl() : - aPropertyEntries( aSwMapProvider.GetPropertySet(PROPERTY_MAP_TEXT_CURSOR)->getPropertyMap().getPropertyEntries() ) + mrMap( aSwMapProvider.GetPropertySet(PROPERTY_MAP_TEXT_CURSOR)->getPropertyMap() ) { - size_t nArrLen = aPropertyEntries.size(); - pValueArr.reset( new std::unique_ptr<beans::PropertyValue>[nArrLen] ); } void SwSearchProperties_Impl::SetProperties(const uno::Sequence< beans::PropertyValue >& aSearchAttribs) { //delete all existing values - for(size_t i = 0; i < aPropertyEntries.size(); ++i) - { - pValueArr[i].reset(); - } + maValues.clear(); for(const beans::PropertyValue& rSearchAttrib : aSearchAttribs) { const OUString& sName = rSearchAttrib.Name; - auto aIt = std::find_if(aPropertyEntries.begin(), aPropertyEntries.end(), - [&sName](const SfxItemPropertyNamedEntry& rProp) { return rProp.sName == sName; }); - if( aIt == aPropertyEntries.end() ) + if( !mrMap.hasPropertyByName(sName) ) throw beans::UnknownPropertyException(sName); - auto nIndex = static_cast<sal_uInt32>(std::distance(aPropertyEntries.begin(), aIt)); - pValueArr[nIndex].reset( new beans::PropertyValue(rSearchAttrib) ); + maValues[sName] = rSearchAttrib; } } uno::Sequence< beans::PropertyValue > SwSearchProperties_Impl::GetProperties() const { - sal_uInt32 nPropCount = 0; - for( size_t i = 0; i < aPropertyEntries.size(); i++) - if(pValueArr[i]) - nPropCount++; - - uno::Sequence< beans::PropertyValue > aRet(nPropCount); + uno::Sequence< beans::PropertyValue > aRet(maValues.size()); beans::PropertyValue* pProps = aRet.getArray(); - nPropCount = 0; - for(size_t i = 0; i < aPropertyEntries.size(); i++) + sal_Int32 nPropCount = 0; + for(auto const & rPair : maValues) { - if(pValueArr[i]) - { - pProps[nPropCount++] = *(pValueArr[i]); - } + pProps[nPropCount++] = rPair.second; } return aRet; } @@ -157,270 +141,177 @@ void SwSearchProperties_Impl::FillItemSet(SfxItemSet& rSet, bool bIsValueSearch) pCTLWeightItem, pShadowItem ; - PropertyEntryVector_t::const_iterator aIt = aPropertyEntries.begin(); - for(size_t i = 0; i < aPropertyEntries.size(); i++, ++aIt) + auto funcClone = [&rSet](sal_uInt16 nWID, std::unique_ptr<SfxPoolItem> & rpPoolItem) + { + if(!rpPoolItem) + rpPoolItem.reset(rSet.GetPool()->GetDefaultItem(nWID).Clone()); + return rpPoolItem.get(); + }; + for(auto const & rPair : maValues) { - if(pValueArr[i]) + SfxPoolItem* pTempItem = nullptr; + const SfxItemPropertySimpleEntry & rPropEntry = mrMap.getPropertyEntries().find(std::u16string_view(rPair.first))->second; + sal_uInt16 nWID = rPropEntry.nWID; + switch(nWID) { - SfxPoolItem* pTempItem = nullptr; - switch(aIt->nWID) - { - case RES_BOX: - if(!pBoxItem) - pBoxItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pBoxItem.get(); - break; - case RES_CHRATR_BOX: - if(!pCharBoxItem) - pCharBoxItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pCharBoxItem.get(); - break; - case RES_BREAK: - if(!pBreakItem) - pBreakItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pBreakItem.get(); - break; - case RES_CHRATR_AUTOKERN: - if(!pAutoKernItem) - pAutoKernItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pAutoKernItem.get(); - break; - case RES_CHRATR_BACKGROUND: - if(!pBrushItem) - pBrushItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pBrushItem.get(); - break; - case RES_CHRATR_CASEMAP: - if(!pCasemapItem) - pCasemapItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pCasemapItem.get(); - break; - case RES_CHRATR_COLOR: - if(!pCharColorItem) - pCharColorItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pCharColorItem.get(); - break; - case RES_CHRATR_CONTOUR: - if(!pContourItem) - pContourItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pContourItem.get(); - break; - case RES_CHRATR_CROSSEDOUT: - if(!pCrossedOutItem) - pCrossedOutItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pCrossedOutItem.get(); - break; - case RES_CHRATR_ESCAPEMENT: - if(!pEscItem) - pEscItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pEscItem.get(); - break; - case RES_CHRATR_BLINK: - if(!pBlinkItem) - pBlinkItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pBlinkItem.get(); - break; - case RES_CHRATR_FONT: - if(!pFontItem) - pFontItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pFontItem.get(); - break; - case RES_CHRATR_FONTSIZE: - if(!pFontSizeItem) - pFontSizeItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pFontSizeItem.get(); - break; - case RES_CHRATR_KERNING: - if(!pKernItem) - pKernItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pKernItem.get(); - break; - case RES_CHRATR_LANGUAGE: - if(!pLangItem) - pLangItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pLangItem.get(); - break; - case RES_CHRATR_NOHYPHEN: - if(!pNHyphItem) - pNHyphItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pNHyphItem.get(); - break; - case RES_CHRATR_POSTURE: - if(!pPostItem) - pPostItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pPostItem.get(); - break; - case RES_CHRATR_SHADOWED: - if(!pShadItem) - pShadItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pShadItem.get(); - break; - case RES_TXTATR_CHARFMT: - if(!pCharFormatItem) - pCharFormatItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pCharFormatItem.get(); - break; - case RES_CHRATR_UNDERLINE: - if(!pULineItem) - pULineItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pULineItem.get(); - break; - case RES_CHRATR_OVERLINE: - if(!pOLineItem) - pOLineItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pOLineItem.get(); - break; - case RES_CHRATR_WEIGHT: - if(!pWeightItem) - pWeightItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pWeightItem.get(); - break; - case RES_PARATR_DROP: - if(!pDropItem) - pDropItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pDropItem.get(); - break; - case RES_TXTATR_INETFMT: - if(!pInetItem) - pInetItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pInetItem.get(); - break; - case RES_PAGEDESC: - if(!pDescItem) - pDescItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pDescItem.get(); - break; - case RES_PARATR_ADJUST: - if(!pAdjItem) - pAdjItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pAdjItem.get(); - break; - case RES_BACKGROUND: - if(!pBackItem) - pBackItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pBackItem.get(); - break; - case RES_UL_SPACE: - if(!pULItem) - pULItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pULItem.get(); - break; - case RES_LR_SPACE: - if(!pLRItem) - pLRItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pLRItem.get(); - break; - case RES_KEEP: - if(!pKeepItem) - pKeepItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pKeepItem.get(); - break; - case RES_LINENUMBER: - if(!pLineNumItem) - pLineNumItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pLineNumItem.get(); - break; - case RES_PARATR_LINESPACING: - if(!pLineSpaceItem) - pLineSpaceItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pLineSpaceItem.get(); - break; - case RES_PARATR_REGISTER: - if(!pRegItem) - pRegItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pRegItem.get(); - break; - case RES_PARATR_SPLIT: - if(!pSplitItem) - pSplitItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pSplitItem.get(); - break; - case RES_PARATR_TABSTOP: - if(!pTabItem) - pTabItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pTabItem.get(); - break; - case RES_CHRATR_WORDLINEMODE: - if(!pWLineItem) - pWLineItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pWLineItem.get(); - break; - case RES_CHRATR_CJK_FONT: - if(!pFontCJKItem ) - pFontCJKItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pFontCJKItem.get(); - break; - case RES_CHRATR_CJK_FONTSIZE: - if(!pFontSizeCJKItem ) - pFontSizeCJKItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pFontSizeCJKItem.get(); - break; - case RES_CHRATR_CJK_LANGUAGE: - if(!pCJKLangItem ) - pCJKLangItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pCJKLangItem.get(); - break; - case RES_CHRATR_CJK_POSTURE: - if(!pCJKPostureItem ) - pCJKPostureItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pCJKPostureItem.get(); - break; - case RES_CHRATR_CJK_WEIGHT: - if(!pCJKWeightItem ) - pCJKWeightItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pCJKWeightItem.get(); - break; - case RES_CHRATR_CTL_FONT: - if(!pFontCTLItem ) - pFontCTLItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pFontCTLItem.get(); - break; - case RES_CHRATR_CTL_FONTSIZE: - if(!pFontSizeCTLItem ) - pFontSizeCTLItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pFontSizeCTLItem.get(); - break; - case RES_CHRATR_CTL_LANGUAGE: - if(!pCTLLangItem ) - pCTLLangItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pCTLLangItem.get(); - break; - case RES_CHRATR_CTL_POSTURE: - if(!pCTLPostureItem ) - pCTLPostureItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pCTLPostureItem.get(); - break; - case RES_CHRATR_CTL_WEIGHT: - if(!pCTLWeightItem ) - pCTLWeightItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pCTLWeightItem.get(); - break; - case RES_CHRATR_SHADOW: - if(!pShadowItem ) - pShadowItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone()); - pTempItem = pShadowItem.get(); - break; - } - if(pTempItem) + case RES_BOX: + pTempItem = funcClone(nWID, pBoxItem); + break; + case RES_CHRATR_BOX: + pTempItem = funcClone(nWID, pCharBoxItem); + break; + case RES_BREAK: + pTempItem = funcClone(nWID, pBreakItem); + break; + case RES_CHRATR_AUTOKERN: + pTempItem = funcClone(nWID, pAutoKernItem); + break; + case RES_CHRATR_BACKGROUND: + pTempItem = funcClone(nWID, pBrushItem); + break; + case RES_CHRATR_CASEMAP: + pTempItem = funcClone(nWID, pCasemapItem); + break; + case RES_CHRATR_COLOR: + pTempItem = funcClone(nWID, pCharColorItem); + break; + case RES_CHRATR_CONTOUR: + pTempItem = funcClone(nWID, pContourItem); + break; + case RES_CHRATR_CROSSEDOUT: + pTempItem = funcClone(nWID, pCrossedOutItem); + break; + case RES_CHRATR_ESCAPEMENT: + pTempItem = funcClone(nWID, pEscItem); + break; + case RES_CHRATR_BLINK: + pTempItem = funcClone(nWID, pBlinkItem); + break; + case RES_CHRATR_FONT: + pTempItem = funcClone(nWID, pFontItem); + break; + case RES_CHRATR_FONTSIZE: + pTempItem = funcClone(nWID, pFontSizeItem); + break; + case RES_CHRATR_KERNING: + pTempItem = funcClone(nWID, pKernItem); + break; + case RES_CHRATR_LANGUAGE: + pTempItem = funcClone(nWID, pLangItem); + break; + case RES_CHRATR_NOHYPHEN: + pTempItem = funcClone(nWID, pNHyphItem); + break; + case RES_CHRATR_POSTURE: + pTempItem = funcClone(nWID, pPostItem); + break; + case RES_CHRATR_SHADOWED: + pTempItem = funcClone(nWID, pShadItem); + break; + case RES_TXTATR_CHARFMT: + pTempItem = funcClone(nWID, pCharFormatItem); + break; + case RES_CHRATR_UNDERLINE: + pTempItem = funcClone(nWID, pULineItem); + break; + case RES_CHRATR_OVERLINE: + pTempItem = funcClone(nWID, pOLineItem); + break; + case RES_CHRATR_WEIGHT: + pTempItem = funcClone(nWID, pWeightItem); + break; + case RES_PARATR_DROP: + pTempItem = funcClone(nWID, pDropItem); + break; + case RES_TXTATR_INETFMT: + pTempItem = funcClone(nWID, pInetItem); + break; + case RES_PAGEDESC: + pTempItem = funcClone(nWID, pDescItem); + break; + case RES_PARATR_ADJUST: + pTempItem = funcClone(nWID, pAdjItem); + break; + case RES_BACKGROUND: + pTempItem = funcClone(nWID, pBackItem); + break; + case RES_UL_SPACE: + pTempItem = funcClone(nWID, pULItem); + break; + case RES_LR_SPACE: + pTempItem = funcClone(nWID, pLRItem); + break; + case RES_KEEP: + pTempItem = funcClone(nWID, pKeepItem); + break; + case RES_LINENUMBER: + pTempItem = funcClone(nWID, pLineNumItem); + break; + case RES_PARATR_LINESPACING: + pTempItem = funcClone(nWID, pLineSpaceItem); + break; + case RES_PARATR_REGISTER: + pTempItem = funcClone(nWID, pRegItem); + break; + case RES_PARATR_SPLIT: + pTempItem = funcClone(nWID, pSplitItem); + break; + case RES_PARATR_TABSTOP: + pTempItem = funcClone(nWID, pTabItem); + break; + case RES_CHRATR_WORDLINEMODE: + pTempItem = funcClone(nWID, pWLineItem); + break; + case RES_CHRATR_CJK_FONT: + pTempItem = funcClone(nWID, pFontCJKItem); + break; + case RES_CHRATR_CJK_FONTSIZE: + pTempItem = funcClone(nWID, pFontSizeCJKItem); + break; + case RES_CHRATR_CJK_LANGUAGE: + pTempItem = funcClone(nWID, pCJKLangItem); + break; + case RES_CHRATR_CJK_POSTURE: + pTempItem = funcClone(nWID, pCJKPostureItem); + break; + case RES_CHRATR_CJK_WEIGHT: + pTempItem = funcClone(nWID, pCJKWeightItem); + break; + case RES_CHRATR_CTL_FONT: + pTempItem = funcClone(nWID, pFontCTLItem); + break; + case RES_CHRATR_CTL_FONTSIZE: + pTempItem = funcClone(nWID, pFontSizeCTLItem); + break; + case RES_CHRATR_CTL_LANGUAGE: + pTempItem = funcClone(nWID, pCTLLangItem); + break; + case RES_CHRATR_CTL_POSTURE: + pTempItem = funcClone(nWID, pCTLPostureItem); + break; + case RES_CHRATR_CTL_WEIGHT: + pTempItem = funcClone(nWID, pCTLWeightItem); + break; + case RES_CHRATR_SHADOW: + pTempItem = funcClone(nWID, pShadowItem); + break; + } + if(pTempItem) + { + if(bIsValueSearch) { - if(bIsValueSearch) - { - pTempItem->PutValue(pValueArr[i]->Value, aIt->nMemberId); - rSet.Put(*pTempItem); - } - else - rSet.InvalidateItem( pTempItem->Which() ); + pTempItem->PutValue(rPair.second.Value, rPropEntry.nMemberId); + rSet.Put(*pTempItem); } + else + rSet.InvalidateItem( pTempItem->Which() ); } } } bool SwSearchProperties_Impl::HasAttributes() const { - for(size_t i = 0; i < aPropertyEntries.size(); i++) - if(pValueArr[i]) - return true; - return false; + return !maValues.empty(); } SwXTextSearch::SwXTextSearch() : diff --git a/sw/source/core/unocore/unostyle.cxx b/sw/source/core/unocore/unostyle.cxx index 9c0e9d5ff968..3c70dc9eaa93 100644 --- a/sw/source/core/unocore/unostyle.cxx +++ b/sw/source/core/unocore/unostyle.cxx @@ -1138,17 +1138,16 @@ namespace { class SwStyleProperties_Impl { - const PropertyEntryVector_t aPropertyEntries; + const SfxItemPropertyMap& mrMap; std::map<OUString, uno::Any> m_vPropertyValues; public: explicit SwStyleProperties_Impl(const SfxItemPropertyMap& rMap) - : aPropertyEntries(rMap.getPropertyEntries()) + : mrMap(rMap) { } - bool AllowsKey(const OUString& rName) + bool AllowsKey(std::u16string_view rName) { - return std::any_of(aPropertyEntries.begin(), aPropertyEntries.end(), - [rName] (const SfxItemPropertyNamedEntry& rEntry) {return rName == rEntry.sName;} ); + return mrMap.hasPropertyByName(rName); } bool SetProperty(const OUString& rName, const uno::Any& rValue) { @@ -4269,7 +4268,6 @@ uno::Sequence< beans::PropertyValue > SwXAutoStyle::getProperties() const SfxItemPropertySet* pPropSet = aSwMapProvider.GetPropertySet(nPropSetId); const SfxItemPropertyMap &rMap = pPropSet->getPropertyMap(); - PropertyEntryVector_t aPropVector = rMap.getPropertyEntries(); SfxItemSet& rSet = *mpSet; SfxItemIter aIter(rSet); @@ -4280,13 +4278,13 @@ uno::Sequence< beans::PropertyValue > SwXAutoStyle::getProperties() // TODO: Optimize - and fix! the old iteration filled each WhichId // only once but there are more properties than WhichIds - for( const auto& rProp : aPropVector ) + for( const auto& rPair : rMap.getPropertyEntries() ) { - if ( rProp.nWID == nWID ) + if ( rPair.second.nWID == nWID ) { beans::PropertyValue aPropertyValue; - aPropertyValue.Name = rProp.sName; - pItem->QueryValue( aPropertyValue.Value, rProp.nMemberId ); + aPropertyValue.Name = rPair.first; + pItem->QueryValue( aPropertyValue.Value, rPair.second.nMemberId ); aPropertyVector.push_back( aPropertyValue ); } } |