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

Kohei Yoshida kohei.yoshida at gmail.com
Tue Jul 2 13:11:07 PDT 2013


 sc/inc/column.hxx                |    3 -
 sc/source/core/data/column.cxx   |   74 ---------------------------------------
 sc/source/core/tool/interpr6.cxx |   65 +++++++++++++++++++++++++++++++++-
 3 files changed, 63 insertions(+), 79 deletions(-)

New commits:
commit 9e802714b3c1e6d618c833ff0bc89016afed2131
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Tue Jul 2 16:02:59 2013 -0400

    Move this code from the column code back into the interpreter code.
    
    Change-Id: I7830cdf3f09ed7b6ae6221212bfb84abcdeac523

diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx
index 359b8ac..62e1ddf 100644
--- a/sc/inc/column.hxx
+++ b/sc/inc/column.hxx
@@ -409,9 +409,6 @@ public:
     void        ClearSelectionItems( const sal_uInt16* pWhich, const ScMarkData& rMark );
     void        ChangeSelectionIndent( bool bIncrement, const ScMarkData& rMark );
 
-    double SumNumericCells( sc::ColumnBlockConstPosition& rPos, SCROW nRow1, SCROW nRow2 ) const;
-    size_t CountNumericCells( sc::ColumnBlockConstPosition& rPos, SCROW nRow1, SCROW nRow2 ) const;
-
     long GetNeededSize(
         SCROW nRow, OutputDevice* pDev, double nPPTX, double nPPTY,
         const Fraction& rZoomX, const Fraction& rZoomY,
diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx
index 61f57ab..6a2dbd3 100644
--- a/sc/source/core/data/column.cxx
+++ b/sc/source/core/data/column.cxx
@@ -466,80 +466,6 @@ void ScColumn::ChangeSelectionIndent( bool bIncrement, const ScMarkData& rMark )
     }
 }
 
-namespace {
-
-class NumericCellAccumulator
-{
-    double mfSum;
-public:
-    NumericCellAccumulator() : mfSum(0.0) {}
-
-    void operator() (size_t, double fVal)
-    {
-        mfSum += fVal;
-    }
-
-    void operator() (size_t, const ScFormulaCell* pCell)
-    {
-        ScFormulaCell& rCell = const_cast<ScFormulaCell&>(*pCell);
-        if (rCell.IsValue())
-            mfSum += rCell.GetValue();
-    }
-
-    double getSum() const { return mfSum; }
-};
-
-class NumericCellCounter
-{
-    size_t mnCount;
-public:
-    NumericCellCounter() : mnCount(0) {}
-
-    void operator() (const sc::CellStoreType::value_type& rNode, size_t nOffset, size_t nDataSize)
-    {
-        switch (rNode.type)
-        {
-            case sc::element_type_numeric:
-                mnCount += nDataSize;
-            break;
-            case sc::element_type_formula:
-            {
-                sc::formula_block::const_iterator it = sc::formula_block::begin(*rNode.data);
-                std::advance(it, nOffset);
-                sc::formula_block::const_iterator itEnd = it;
-                std::advance(itEnd, nDataSize);
-                for (; it != itEnd; ++it)
-                {
-                    ScFormulaCell& rCell = const_cast<ScFormulaCell&>(**it);
-                    if (rCell.IsValueNoError())
-                        ++mnCount;
-                }
-            }
-            break;
-            default:
-                ;
-        }
-    }
-
-    size_t getCount() const { return mnCount; }
-};
-
-}
-
-double ScColumn::SumNumericCells( sc::ColumnBlockConstPosition& rPos, SCROW nRow1, SCROW nRow2 ) const
-{
-    NumericCellAccumulator aFunc;
-    rPos.miCellPos = sc::ParseFormulaNumeric(rPos.miCellPos, maCells, nRow1, nRow2, aFunc);
-    return aFunc.getSum();
-}
-
-size_t ScColumn::CountNumericCells( sc::ColumnBlockConstPosition& rPos, SCROW nRow1, SCROW nRow2 ) const
-{
-    NumericCellCounter aFunc;
-    rPos.miCellPos = sc::ParseBlock(rPos.miCellPos, maCells, aFunc, nRow1, nRow2);
-    return aFunc.getCount();
-}
-
 void ScColumn::ClearSelectionItems( const sal_uInt16* pWhich,const ScMarkData& rMark )
 {
     SCROW nTop;
diff --git a/sc/source/core/tool/interpr6.cxx b/sc/source/core/tool/interpr6.cxx
index e31a062..03d87a9 100644
--- a/sc/source/core/tool/interpr6.cxx
+++ b/sc/source/core/tool/interpr6.cxx
@@ -24,6 +24,7 @@
 #include "document.hxx"
 #include "cellvalue.hxx"
 #include "dociter.hxx"
+#include "mtvcellfunc.hxx"
 
 #include "formula/token.hxx"
 #include <rtl/logfile.hxx>
@@ -213,6 +214,62 @@ double ScInterpreter::GetGammaDist( double fX, double fAlpha, double fLambda )
 
 namespace {
 
+class NumericCellAccumulator
+{
+    double mfSum;
+public:
+    NumericCellAccumulator() : mfSum(0.0) {}
+
+    void operator() (size_t, double fVal)
+    {
+        mfSum += fVal;
+    }
+
+    void operator() (size_t, const ScFormulaCell* pCell)
+    {
+        ScFormulaCell& rCell = const_cast<ScFormulaCell&>(*pCell);
+        if (rCell.IsValue())
+            mfSum += rCell.GetValue();
+    }
+
+    double getSum() const { return mfSum; }
+};
+
+class NumericCellCounter
+{
+    size_t mnCount;
+public:
+    NumericCellCounter() : mnCount(0) {}
+
+    void operator() (const sc::CellStoreType::value_type& rNode, size_t nOffset, size_t nDataSize)
+    {
+        switch (rNode.type)
+        {
+            case sc::element_type_numeric:
+                mnCount += nDataSize;
+            break;
+            case sc::element_type_formula:
+            {
+                sc::formula_block::const_iterator it = sc::formula_block::begin(*rNode.data);
+                std::advance(it, nOffset);
+                sc::formula_block::const_iterator itEnd = it;
+                std::advance(itEnd, nDataSize);
+                for (; it != itEnd; ++it)
+                {
+                    ScFormulaCell& rCell = const_cast<ScFormulaCell&>(**it);
+                    if (rCell.IsValueNoError())
+                        ++mnCount;
+                }
+            }
+            break;
+            default:
+                ;
+        }
+    }
+
+    size_t getCount() const { return mnCount; }
+};
+
 class FuncCount : public sc::ColumnSpanSet::ColumnAction
 {
     sc::ColumnBlockConstPosition maPos;
@@ -234,7 +291,9 @@ public:
         if (!bVal)
             return;
 
-        mnCount += mpCol->CountNumericCells(maPos, nRow1, nRow2);
+        NumericCellCounter aFunc;
+        maPos.miCellPos = sc::ParseBlock(maPos.miCellPos, mpCol->GetCellStore(), aFunc, nRow1, nRow2);
+        mnCount += aFunc.getCount();
         mnNumFmt = mpCol->GetNumberFormat(nRow2);
     };
 
@@ -263,7 +322,9 @@ public:
         if (!bVal)
             return;
 
-        mfSum += mpCol->SumNumericCells(maPos, nRow1, nRow2);
+        NumericCellAccumulator aFunc;
+        maPos.miCellPos = sc::ParseFormulaNumeric(maPos.miCellPos, mpCol->GetCellStore(), nRow1, nRow2, aFunc);
+        mfSum += aFunc.getSum();
         mnNumFmt = mpCol->GetNumberFormat(nRow2);
     };
 


More information about the Libreoffice-commits mailing list