[Libreoffice-commits] core.git: Branch 'feature/formula-core-rework' - 3 commits - sc/source

Kohei Yoshida kohei.yoshida at gmail.com
Wed Apr 24 11:09:14 PDT 2013


 sc/source/core/data/column3.cxx |   36 ++++++++++++++++++++++++------------
 1 file changed, 24 insertions(+), 12 deletions(-)

New commits:
commit 2ae8576f3f8ed90502c787113a75334975a8bc3f
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Wed Apr 24 14:11:37 2013 -0400

    Adding comment as I go along...
    
    Change-Id: I3f95b2a1a4b180c23e82bdeec8279707220532d5

diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx
index 9ad0061..3eb4b17 100644
--- a/sc/source/core/data/column3.cxx
+++ b/sc/source/core/data/column3.cxx
@@ -2094,6 +2094,7 @@ void ScColumn::RebuildFormulaGroups()
              !rCur.pCell || !rPrev.pCell ||                            // paranoia
              rCur.pCell->GetCellType() != rPrev.pCell->GetCellType() ) // same type
         {
+            // Non-contiguous cell detected. Break the series.
             pLastDouble = NULL;
             continue;
         }
commit c97c38747c03673282f6776371eb8b740614533b
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Wed Apr 24 13:08:21 2013 -0400

    Let's use std::for_each for this.
    
    Change-Id: I74f59ad697eb5ff28b81cd883db58ba9f19c086c

diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx
index cb82b3c..9ad0061 100644
--- a/sc/source/core/data/column3.cxx
+++ b/sc/source/core/data/column3.cxx
@@ -2051,6 +2051,23 @@ xub_StrLen ScColumn::GetMaxNumberStringLen(
     return nStringLen;
 }
 
+namespace {
+
+struct CellGroupSetter : std::unary_function<ColEntry, void>
+{
+    ScFormulaCellGroupRef mxGroup;
+public:
+    CellGroupSetter(const ScFormulaCellGroupRef& xGroup) : mxGroup(xGroup) {}
+
+    void operator() (ColEntry& rEntry)
+    {
+        if (rEntry.pCell && rEntry.pCell->GetCellType() == CELLTYPE_FORMULA)
+            static_cast<ScFormulaCell*>(rEntry.pCell)->SetCellGroup(mxGroup);
+    }
+};
+
+}
+
 // Very[!] slow way to look for and merge contiguous runs
 // of similar formulae into a formulagroup
 void ScColumn::RebuildFormulaGroups()
@@ -2064,12 +2081,7 @@ void ScColumn::RebuildFormulaGroups()
 
     // clear previous groups
     ScFormulaCellGroupRef xNone;
-    for (size_t i = 0; i < maItems.size(); i++)
-    {
-        ColEntry &rCur = maItems[ i ];
-        if ( rCur.pCell && rCur.pCell->GetCellType() == CELLTYPE_FORMULA )
-            static_cast<ScFormulaCell *>( rCur.pCell )->SetCellGroup( xNone );
-    }
+    std::for_each(maItems.begin(), maItems.end(), CellGroupSetter(xNone));
     maFnGroups.clear();
 
     // re-build groups
commit 44b3b80400fb0e812cc4cce334df3c7f737469c5
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Wed Apr 24 11:13:08 2013 -0400

    Wrap inside smart pointer on instantiation, for exception safety.
    
    And boost::intrusive_ptr has a bool operator; no need to call get()
    in this case.
    
    Change-Id: I8ca965349c13dd0fedc16dc0d535b8c337fce52c

diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx
index e69a8cc..cb82b3c 100644
--- a/sc/source/core/data/column3.cxx
+++ b/sc/source/core/data/column3.cxx
@@ -2119,15 +2119,14 @@ void ScColumn::RebuildFormulaGroups()
         }
 
         ScFormulaCellGroupRef xGroup = pPrev->GetCellGroup();
-        if ( !xGroup.get() )
+        if (!xGroup)
         {
             // create a new group ...
-            ScFormulaCellGroup *pGroup = new ScFormulaCellGroup();
-            pGroup->mpDelta = pDelta;
-            pGroup->mnStart = rPrev.nRow;
-            pGroup->mnLength = 2;
+            xGroup.reset(new ScFormulaCellGroup);
+            xGroup->mpDelta = pDelta;
+            xGroup->mnStart = rPrev.nRow;
+            xGroup->mnLength = 2;
 
-            xGroup.reset( pGroup );
             maFnGroups.push_back( xGroup );
 
             pCur->SetCellGroup( xGroup );


More information about the Libreoffice-commits mailing list