Kaydet (Commit) 878a5dab authored tarafından Kohei Yoshida's avatar Kohei Yoshida

fdo#74650: Speed up GetFilteredFilterEntries().

Change-Id: I1b3ae601726401a0e70fb1a05b9a90c43773794c
üst 2d843bb1
......@@ -460,7 +460,10 @@ public:
/// Including current, may return -1
SCsROW GetNextUnprotected( SCROW nRow, bool bUp ) const;
void GetFilterEntries(SCROW nStartRow, SCROW nEndRow, std::vector<ScTypedStrData>& rStrings, bool& rHasDates);
void GetFilterEntries(
sc::ColumnBlockConstPosition& rBlockPos, SCROW nStartRow, SCROW nEndRow,
std::vector<ScTypedStrData>& rStrings, bool& rHasDates );
bool GetDataEntries( SCROW nRow, std::set<ScTypedStrData>& rStrings, bool bLimit ) const;
void UpdateInsertTabAbs(SCTAB nNewPos);
......
......@@ -2047,10 +2047,13 @@ public:
}
void ScColumn::GetFilterEntries(SCROW nStartRow, SCROW nEndRow, std::vector<ScTypedStrData>& rStrings, bool& rHasDates)
void ScColumn::GetFilterEntries(
sc::ColumnBlockConstPosition& rBlockPos, SCROW nStartRow, SCROW nEndRow,
std::vector<ScTypedStrData>& rStrings, bool& rHasDates )
{
FilterEntriesHandler aFunc(*this, rStrings);
sc::ParseAllNonEmpty(maCells.begin(), maCells, nStartRow, nEndRow, aFunc);
rBlockPos.miCellPos =
sc::ParseAllNonEmpty(rBlockPos.miCellPos, maCells, nStartRow, nEndRow, aFunc);
rHasDates = aFunc.hasDates();
}
......
......@@ -2556,12 +2556,17 @@ bool ScTable::HasRowHeader( SCCOL nStartCol, SCROW nStartRow, SCCOL /* nEndCol *
void ScTable::GetFilterEntries(SCCOL nCol, SCROW nRow1, SCROW nRow2, std::vector<ScTypedStrData>& rStrings, bool& rHasDates)
{
aCol[nCol].GetFilterEntries( nRow1, nRow2, rStrings, rHasDates );
sc::ColumnBlockConstPosition aBlockPos;
aCol[nCol].InitBlockPosition(aBlockPos);
aCol[nCol].GetFilterEntries(aBlockPos, nRow1, nRow2, rStrings, rHasDates);
}
void ScTable::GetFilteredFilterEntries(
SCCOL nCol, SCROW nRow1, SCROW nRow2, const ScQueryParam& rParam, std::vector<ScTypedStrData>& rStrings, bool& rHasDates)
{
sc::ColumnBlockConstPosition aBlockPos;
aCol[nCol].InitBlockPosition(aBlockPos);
// remove the entry for this column from the query parameter
ScQueryParam aParam( rParam );
aParam.RemoveEntryByField(nCol);
......@@ -2573,7 +2578,7 @@ void ScTable::GetFilteredFilterEntries(
if (ValidQuery(j, aParam))
{
bool bThisHasDates = false;
aCol[nCol].GetFilterEntries( j, j, rStrings, bThisHasDates );
aCol[nCol].GetFilterEntries(aBlockPos, j, j, rStrings, bThisHasDates);
bHasDates |= bThisHasDates;
}
}
......
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