sc/inc/formulacell.hxx | 4 ++-- sc/source/core/data/formulacell.cxx | 18 ++++++++++-------- 2 files changed, 12 insertions(+), 10 deletions(-)
New commits: commit 7d5beaabeac4e474512337b086690257daeefc96 Author: Noel Grandin <[email protected]> AuthorDate: Thu Sep 1 21:45:18 2022 +0200 Commit: Noel Grandin <[email protected]> CommitDate: Fri Sep 2 19:05:50 2022 +0200 no need to use unique_ptr for this map in sc::FormulaGroupAreaListener map is already a node based data structure, so the values will stay in the same place in memory Change-Id: If9bc02d702fd5ba9994e606744b63494fbe20edd Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139237 Tested-by: Jenkins Reviewed-by: Noel Grandin <[email protected]> diff --git a/sc/inc/formulacell.hxx b/sc/inc/formulacell.hxx index ddd12a04e6ac..e4bc41772e0e 100644 --- a/sc/inc/formulacell.hxx +++ b/sc/inc/formulacell.hxx @@ -34,6 +34,7 @@ #include "formulalogger.hxx" #include "formularesult.hxx" #include "tokenarray.hxx" +#include "grouparealistener.hxx" namespace sc { @@ -44,7 +45,6 @@ struct RefUpdateInsertTabContext; struct RefUpdateDeleteTabContext; struct RefUpdateMoveTabContext; class CompileFormulaContext; -class FormulaGroupAreaListener; class UpdatedRangeNames; } @@ -65,7 +65,7 @@ struct AreaListenerKey bool operator < ( const AreaListenerKey& r ) const; }; -typedef std::map<AreaListenerKey, std::unique_ptr<sc::FormulaGroupAreaListener>> AreaListenersType; +typedef std::map<AreaListenerKey, sc::FormulaGroupAreaListener> AreaListenersType; struct SC_DLLPUBLIC ScFormulaCellGroup { diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx index 0bad3e6b73d1..9754ab340188 100644 --- a/sc/source/core/data/formulacell.cxx +++ b/sc/source/core/data/formulacell.cxx @@ -553,23 +553,25 @@ sc::FormulaGroupAreaListener* ScFormulaCellGroup::getAreaListener( if (it == m_AreaListeners.end() || m_AreaListeners.key_comp()(aKey, it->first)) { // Insert a new one. - it = m_AreaListeners.insert( - it, std::make_pair(aKey, std::make_unique<sc::FormulaGroupAreaListener>( - rRange, (*ppTopCell)->GetDocument(), (*ppTopCell)->aPos, mnLength, bStartFixed, bEndFixed))); + it = m_AreaListeners.emplace_hint( + it, std::piecewise_construct, + std::forward_as_tuple(aKey), + std::forward_as_tuple( + rRange, (*ppTopCell)->GetDocument(), (*ppTopCell)->aPos, mnLength, bStartFixed, bEndFixed)); } - return it->second.get(); + return &it->second; } void ScFormulaCellGroup::endAllGroupListening( ScDocument& rDoc ) { - for (const auto& rEntry : m_AreaListeners) + for (auto& rEntry : m_AreaListeners) { - sc::FormulaGroupAreaListener *const pListener = rEntry.second.get(); - ScRange aListenRange = pListener->getListeningRange(); + sc::FormulaGroupAreaListener& rListener = rEntry.second; + ScRange aListenRange = rListener.getListeningRange(); // This "always listen" special range is never grouped. bool bGroupListening = (aListenRange != BCA_LISTEN_ALWAYS); - rDoc.EndListeningArea(aListenRange, bGroupListening, pListener); + rDoc.EndListeningArea(aListenRange, bGroupListening, &rListener); } m_AreaListeners.clear();
