sc/inc/formulacell.hxx              |   20 ++++++++--
 sc/source/core/data/formulacell.cxx |   68 +++++++++++++-----------------------
 sc/source/filter/excel/frmbase.cxx  |   10 ++---
 sc/source/filter/inc/formel.hxx     |    2 -
 4 files changed, 47 insertions(+), 53 deletions(-)

New commits:
commit b68e82b17998ff7ce7e5b08419ecad6b54153566
Author:     Noel Grandin <noelgran...@gmail.com>
AuthorDate: Sat Sep 4 16:57:04 2021 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Sat Sep 4 22:00:17 2021 +0200

    no need to allocate RangeListType with unique_ptr
    
    Change-Id: I18681749501bb6750912c79b9ff04f5ffc4f0364
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/121644
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/sc/source/filter/excel/frmbase.cxx 
b/sc/source/filter/excel/frmbase.cxx
index 35bba553997e..d7144c5edea2 100644
--- a/sc/source/filter/excel/frmbase.cxx
+++ b/sc/source/filter/excel/frmbase.cxx
@@ -55,7 +55,7 @@ void ScRangeListTabs::Append( const ScAddress& aSRD, SCTAB 
nTab )
     {
         // No entry for this table yet.  Insert a new one.
         std::pair<TabRangeType::iterator, bool> r =
-            m_TabRanges.insert(std::make_pair(nTab, 
std::make_unique<RangeListType>()));
+            m_TabRanges.insert(std::make_pair(nTab, RangeListType()));
 
         if (!r.second)
             // Insertion failed.
@@ -63,7 +63,7 @@ void ScRangeListTabs::Append( const ScAddress& aSRD, SCTAB 
nTab )
 
         itr = r.first;
     }
-    itr->second->push_back(ScRange(a.Col(),a.Row(),a.Tab()));
+    itr->second.push_back(ScRange(a.Col(),a.Row(),a.Tab()));
 }
 
 void ScRangeListTabs::Append( const ScRange& aCRD, SCTAB nTab )
@@ -113,7 +113,7 @@ void ScRangeListTabs::Append( const ScRange& aCRD, SCTAB 
nTab )
     {
         // No entry for this table yet.  Insert a new one.
         std::pair<TabRangeType::iterator, bool> r =
-            m_TabRanges.insert(std::make_pair(nTab, 
std::make_unique<RangeListType>()));
+            m_TabRanges.insert(std::make_pair(nTab, RangeListType()));
 
         if (!r.second)
             // Insertion failed.
@@ -121,7 +121,7 @@ void ScRangeListTabs::Append( const ScRange& aCRD, SCTAB 
nTab )
 
         itr = r.first;
     }
-    itr->second->push_back(a);
+    itr->second.push_back(a);
 }
 
 const ScRange* ScRangeListTabs::First( SCTAB n )
@@ -133,7 +133,7 @@ const ScRange* ScRangeListTabs::First( SCTAB n )
         // No range list exists for this table.
         return nullptr;
 
-    const RangeListType& rList = *itr->second;
+    const RangeListType& rList = itr->second;
     maItrCur = rList.begin();
     maItrCurEnd = rList.end();
     return rList.empty() ? nullptr : &(*maItrCur);
diff --git a/sc/source/filter/inc/formel.hxx b/sc/source/filter/inc/formel.hxx
index 9af9158c9cfe..d9dcec6ec15b 100644
--- a/sc/source/filter/inc/formel.hxx
+++ b/sc/source/filter/inc/formel.hxx
@@ -54,7 +54,7 @@ enum FORMULA_TYPE
 class ScRangeListTabs
 {
     typedef ::std::vector<ScRange> RangeListType;
-    typedef ::std::map<SCTAB, std::unique_ptr<RangeListType>> TabRangeType;
+    typedef ::std::map<SCTAB, RangeListType> TabRangeType;
     TabRangeType m_TabRanges;
     RangeListType::const_iterator maItrCur;
     RangeListType::const_iterator maItrCurEnd;
commit 9484b56401b6f544eabb3ab9f91d9fecf95242e1
Author:     Noel Grandin <noelgran...@gmail.com>
AuthorDate: Sat Sep 4 15:11:13 2021 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Sat Sep 4 22:00:01 2021 +0200

    flatten ScFormulaCellGroup
    
    Change-Id: Ie33a6de78bd120f143da35ffc26af94178c734c3
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/121643
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/sc/inc/formulacell.hxx b/sc/inc/formulacell.hxx
index 19983961825d..b685bbbf7b35 100644
--- a/sc/inc/formulacell.hxx
+++ b/sc/inc/formulacell.hxx
@@ -19,6 +19,7 @@
 
 #pragma once
 
+#include <map>
 #include <memory>
 
 #include <formula/tokenarray.hxx>
@@ -51,12 +52,23 @@ class ScProgress;
 class ScTokenArray;
 enum class SvNumFormatType : sal_Int16;
 
-struct SC_DLLPUBLIC ScFormulaCellGroup
+struct AreaListenerKey
 {
-private:
-    struct Impl;
-    std::unique_ptr<Impl> mpImpl;
+    ScRange maRange;
+    bool mbStartFixed;
+    bool mbEndFixed;
+
+    AreaListenerKey( const ScRange& rRange, bool bStartFixed, bool bEndFixed ) 
:
+        maRange(rRange), mbStartFixed(bStartFixed), mbEndFixed(bEndFixed) {}
+
+    bool operator < ( const AreaListenerKey& r ) const;
+};
+
+typedef std::map<AreaListenerKey, 
std::unique_ptr<sc::FormulaGroupAreaListener>> AreaListenersType;
 
+struct SC_DLLPUBLIC ScFormulaCellGroup
+{
+    AreaListenersType m_AreaListeners;
 public:
 
     mutable size_t mnRefCount;
diff --git a/sc/source/core/data/formulacell.cxx 
b/sc/source/core/data/formulacell.cxx
index 7304ca033acd..e60768aadb99 100644
--- a/sc/source/core/data/formulacell.cxx
+++ b/sc/source/core/data/formulacell.cxx
@@ -478,49 +478,31 @@ void adjustDBRange(formula::FormulaToken* pToken, 
ScDocument& rNewDoc, const ScD
     pToken->SetIndex(pNewDBData->GetIndex());
 }
 
-struct AreaListenerKey
-{
-    ScRange maRange;
-    bool mbStartFixed;
-    bool mbEndFixed;
-
-    AreaListenerKey( const ScRange& rRange, bool bStartFixed, bool bEndFixed ) 
:
-        maRange(rRange), mbStartFixed(bStartFixed), mbEndFixed(bEndFixed) {}
-
-    bool operator < ( const AreaListenerKey& r ) const
-    {
-        if (maRange.aStart.Tab() != r.maRange.aStart.Tab())
-            return maRange.aStart.Tab() < r.maRange.aStart.Tab();
-        if (maRange.aStart.Col() != r.maRange.aStart.Col())
-            return maRange.aStart.Col() < r.maRange.aStart.Col();
-        if (maRange.aStart.Row() != r.maRange.aStart.Row())
-            return maRange.aStart.Row() < r.maRange.aStart.Row();
-        if (maRange.aEnd.Tab() != r.maRange.aEnd.Tab())
-            return maRange.aEnd.Tab() < r.maRange.aEnd.Tab();
-        if (maRange.aEnd.Col() != r.maRange.aEnd.Col())
-            return maRange.aEnd.Col() < r.maRange.aEnd.Col();
-        if (maRange.aEnd.Row() != r.maRange.aEnd.Row())
-            return maRange.aEnd.Row() < r.maRange.aEnd.Row();
-        if (mbStartFixed != r.mbStartFixed)
-            return r.mbStartFixed;
-        if (mbEndFixed != r.mbEndFixed)
-            return r.mbEndFixed;
-
-        return false;
-    }
-};
+}
 
-typedef std::map<AreaListenerKey, 
std::unique_ptr<sc::FormulaGroupAreaListener>> AreaListenersType;
+bool AreaListenerKey::operator < ( const AreaListenerKey& r ) const
+{
+    if (maRange.aStart.Tab() != r.maRange.aStart.Tab())
+        return maRange.aStart.Tab() < r.maRange.aStart.Tab();
+    if (maRange.aStart.Col() != r.maRange.aStart.Col())
+        return maRange.aStart.Col() < r.maRange.aStart.Col();
+    if (maRange.aStart.Row() != r.maRange.aStart.Row())
+        return maRange.aStart.Row() < r.maRange.aStart.Row();
+    if (maRange.aEnd.Tab() != r.maRange.aEnd.Tab())
+        return maRange.aEnd.Tab() < r.maRange.aEnd.Tab();
+    if (maRange.aEnd.Col() != r.maRange.aEnd.Col())
+        return maRange.aEnd.Col() < r.maRange.aEnd.Col();
+    if (maRange.aEnd.Row() != r.maRange.aEnd.Row())
+        return maRange.aEnd.Row() < r.maRange.aEnd.Row();
+    if (mbStartFixed != r.mbStartFixed)
+        return r.mbStartFixed;
+    if (mbEndFixed != r.mbEndFixed)
+        return r.mbEndFixed;
 
+    return false;
 }
 
-struct ScFormulaCellGroup::Impl
-{
-    AreaListenersType m_AreaListeners;
-};
-
 ScFormulaCellGroup::ScFormulaCellGroup() :
-    mpImpl(new Impl),
     mnRefCount(0),
     mpTopCell(nullptr),
     mnLength(0),
@@ -576,11 +558,11 @@ sc::FormulaGroupAreaListener* 
ScFormulaCellGroup::getAreaListener(
 {
     AreaListenerKey aKey(rRange, bStartFixed, bEndFixed);
 
-    AreaListenersType::iterator it = mpImpl->m_AreaListeners.lower_bound(aKey);
-    if (it == mpImpl->m_AreaListeners.end() || 
mpImpl->m_AreaListeners.key_comp()(aKey, it->first))
+    AreaListenersType::iterator it = m_AreaListeners.lower_bound(aKey);
+    if (it == m_AreaListeners.end() || m_AreaListeners.key_comp()(aKey, 
it->first))
     {
         // Insert a new one.
-        it = mpImpl->m_AreaListeners.insert(
+        it = m_AreaListeners.insert(
             it, std::make_pair(aKey, 
std::make_unique<sc::FormulaGroupAreaListener>(
                 rRange, (*ppTopCell)->GetDocument(), (*ppTopCell)->aPos, 
mnLength, bStartFixed, bEndFixed)));
     }
@@ -590,7 +572,7 @@ sc::FormulaGroupAreaListener* 
ScFormulaCellGroup::getAreaListener(
 
 void ScFormulaCellGroup::endAllGroupListening( ScDocument& rDoc )
 {
-    for (const auto& rEntry : mpImpl->m_AreaListeners)
+    for (const auto& rEntry : m_AreaListeners)
     {
         sc::FormulaGroupAreaListener *const pListener = rEntry.second.get();
         ScRange aListenRange = pListener->getListeningRange();
@@ -599,7 +581,7 @@ void ScFormulaCellGroup::endAllGroupListening( ScDocument& 
rDoc )
         rDoc.EndListeningArea(aListenRange, bGroupListening, pListener);
     }
 
-    mpImpl->m_AreaListeners.clear();
+    m_AreaListeners.clear();
 }
 
 ScFormulaCell::ScFormulaCell( ScDocument& rDoc, const ScAddress& rPos ) :

Reply via email to