sc/source/core/data/formulacell.cxx | 59 +++++++++++++----------------------- 1 file changed, 22 insertions(+), 37 deletions(-)
New commits: commit 4c68b4d57c562f5e26f7708900a24f7964c53c18 Author: Kohei Yoshida <kohei.yosh...@gmail.com> Date: Mon Jul 8 11:09:00 2013 -0400 Always use DoubleVectorRefToken when resolving a range reference. ResolveStaticReference is reserved for calculating invariant formula groups. Change-Id: I58aeabb01f11f98a5c300780734b31079417f4c7 diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx index f8928e5..8d84221 100644 --- a/sc/source/core/data/formulacell.cxx +++ b/sc/source/core/data/formulacell.cxx @@ -3021,49 +3021,34 @@ public: { ScComplexRefData aRef = pToken->GetDoubleRef(); aRef.CalcAbsIfRel(mrCell.aPos); - if (aRef.Ref1.IsRowRel() || aRef.Ref2.IsRowRel()) - { - // Row reference is relative. - bool bAbsFirst = !aRef.Ref1.IsRowRel(); - bool bAbsLast = !aRef.Ref2.IsRowRel(); - ScAddress aRefPos(aRef.Ref1.nCol, aRef.Ref1.nRow, aRef.Ref1.nTab); - size_t nCols = aRef.Ref2.nCol - aRef.Ref1.nCol + 1; - std::vector<const double*> aArrays; - aArrays.reserve(nCols); - SCROW nArrayLength = mrCell.GetCellGroup()->mnLength; - SCROW nRefRowSize = aRef.Ref2.nRow - aRef.Ref1.nRow + 1; - if (!bAbsLast) - { - // range end position is relative. Extend the array length. - nArrayLength += nRefRowSize - 1; - } - - for (SCCOL i = aRef.Ref1.nCol; i <= aRef.Ref2.nCol; ++i) - { - aRefPos.SetCol(i); - const double* pArray = mrDoc.FetchDoubleArray(mrCxt, aRefPos, nArrayLength); - if (!pArray) - return false; - aArrays.push_back(pArray); - } - - formula::DoubleVectorRefToken aTok(aArrays, nArrayLength, nRefRowSize, bAbsFirst, bAbsLast); - mrGroupTokens.AddToken(aTok); - } - else + // Row reference is relative. + bool bAbsFirst = !aRef.Ref1.IsRowRel(); + bool bAbsLast = !aRef.Ref2.IsRowRel(); + ScAddress aRefPos(aRef.Ref1.nCol, aRef.Ref1.nRow, aRef.Ref1.nTab); + size_t nCols = aRef.Ref2.nCol - aRef.Ref1.nCol + 1; + std::vector<const double*> aArrays; + aArrays.reserve(nCols); + SCROW nArrayLength = mrCell.GetCellGroup()->mnLength; + SCROW nRefRowSize = aRef.Ref2.nRow - aRef.Ref1.nRow + 1; + if (!bAbsLast) { - // Absolute row reference. - ScRange aRefRange( - aRef.Ref1.nCol, aRef.Ref1.nRow, aRef.Ref1.nTab, - aRef.Ref2.nCol, aRef.Ref2.nRow, aRef.Ref2.nTab); + // range end position is relative. Extend the array length. + nArrayLength += nRefRowSize - 1; + } - formula::FormulaTokenRef pNewToken = mrDoc.ResolveStaticReference(aRefRange); - if (!pNewToken) + for (SCCOL i = aRef.Ref1.nCol; i <= aRef.Ref2.nCol; ++i) + { + aRefPos.SetCol(i); + const double* pArray = mrDoc.FetchDoubleArray(mrCxt, aRefPos, nArrayLength); + if (!pArray) return false; - mrGroupTokens.AddToken(*pNewToken); + aArrays.push_back(pArray); } + + formula::DoubleVectorRefToken aTok(aArrays, nArrayLength, nRefRowSize, bAbsFirst, bAbsLast); + mrGroupTokens.AddToken(aTok); } break; case svIndex: _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits