[Libreoffice-commits] core.git: sc/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Thu Dec 20 16:03:16 UTC 2018


 sc/source/core/data/table3.cxx |   23 ++++++-----------------
 1 file changed, 6 insertions(+), 17 deletions(-)

New commits:
commit 58966e16d8649a16fa961dbedc4f6f97693021e6
Author:     Takeshi Abe <tabe at fixedpoint.jp>
AuthorDate: Wed Dec 19 17:24:45 2018 +0900
Commit:     Eike Rathke <erack at redhat.com>
CommitDate: Thu Dec 20 17:02:52 2018 +0100

    sc: Simplify RemoveSubTotalsHandler using std::set
    
    instead of std::vector.
    
    Change-Id: I5927e061b5d2944cad68b96e313934738c63c321
    Reviewed-on: https://gerrit.libreoffice.org/65400
    Tested-by: Jenkins
    Reviewed-by: Eike Rathke <erack at redhat.com>

diff --git a/sc/source/core/data/table3.cxx b/sc/source/core/data/table3.cxx
index 5a2550ce0ead..48952234341d 100644
--- a/sc/source/core/data/table3.cxx
+++ b/sc/source/core/data/table3.cxx
@@ -69,6 +69,7 @@
 #include <svl/sharedstringpool.hxx>
 
 #include <memory>
+#include <set>
 #include <unordered_set>
 #include <vector>
 #include <mdds/flat_segment_tree.hpp>
@@ -1864,25 +1865,14 @@ bool ScTable::TestRemoveSubTotals( const ScSubTotalParam& rParam )
 
 namespace {
 
-class RemoveSubTotalsHandler
+struct RemoveSubTotalsHandler
 {
-    std::vector<SCROW> maRemoved;
-public:
+    std::set<SCROW> aRemoved;
 
     void operator() (size_t nRow, const ScFormulaCell* p)
     {
         if (p->IsSubTotal())
-            maRemoved.push_back(nRow);
-    }
-
-    void getRows(std::vector<SCROW>& rRows)
-    {
-        // Sort and remove duplicates.
-        std::sort(maRemoved.begin(), maRemoved.end());
-        std::vector<SCROW>::iterator it = std::unique(maRemoved.begin(), maRemoved.end());
-        maRemoved.erase(it, maRemoved.end());
-
-        maRemoved.swap(rRows);
+            aRemoved.insert(nRow);
     }
 };
 
@@ -1902,10 +1892,9 @@ void ScTable::RemoveSubTotals( ScSubTotalParam& rParam )
         sc::ParseFormula(rCells.begin(), rCells, nStartRow, nEndRow, aFunc);
     }
 
-    std::vector<SCROW> aRows;
-    aFunc.getRows(aRows);
+    auto& aRows = aFunc.aRemoved;
 
-    std::vector<SCROW>::reverse_iterator it = aRows.rbegin(), itEnd = aRows.rend();
+    auto it = aRows.rbegin(), itEnd = aRows.rend();
     for (; it != itEnd; ++it)
     {
         SCROW nRow = *it;


More information about the Libreoffice-commits mailing list