sc/inc/scmatrix.hxx | 2 ++ sc/qa/unit/ucalc.cxx | 2 +- sc/source/core/tool/scmatrix.cxx | 22 ++++++++++++++++++++-- 3 files changed, 23 insertions(+), 3 deletions(-)
New commits: commit 55c3f3567be46155781d3cebfe3dc0a56182d067 Author: Kohei Yoshida <kohei.yosh...@gmail.com> Date: Tue Jul 17 15:02:05 2012 -0400 Support resizing matrix with a default value. Change-Id: Ibb5cf4d09b67426021f6d158878afd8386f22555 diff --git a/sc/inc/scmatrix.hxx b/sc/inc/scmatrix.hxx index d6d3e15..984561e 100644 --- a/sc/inc/scmatrix.hxx +++ b/sc/inc/scmatrix.hxx @@ -238,6 +238,8 @@ public: */ void Resize( SCSIZE nC, SCSIZE nR); + void Resize(SCSIZE nC, SCSIZE nR, double fVal); + /** Clone the matrix and extend it to the new size. nNewCols and nNewRows MUST be at least of the size of the original matrix. */ ScMatrix* CloneAndExtend(SCSIZE nNewCols, SCSIZE nNewRows) const; diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx index 2c1006c..ef7c916 100644 --- a/sc/qa/unit/ucalc.cxx +++ b/sc/qa/unit/ucalc.cxx @@ -1233,7 +1233,7 @@ void Test::testMatrix() SCSIZE nC, nR; pMat->GetDimensions(nC, nR); CPPUNIT_ASSERT_MESSAGE("matrix is not empty", nC == 0 && nR == 0); - pMat->Resize(4, 10); + pMat->Resize(4, 10, 0.0); pMat->GetDimensions(nC, nR); CPPUNIT_ASSERT_MESSAGE("matrix size is not as expected", nC == 4 && nR == 10); CPPUNIT_ASSERT_MESSAGE("both 'and' and 'or' should evaluate to false", diff --git a/sc/source/core/tool/scmatrix.cxx b/sc/source/core/tool/scmatrix.cxx index 9e35843..3b1aecb 100644 --- a/sc/source/core/tool/scmatrix.cxx +++ b/sc/source/core/tool/scmatrix.cxx @@ -388,6 +388,7 @@ public: void SetImmutable(bool bVal); bool IsImmutable() const; void Resize(SCSIZE nC, SCSIZE nR); + void Resize(SCSIZE nC, SCSIZE nR, double fVal); void SetErrorInterpreter( ScInterpreter* p); ScInterpreter* GetErrorInterpreter() const { return pErrorInterpreter; } @@ -475,6 +476,11 @@ void ScMatrixImpl::Resize(SCSIZE nC, SCSIZE nR) maMat.resize(nR, nC); } +void ScMatrixImpl::Resize(SCSIZE nC, SCSIZE nR, double fVal) +{ + maMat.resize(nR, nC, fVal); +} + void ScMatrixImpl::SetErrorInterpreter( ScInterpreter* p) { pErrorInterpreter = p; @@ -1154,6 +1160,11 @@ void ScMatrix::Resize( SCSIZE nC, SCSIZE nR) pImpl->Resize(nC, nR); } +void ScMatrix::Resize(SCSIZE nC, SCSIZE nR, double fVal) +{ + pImpl->Resize(nC, nR, fVal); +} + ScMatrix* ScMatrix::CloneAndExtend(SCSIZE nNewCols, SCSIZE nNewRows) const { ScMatrix* pScMat = new ScMatrix(nNewCols, nNewRows); commit 0c881781d30055c588b21bb87b4491be5c3e1172 Author: Kohei Yoshida <kohei.yosh...@gmail.com> Date: Tue Jul 17 13:57:43 2012 -0400 For sum product, the initial accumulator value should be 1, not 0. Change-Id: I16ce22150627f75eab08cc4d58fc63a76572c010 diff --git a/sc/source/core/tool/scmatrix.cxx b/sc/source/core/tool/scmatrix.cxx index 67f2ffb..9e35843 100644 --- a/sc/source/core/tool/scmatrix.cxx +++ b/sc/source/core/tool/scmatrix.cxx @@ -960,6 +960,8 @@ namespace { struct SumOp { + static const double initVal = 0.0; + void operator() (double& rAccum, double fVal) { rAccum += fVal; @@ -968,6 +970,8 @@ struct SumOp struct SumSquareOp { + static const double initVal = 0.0; + void operator() (double& rAccum, double fVal) { rAccum += fVal*fVal; @@ -976,6 +980,8 @@ struct SumSquareOp struct ProductOp { + static const double initVal = 1.0; + void operator() (double& rAccum, double fVal) { rAccum *= fVal; @@ -991,7 +997,7 @@ class WalkElementBlocks : std::unary_function<MatrixImplType::element_block_node bool mbFirst:1; bool mbTextAsZero:1; public: - WalkElementBlocks(bool bTextAsZero) : maRes(0.0, 0.0, 0), mbFirst(true), mbTextAsZero(bTextAsZero) {} + WalkElementBlocks(bool bTextAsZero) : maRes(0.0, _Op::initVal, 0), mbFirst(true), mbTextAsZero(bTextAsZero) {} const ScMatrix::IterateResult& getResult() const { return maRes; } @@ -1092,7 +1098,8 @@ ScMatrix::IterateResult ScMatrixImpl::Product(bool bTextAsZero) const { WalkElementBlocks<ProductOp> aFunc(bTextAsZero); maMat.walk(aFunc); - return aFunc.getResult(); + ScMatrix::IterateResult aRes = aFunc.getResult(); + return aRes; } size_t ScMatrixImpl::Count(bool bCountStrings) const _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits