Kaydet (Commit) 7a46f18d authored tarafından Noel Grandin's avatar Noel Grandin

no need to allocate sc::op::Op on the heap here

Change-Id: I6a048a51eacaa7063318cdc27d5bc25cc96d557b
Reviewed-on: https://gerrit.libreoffice.org/65304
Tested-by: Jenkins
Reviewed-by: 's avatarNoel Grandin <noel.grandin@collabora.co.uk>
üst 6dc36d34
...@@ -25,7 +25,7 @@ struct Op_ ...@@ -25,7 +25,7 @@ struct Op_
mInitVal(InitVal), maOp(aOp) mInitVal(InitVal), maOp(aOp)
{ {
} }
void operator()(double& rAccum, double fVal) void operator()(double& rAccum, double fVal) const
{ {
maOp(rAccum, fVal); maOp(rAccum, fVal);
} }
...@@ -36,19 +36,19 @@ using Op = Op_<std::function<void(double&, double)>>; ...@@ -36,19 +36,19 @@ using Op = Op_<std::function<void(double&, double)>>;
struct Sum struct Sum
{ {
static const double InitVal; static const double InitVal;
void operator()(double& rAccum, double fVal); void operator()(double& rAccum, double fVal) const;
}; };
struct SumSquare struct SumSquare
{ {
static const double InitVal; static const double InitVal;
void operator()(double& rAccum, double fVal); void operator()(double& rAccum, double fVal) const;
}; };
struct Product struct Product
{ {
static const double InitVal; static const double InitVal;
void operator()(double& rAccum, double fVal); void operator()(double& rAccum, double fVal) const;
}; };
} }
......
...@@ -399,7 +399,7 @@ public: ...@@ -399,7 +399,7 @@ public:
void DivOp(bool bFlag, double fVal, ScMatrix& rMat) ; void DivOp(bool bFlag, double fVal, ScMatrix& rMat) ;
void PowOp(bool bFlag, double fVal, ScMatrix& rMat) ; void PowOp(bool bFlag, double fVal, ScMatrix& rMat) ;
std::vector<ScMatrix::IterateResult> Collect(const std::vector<std::unique_ptr<sc::op::Op>>& aOp) ; std::vector<ScMatrix::IterateResult> Collect(const std::vector<sc::op::Op>& aOp) ;
void ExecuteOperation(const std::pair<size_t, size_t>& rStartPos, const std::pair<size_t, size_t>& rEndPos, void ExecuteOperation(const std::pair<size_t, size_t>& rStartPos, const std::pair<size_t, size_t>& rEndPos,
DoubleOpFunction aDoubleFunc, BoolOpFunction aBoolFunc, StringOpFunction aStringFunc, DoubleOpFunction aDoubleFunc, BoolOpFunction aBoolFunc, StringOpFunction aStringFunc,
......
...@@ -2745,9 +2745,9 @@ void ScInterpreter::ScFTest() ...@@ -2745,9 +2745,9 @@ void ScInterpreter::ScFTest()
double fSum2 = 0.0; double fSum2 = 0.0;
double fSumSqr2 = 0.0; double fSumSqr2 = 0.0;
std::vector<std::unique_ptr<sc::op::Op>> aOp; std::vector<sc::op::Op> aOp;
aOp.emplace_back(new sc::op::Op(0.0, [](double& rAccum, double fVal){rAccum += fVal;})); aOp.emplace_back(sc::op::Op(0.0, [](double& rAccum, double fVal){rAccum += fVal;}));
aOp.emplace_back(new sc::op::Op(0.0, [](double& rAccum, double fVal){rAccum += fVal * fVal;})); aOp.emplace_back(sc::op::Op(0.0, [](double& rAccum, double fVal){rAccum += fVal * fVal;}));
auto aVal1 = pMat1->Collect(aOp); auto aVal1 = pMat1->Collect(aOp);
fSum1 = aVal1[0].mfFirst + aVal1[0].mfRest; fSum1 = aVal1[0].mfFirst + aVal1[0].mfRest;
......
...@@ -15,21 +15,21 @@ namespace sc { ...@@ -15,21 +15,21 @@ namespace sc {
namespace op { namespace op {
void Sum::operator()(double& rAccum, double fVal) void Sum::operator()(double& rAccum, double fVal) const
{ {
rAccum += fVal; rAccum += fVal;
} }
const double Sum::InitVal = 0.0; const double Sum::InitVal = 0.0;
void SumSquare::operator()(double& rAccum, double fVal) void SumSquare::operator()(double& rAccum, double fVal) const
{ {
rAccum += fVal * fVal; rAccum += fVal * fVal;
} }
const double SumSquare::InitVal = 0.0; const double SumSquare::InitVal = 0.0;
void Product::operator()(double& rAccum, double fVal) void Product::operator()(double& rAccum, double fVal) const
{ {
rAccum *= fVal; rAccum *= fVal;
} }
......
...@@ -330,7 +330,7 @@ public: ...@@ -330,7 +330,7 @@ public:
const ScMatrix::EmptyOpFunction& aEmptyFunc) const; const ScMatrix::EmptyOpFunction& aEmptyFunc) const;
template<typename T> template<typename T>
std::vector<ScMatrix::IterateResult> ApplyCollectOperation(const std::vector<std::unique_ptr<T>>& aOp); std::vector<ScMatrix::IterateResult> ApplyCollectOperation(const std::vector<T>& aOp);
void MatConcat(SCSIZE nMaxCol, SCSIZE nMaxRow, const ScMatrixRef& xMat1, const ScMatrixRef& xMat2, void MatConcat(SCSIZE nMaxCol, SCSIZE nMaxRow, const ScMatrixRef& xMat1, const ScMatrixRef& xMat2,
SvNumberFormatter& rFormatter, svl::SharedStringPool& rPool); SvNumberFormatter& rFormatter, svl::SharedStringPool& rPool);
...@@ -1181,16 +1181,16 @@ public: ...@@ -1181,16 +1181,16 @@ public:
template<typename Op> template<typename Op>
class WalkElementBlocksMultipleValues class WalkElementBlocksMultipleValues
{ {
const std::vector<std::unique_ptr<Op>>* mpOp; const std::vector<Op>* mpOp;
std::vector<ScMatrix::IterateResult> maRes; std::vector<ScMatrix::IterateResult> maRes;
bool mbFirst:1; bool mbFirst:1;
public: public:
WalkElementBlocksMultipleValues(const std::vector<std::unique_ptr<Op>>& aOp) : WalkElementBlocksMultipleValues(const std::vector<Op>& aOp) :
mpOp(&aOp), mbFirst(true) mpOp(&aOp), mbFirst(true)
{ {
for (const auto& rpOp : *mpOp) for (const auto& rpOp : *mpOp)
{ {
maRes.emplace_back(rpOp->mInitVal, rpOp->mInitVal, 0); maRes.emplace_back(rpOp.mInitVal, rpOp.mInitVal, 0);
} }
maRes.emplace_back(0.0, 0.0, 0); // count maRes.emplace_back(0.0, 0.0, 0); // count
} }
...@@ -1227,7 +1227,7 @@ public: ...@@ -1227,7 +1227,7 @@ public:
{ {
for (size_t i = 0u; i < mpOp->size(); ++i) for (size_t i = 0u; i < mpOp->size(); ++i)
{ {
(*(*mpOp)[i])(maRes[i].mfFirst, *it); (*mpOp)[i](maRes[i].mfFirst, *it);
} }
mbFirst = false; mbFirst = false;
} }
...@@ -1235,7 +1235,7 @@ public: ...@@ -1235,7 +1235,7 @@ public:
{ {
for (size_t i = 0u; i < mpOp->size(); ++i) for (size_t i = 0u; i < mpOp->size(); ++i)
{ {
(*(*mpOp)[i])(maRes[i].mfRest, *it); (*mpOp)[i](maRes[i].mfRest, *it);
} }
} }
} }
...@@ -1254,7 +1254,7 @@ public: ...@@ -1254,7 +1254,7 @@ public:
{ {
for (size_t i = 0u; i < mpOp->size(); ++i) for (size_t i = 0u; i < mpOp->size(); ++i)
{ {
(*(*mpOp)[i])(maRes[i].mfFirst, *it); (*mpOp)[i](maRes[i].mfFirst, *it);
} }
mbFirst = false; mbFirst = false;
} }
...@@ -1262,7 +1262,7 @@ public: ...@@ -1262,7 +1262,7 @@ public:
{ {
for (size_t i = 0u; i < mpOp->size(); ++i) for (size_t i = 0u; i < mpOp->size(); ++i)
{ {
(*(*mpOp)[i])(maRes[i].mfRest, *it); (*mpOp)[i](maRes[i].mfRest, *it);
} }
} }
} }
...@@ -2433,7 +2433,7 @@ void ScMatrixImpl::ApplyOperation(T aOp, ScMatrixImpl& rMat) ...@@ -2433,7 +2433,7 @@ void ScMatrixImpl::ApplyOperation(T aOp, ScMatrixImpl& rMat)
} }
template<typename T> template<typename T>
std::vector<ScMatrix::IterateResult> ScMatrixImpl::ApplyCollectOperation(const std::vector<std::unique_ptr<T>>& aOp) std::vector<ScMatrix::IterateResult> ScMatrixImpl::ApplyCollectOperation(const std::vector<T>& aOp)
{ {
WalkElementBlocksMultipleValues<T> aFunc(aOp); WalkElementBlocksMultipleValues<T> aFunc(aOp);
aFunc = maMat.walk(std::move(aFunc)); aFunc = maMat.walk(std::move(aFunc));
...@@ -3460,7 +3460,7 @@ void ScMatrix::ExecuteOperation(const std::pair<size_t, size_t>& rStartPos, ...@@ -3460,7 +3460,7 @@ void ScMatrix::ExecuteOperation(const std::pair<size_t, size_t>& rStartPos,
pImpl->ExecuteOperation(rStartPos, rEndPos, aDoubleFunc, aBoolFunc, aStringFunc, aEmptyFunc); pImpl->ExecuteOperation(rStartPos, rEndPos, aDoubleFunc, aBoolFunc, aStringFunc, aEmptyFunc);
} }
std::vector<ScMatrix::IterateResult> ScMatrix::Collect(const std::vector<std::unique_ptr<sc::op::Op>>& aOp) std::vector<ScMatrix::IterateResult> ScMatrix::Collect(const std::vector<sc::op::Op>& aOp)
{ {
return pImpl->ApplyCollectOperation(aOp); return pImpl->ApplyCollectOperation(aOp);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment