diff --git a/include/svl/poolitem.hxx b/include/svl/poolitem.hxx index 4f71bc871a58..bdfb814e3c0a 100644 --- a/include/svl/poolitem.hxx +++ b/include/svl/poolitem.hxx @@ -33,6 +33,7 @@ #include #include #include +#include class IntlWrapper; @@ -638,7 +639,7 @@ private: // that specific Item (see other derivations) class SVL_DLLPUBLIC DefaultItemInstanceManager : public ItemInstanceManager { - std::unordered_set maRegistered; + std::unordered_map> maRegistered; public: DefaultItemInstanceManager(const std::size_t aClassHash) diff --git a/svl/source/items/poolitem.cxx b/svl/source/items/poolitem.cxx index 491c30a7f50a..a9db94057d8a 100644 --- a/svl/source/items/poolitem.cxx +++ b/svl/source/items/poolitem.cxx @@ -503,16 +503,25 @@ void listAllocatedSfxPoolItems() const SfxPoolItem* DefaultItemInstanceManager::find(const SfxPoolItem& rItem) const { - for (const auto& rCandidate : maRegistered) - if (rCandidate->Which() == rItem.Which() && *rCandidate == rItem) + auto it = maRegistered.find(rItem.Which()); + if (it == maRegistered.end()) + return nullptr; + for (const auto& rCandidate : it->second) + if (*rCandidate == rItem) return rCandidate; return nullptr; } -void DefaultItemInstanceManager::add(const SfxPoolItem& rItem) { maRegistered.insert(&rItem); } +void DefaultItemInstanceManager::add(const SfxPoolItem& rItem) +{ + maRegistered[rItem.Which()].insert(&rItem); +} -void DefaultItemInstanceManager::remove(const SfxPoolItem& rItem) { maRegistered.erase(&rItem); } +void DefaultItemInstanceManager::remove(const SfxPoolItem& rItem) +{ + maRegistered[rItem.Which()].erase(&rItem); +} ItemInstanceManager* SfxPoolItem::getItemInstanceManager() const { return nullptr; }