Kaydet (Commit) 3a801799 authored tarafından Luboš Luňák's avatar Luboš Luňák Kaydeden (comit) Michael Meeks

optimize ScColumn::HandleRefArrayForParallelism()

Change-Id: I53b7f514be2e015445eb9cb0471c22d41c464e4e
Reviewed-on: https://gerrit.libreoffice.org/54767Reviewed-by: 's avatarMichael Meeks <michael.meeks@collabora.com>
Tested-by: 's avatarMichael Meeks <michael.meeks@collabora.com>
üst 8f7eb6ed
...@@ -2818,14 +2818,37 @@ bool ScColumn::HandleRefArrayForParallelism( SCROW nRow1, SCROW nRow2 ) ...@@ -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;
......
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