summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTor Lillqvist <tml@collabora.com>2016-02-05 15:01:48 +0200
committerTor Lillqvist <tml@collabora.com>2016-02-08 06:38:28 +0000
commita86f46ec138e0215c6c82200ab5aea35fdb217b2 (patch)
tree57488dec0f83aedab4053cc3e7aad4dc14e32ea3
parent4d67506dee347c3a3a290e1f52af91048c4318bc (diff)
tdf#97369: Fix SUMming in the software interpreter
GetRefRowSize() is not what we want, but GetArrayLength(). I think. At least helps in the sample document. (Need a hard recalc after loading it, though, but I assume that is expected.) Also, fix the handling of multiple columns in the area being summed. Change-Id: I21477ca83042a40a300bc033e4a8b74ab5fc3015 Reviewed-on: https://gerrit.libreoffice.org/22153 Reviewed-by: Tor Lillqvist <tml@collabora.com> Tested-by: Tor Lillqvist <tml@collabora.com>
-rw-r--r--sc/source/core/tool/scmatrix.cxx11
1 files changed, 5 insertions, 6 deletions
diff --git a/sc/source/core/tool/scmatrix.cxx b/sc/source/core/tool/scmatrix.cxx
index a3a86d44948c..33879bc8f8a9 100644
--- a/sc/source/core/tool/scmatrix.cxx
+++ b/sc/source/core/tool/scmatrix.cxx
@@ -3398,13 +3398,13 @@ ScMatrix::IterateResult ScVectorRefMatrix::Sum(bool bTextAsZero) const
const std::vector<formula::VectorRefArray>& rArrays = mpToken->GetArrays();
size_t nDataSize = mnRowSize;
- if (mnRowStart >= mpToken->GetRefRowSize())
+ if (mnRowStart >= mpToken->GetArrayLength())
{
return ScMatrix::IterateResult(0.0, 0.0, 0);
}
- else if (nDataSize > mpToken->GetRefRowSize() + mnRowStart)
+ else if (nDataSize > mpToken->GetArrayLength() + mnRowStart)
{
- nDataSize = mpToken->GetRefRowSize() - mnRowStart;
+ nDataSize = mpToken->GetArrayLength() - mnRowStart;
}
double mfFirst = 0.0;
@@ -3435,11 +3435,10 @@ ScMatrix::IterateResult ScVectorRefMatrix::Sum(bool bTextAsZero) const
}
}
p += i;
- nDataSize -= i;
- if (nDataSize == 0)
+ if (i == nDataSize)
continue;
- sc::ArraySumFunctor functor(p, nDataSize);
+ sc::ArraySumFunctor functor(p, nDataSize-i);
mfRest += functor();
}