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

Noel Grandin noel.grandin at collabora.co.uk
Wed Jun 13 09:22:33 UTC 2018


 sc/source/core/data/table3.cxx |   29 +++++++++++------------------
 1 file changed, 11 insertions(+), 18 deletions(-)

New commits:
commit e9fe5e71bf4cac53663370373058e69cc2c07a38
Author: Noel Grandin <noel.grandin at collabora.co.uk>
Date:   Tue Jun 12 16:02:39 2018 +0200

    loplugin:useuniqueptr in ScSortInfoArray
    
    just allocate these object inside the vector, we allocate in them in one
    big block anyhow, not one at a time
    
    Change-Id: I8df17ce180264efb5f51af2da91918889db4e68b
    Reviewed-on: https://gerrit.libreoffice.org/55697
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/sc/source/core/data/table3.cxx b/sc/source/core/data/table3.cxx
index 07c4030382c2..05b71c35daa2 100644
--- a/sc/source/core/data/table3.cxx
+++ b/sc/source/core/data/table3.cxx
@@ -253,7 +253,7 @@ public:
         explicit Row( size_t nColSize ) : maCells(nColSize, Cell()), mbHidden(false), mbFiltered(false) {}
     };
 
-    typedef std::vector<Row*> RowsType;
+    typedef std::vector<Row> RowsType;
 
 private:
     std::unique_ptr<RowsType> mpRows; /// row-wise data table for sort by row operation.
@@ -290,12 +290,6 @@ public:
             maOrderIndices.push_back(i+nStart);
     }
 
-    ~ScSortInfoArray()
-    {
-        if (mpRows)
-            std::for_each(mpRows->begin(), mpRows->end(), std::default_delete<Row>());
-    }
-
     void SetKeepQuery( bool b ) { mbKeepQuery = b; }
 
     bool IsKeepQuery() const { return mbKeepQuery; }
@@ -325,6 +319,8 @@ public:
      */
     void Swap( SCCOLROW nInd1, SCCOLROW nInd2 )
     {
+        if (nInd1 == nInd2) // avoid self-move-assign
+            return;
         SCSIZE n1 = static_cast<SCSIZE>(nInd1 - nStart);
         SCSIZE n2 = static_cast<SCSIZE>(nInd2 - nStart);
         for ( sal_uInt16 nSort = 0; nSort < static_cast<sal_uInt16>(mvppInfo.size()); nSort++ )
@@ -387,10 +383,7 @@ public:
     RowsType& InitDataRows( size_t nRowSize, size_t nColSize )
     {
         mpRows.reset(new RowsType);
-        mpRows->reserve(nRowSize);
-        for (size_t i = 0; i < nRowSize; ++i)
-            mpRows->push_back(new Row(nColSize));
-
+        mpRows->resize(nRowSize, Row(nColSize));
         return *mpRows;
     }
 
@@ -426,7 +419,7 @@ void initDataRows(
 
         for (SCROW nRow = nRow1; nRow <= nRow2; ++nRow)
         {
-            ScSortInfoArray::Row& rRow = *rRows[nRow-nRow1];
+            ScSortInfoArray::Row& rRow = rRows[nRow-nRow1];
             ScSortInfoArray::Cell& rCell = rRow.maCells[nCol-nCol1];
             rCell.maCell = rCol.GetCellValue(aBlockPos, nRow);
             rCell.mpAttr = rCol.GetCellTextAttr(aBlockPos, nRow);
@@ -443,7 +436,7 @@ void initDataRows(
     {
         for (SCROW nRow = nRow1; nRow <= nRow2; ++nRow)
         {
-            ScSortInfoArray::Row& rRow = *rRows[nRow-nRow1];
+            ScSortInfoArray::Row& rRow = rRows[nRow-nRow1];
             rRow.mbHidden = rTab.RowHidden(nRow);
             rRow.mbFiltered = rTab.RowFiltered(nRow);
         }
@@ -700,12 +693,12 @@ void fillSortedColumnArray(
 
     for (size_t i = 0; i < pRows->size(); ++i)
     {
-        ScSortInfoArray::Row* pRow = (*pRows)[i];
-        for (size_t j = 0; j < pRow->maCells.size(); ++j)
+        ScSortInfoArray::Row& rRow = (*pRows)[i];
+        for (size_t j = 0; j < rRow.maCells.size(); ++j)
         {
             ScAddress aCellPos(nCol1 + j, nRow1 + i, nTab);
 
-            ScSortInfoArray::Cell& rCell = pRow->maCells[j];
+            ScSortInfoArray::Cell& rCell = rRow.maCells[j];
 
             sc::CellStoreType& rCellStore = aSortedCols.at(j).get()->maCells;
             switch (rCell.maCell.meType)
@@ -799,8 +792,8 @@ void fillSortedColumnArray(
         {
             // Hidden and filtered flags are first converted to segments.
             SCROW nRow = nRow1 + i;
-            aRowFlags.setRowHidden(nRow, pRow->mbHidden);
-            aRowFlags.setRowFiltered(nRow, pRow->mbFiltered);
+            aRowFlags.setRowHidden(nRow, rRow.mbHidden);
+            aRowFlags.setRowFiltered(nRow, rRow.mbFiltered);
         }
 
         if (pProgress)


More information about the Libreoffice-commits mailing list