Kaydet (Commit) 1cf19ea8 authored tarafından Markus Mohrhard's avatar Markus Mohrhard

don't call ScMarkData::GetMarkedRanges in ScColumn, related fdo#79422

This drops the calls to ScMarkData::GetMarkedRanges by a factor of 1k.

Change-Id: I12b1ab3877120a1fbccaccaa7996cbb7efe948b6
üst 17f6f60c
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include "global.hxx" #include "global.hxx"
#include "address.hxx" #include "address.hxx"
#include "rangenam.hxx" #include "rangenam.hxx"
#include "rangelst.hxx"
#include "types.hxx" #include "types.hxx"
#include "mtvelements.hxx" #include "mtvelements.hxx"
#include <formula/types.hxx> #include <formula/types.hxx>
...@@ -262,7 +263,7 @@ public: ...@@ -262,7 +263,7 @@ public:
ScAttrIterator* CreateAttrIterator( SCROW nStartRow, SCROW nEndRow ) const; ScAttrIterator* CreateAttrIterator( SCROW nStartRow, SCROW nEndRow ) const;
void UpdateSelectionFunction( void UpdateSelectionFunction(
const ScMarkData& rMark, ScFunctionData& rData, ScFlatBoolRowSegments& rHiddenRows ); const ScRangeList& rRanges, ScFunctionData& rData, ScFlatBoolRowSegments& rHiddenRows );
void CopyToColumn( void CopyToColumn(
sc::CopyToDocContext& rCxt, SCROW nRow1, SCROW nRow2, sal_uInt16 nFlags, bool bMarked, sc::CopyToDocContext& rCxt, SCROW nRow1, SCROW nRow2, sal_uInt16 nFlags, bool bMarked,
......
...@@ -20,6 +20,7 @@ class ScDocument; ...@@ -20,6 +20,7 @@ class ScDocument;
class ScColumn; class ScColumn;
class ScMarkData; class ScMarkData;
class ScRange; class ScRange;
class ScRangeList;
namespace sc { namespace sc {
...@@ -132,6 +133,8 @@ public: ...@@ -132,6 +133,8 @@ public:
*/ */
void scan(const ScMarkData& rMark, SCTAB nTab, SCCOL nCol); void scan(const ScMarkData& rMark, SCTAB nTab, SCCOL nCol);
void scan(const ScRangeList& rRanges, SCTAB nTab, SCCOL nCol);
void set(SCROW nRow1, SCROW nRow2, bool bVal); void set(SCROW nRow1, SCROW nRow2, bool bVal);
void getRows(std::vector<SCROW> &rRows) const; void getRows(std::vector<SCROW> &rRows) const;
......
...@@ -3069,10 +3069,10 @@ public: ...@@ -3069,10 +3069,10 @@ public:
// multiple selections: // multiple selections:
void ScColumn::UpdateSelectionFunction( void ScColumn::UpdateSelectionFunction(
const ScMarkData& rMark, ScFunctionData& rData, ScFlatBoolRowSegments& rHiddenRows ) const ScRangeList& rRanges, ScFunctionData& rData, ScFlatBoolRowSegments& rHiddenRows )
{ {
sc::SingleColumnSpanSet aSpanSet; sc::SingleColumnSpanSet aSpanSet;
aSpanSet.scan(rMark, nTab, nCol); // mark all selected rows. aSpanSet.scan(rRanges, nTab, nCol); // mark all selected rows.
// Exclude all hidden rows. // Exclude all hidden rows.
ScFlatBoolRowSegments::RangeData aRange; ScFlatBoolRowSegments::RangeData aRange;
......
...@@ -278,9 +278,17 @@ void SingleColumnSpanSet::scan(const ScMarkData& rMark, SCTAB nTab, SCCOL nCol) ...@@ -278,9 +278,17 @@ void SingleColumnSpanSet::scan(const ScMarkData& rMark, SCTAB nTab, SCCOL nCol)
return; return;
ScRangeList aRanges = rMark.GetMarkedRanges(); ScRangeList aRanges = rMark.GetMarkedRanges();
for (size_t i = 0, n = aRanges.size(); i < n; ++i) scan(aRanges, nTab, nCol);
}
void SingleColumnSpanSet::scan(const ScRangeList& rRanges, SCTAB nTab, SCCOL nCol)
{
for (size_t i = 0, n = rRanges.size(); i < n; ++i)
{ {
const ScRange* p = aRanges[i]; const ScRange* p = rRanges[i];
if (nTab < p->aStart.Tab() || p->aEnd.Tab() < nTab)
continue;
if (nCol < p->aStart.Col() || p->aEnd.Col() < nCol) if (nCol < p->aStart.Col() || p->aEnd.Col() < nCol)
// This column is not in this range. Skip it. // This column is not in this range. Skip it.
continue; continue;
......
...@@ -61,6 +61,7 @@ ...@@ -61,6 +61,7 @@
#include <refhint.hxx> #include <refhint.hxx>
#include <listenerquery.hxx> #include <listenerquery.hxx>
#include <bcaslot.hxx> #include <bcaslot.hxx>
#include "rangelst.hxx"
#include <svl/sharedstringpool.hxx> #include <svl/sharedstringpool.hxx>
...@@ -2971,12 +2972,13 @@ sal_Int32 ScTable::GetMaxNumberStringLen( ...@@ -2971,12 +2972,13 @@ sal_Int32 ScTable::GetMaxNumberStringLen(
void ScTable::UpdateSelectionFunction( ScFunctionData& rData, const ScMarkData& rMark ) void ScTable::UpdateSelectionFunction( ScFunctionData& rData, const ScMarkData& rMark )
{ {
ScRangeList aRanges = rMark.GetMarkedRanges();
for (SCCOL nCol = 0; nCol <= MAXCOL && !rData.bError; ++nCol) for (SCCOL nCol = 0; nCol <= MAXCOL && !rData.bError; ++nCol)
{ {
if (pColFlags && ColHidden(nCol)) if (pColFlags && ColHidden(nCol))
continue; continue;
aCol[nCol].UpdateSelectionFunction(rMark, rData, *mpHiddenRows); aCol[nCol].UpdateSelectionFunction(aRanges, rData, *mpHiddenRows);
} }
} }
......
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