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();

Reply via email to