optimize ScColumn::HandleRefArrayForParallelism()
Change-Id: I53b7f514be2e015445eb9cb0471c22d41c464e4e Reviewed-on: https://gerrit.libreoffice.org/54767 Reviewed-by: Michael Meeks <michael.meeks@collabora.com> Tested-by: Michael Meeks <michael.meeks@collabora.com>
This commit is contained in:
committed by
Michael Meeks
parent
8f7eb6edfa
commit
3a80179953
@@ -2818,14 +2818,37 @@ bool ScColumn::HandleRefArrayForParallelism( SCROW nRow1, SCROW nRow2 )
|
|||||||
if (nRow1 > nRow2)
|
if (nRow1 > nRow2)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
for (auto i = nRow1; i <= nRow2; ++i)
|
std::pair<sc::CellStoreType::const_iterator,size_t> aPos = maCells.position(nRow1);
|
||||||
|
sc::CellStoreType::const_iterator it = aPos.first;
|
||||||
|
size_t nOffset = aPos.second;
|
||||||
|
SCROW nRow = nRow1;
|
||||||
|
for (;it != maCells.end() && nRow <= nRow2; ++it, nOffset = 0)
|
||||||
{
|
{
|
||||||
auto aCell = GetCellValue(i);
|
switch( it->type )
|
||||||
if (aCell.meType == CELLTYPE_FORMULA)
|
{
|
||||||
aCell.mpFormula->MaybeInterpret();
|
case sc::element_type_edittext:
|
||||||
// These require EditEngine (in ScEditUtils::GetString()), which is probably too complex for use in threads.
|
// These require EditEngine (in ScEditUtils::GetString()), which is probably
|
||||||
if (aCell.meType == CELLTYPE_EDIT)
|
// too complex for use in threads.
|
||||||
return false;
|
return false;
|
||||||
|
case sc::element_type_formula:
|
||||||
|
{
|
||||||
|
size_t nRowsToRead = nRow2 - nRow + 1;
|
||||||
|
size_t nEnd = std::min(it->size, nOffset+nRowsToRead); // last row + 1
|
||||||
|
sc::formula_block::const_iterator itCell = sc::formula_block::begin(*it->data);
|
||||||
|
std::advance(itCell, nOffset);
|
||||||
|
for (size_t i = nOffset; i < nEnd; ++itCell, ++i)
|
||||||
|
{
|
||||||
|
// Loop inside the formula block.
|
||||||
|
(*itCell)->MaybeInterpret();
|
||||||
|
}
|
||||||
|
nRow += nEnd;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
// Skip this block.
|
||||||
|
nRow += it->size - nOffset;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
Reference in New Issue
Block a user