diff options
author | Bartosz Kosiorek <gang65@poczta.onet.pl> | 2017-01-03 23:25:51 +0100 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2017-01-12 21:04:06 +0000 |
commit | 5e223be2102a171c857be8db1327f23faea0ef78 (patch) | |
tree | 6a0cb08be276efd384012fb6b17bd4363d746e00 | |
parent | 80e261cec7a90272f8820a36cca4c751a90916f5 (diff) |
tdf#50916 Use aCol.size() instead of MAXCOL to increase max number of column
Currently when we are increasing MAXCOL variable, the memory usage and
performance are increase dramatically. To resolve that, columns
needs to be created dynamically according to needs.
This patch replace hardcoded MAXCOL with aCol.size().
It is next step to make creation of columns dynamic.
Change-Id: Ic7b7a76863e063a607165629bdf82699eaa847b3
Reviewed-on: https://gerrit.libreoffice.org/32708
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
-rw-r--r-- | sc/source/core/data/table2.cxx | 69 | ||||
-rw-r--r-- | sc/source/core/data/table4.cxx | 8 | ||||
-rw-r--r-- | sc/source/core/data/table6.cxx | 23 | ||||
-rw-r--r-- | sc/source/core/data/table7.cxx | 6 |
4 files changed, 57 insertions, 49 deletions
diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx index f94e732d74db..9814b659daff 100644 --- a/sc/source/core/data/table2.cxx +++ b/sc/source/core/data/table2.cxx @@ -716,7 +716,7 @@ void ScTable::MixMarked( sc::MixDocContext& rCxt, const ScMarkData& rMark, ScPasteFunc nFunction, bool bSkipEmpty, const ScTable* pSrcTab ) { - for (SCCOL i=0; i<=MAXCOL; i++) + for (SCCOL i=0; i < aCol.size(); i++) aCol[i].MixMarked(rCxt, rMark, nFunction, bSkipEmpty, pSrcTab->aCol[i]); } @@ -1036,7 +1036,7 @@ void ScTable::StartListeners( sc::StartListeningContext& rCxt, bool bAll ) std::shared_ptr<const sc::ColumnSet> pColSet = rCxt.getColumnSet(); if (!pColSet) { - for (SCCOL i=0; i<=MAXCOL; i++) + for (SCCOL i=0; i < aCol.size(); i++) aCol[i].StartListeners(rCxt, bAll); } else if (pColSet->hasTab( nTab)) @@ -1045,7 +1045,7 @@ void ScTable::StartListeners( sc::StartListeningContext& rCxt, bool bAll ) pColSet->getColumns( nTab, aColumns); for (auto i : aColumns) { - if (0 <= i && i <= MAXCOL) + if (0 <= i && i < aCol.size()) aCol[i].StartListeners(rCxt, bAll); } } @@ -1238,7 +1238,7 @@ void ScTable::UndoToTable( bool bWidth = (nRow1==0 && nRow2==MAXROW && pColWidth && pDestTab->pColWidth); bool bHeight = (nCol1==0 && nCol2==MAXCOL && mpRowHeights && pDestTab->mpRowHeights); - for ( SCCOL i = 0; i <= MAXCOL; i++) + for ( SCCOL i = 0; i < aCol.size(); i++) { if ( i >= nCol1 && i <= nCol2 ) aCol[i].UndoToColumn(rCxt, nRow1, nRow2, nFlags, bMarked, pDestTab->aCol[i]); @@ -1268,7 +1268,7 @@ void ScTable::UndoToTable( void ScTable::CopyUpdated( const ScTable* pPosTab, ScTable* pDestTab ) const { - for (SCCOL i=0; i<=MAXCOL; i++) + for (SCCOL i=0; i < aCol.size(); i++) aCol[i].CopyUpdated( pPosTab->aCol[i], pDestTab->aCol[i] ); } @@ -1286,7 +1286,7 @@ void ScTable::CopyScenarioTo( ScTable* pDestTab ) const { OSL_ENSURE( bScenario, "bScenario == FALSE" ); - for (SCCOL i=0; i<=MAXCOL; i++) + for (SCCOL i=0; i < aCol.size(); i++) aCol[i].CopyScenarioTo( pDestTab->aCol[i] ); } @@ -1294,7 +1294,7 @@ void ScTable::CopyScenarioFrom( const ScTable* pSrcTab ) { OSL_ENSURE( bScenario, "bScenario == FALSE" ); - for (SCCOL i=0; i<=MAXCOL; i++) + for (SCCOL i=0; i < aCol.size(); i++) aCol[i].CopyScenarioFrom( pSrcTab->aCol[i] ); } @@ -1305,7 +1305,7 @@ void ScTable::MarkScenarioIn( ScMarkData& rDestMark, ScScenarioFlags nNeededBits if ( ( nScenarioFlags & nNeededBits ) != nNeededBits ) // Are all Bits set? return; - for (SCCOL i=0; i<=MAXCOL; i++) + for (SCCOL i=0; i < aCol.size(); i++) aCol[i].MarkScenarioIn( rDestMark ); } @@ -1360,7 +1360,7 @@ bool ScTable::TestCopyScenarioTo( const ScTable* pDestTab ) const return true; bool bOk = true; - for (SCCOL i=0; i<=MAXCOL && bOk; i++) + for (SCCOL i=0; i < aCol.size() && bOk; i++) bOk = aCol[i].TestCopyScenarioTo( pDestTab->aCol[i] ); return bOk; } @@ -1583,7 +1583,7 @@ SCROW ScTable::GetNotePosition( SCCOL nCol, size_t nIndex ) const void ScTable::CreateAllNoteCaptions() { - for (SCCOL i = 0; i <= MAXCOL; ++i) + for (SCCOL i = 0; i < aCol.size(); ++i) aCol[i].CreateAllNoteCaptions(); } @@ -1598,7 +1598,7 @@ void ScTable::ForgetNoteCaptions( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW n void ScTable::GetAllNoteEntries( std::vector<sc::NoteEntry>& rNotes ) const { - for (SCCOL nCol = 0; nCol < MAXCOLCOUNT; ++nCol) + for (SCCOL nCol = 0; nCol < aCol.size(); ++nCol) aCol[nCol].GetAllNoteEntries(rNotes); } @@ -1645,10 +1645,10 @@ void ScTable::GetFirstDataPos(SCCOL& rCol, SCROW& rRow) const { rCol = 0; rRow = MAXROW+1; - while (aCol[rCol].IsEmptyData() && rCol < MAXCOL) + while (aCol[rCol].IsEmptyData() && rCol < aCol.size() - 1 ) ++rCol; SCCOL nCol = rCol; - while (nCol <= MAXCOL && rRow > 0) + while (nCol < aCol.size() && rRow > 0) { if (!aCol[nCol].IsEmptyData()) rRow = ::std::min( rRow, aCol[nCol].GetFirstDataPos()); @@ -1658,7 +1658,7 @@ void ScTable::GetFirstDataPos(SCCOL& rCol, SCROW& rRow) const void ScTable::GetLastDataPos(SCCOL& rCol, SCROW& rRow) const { - rCol = MAXCOL; + rCol = aCol.size() - 1; rRow = 0; while (aCol[rCol].IsEmptyData() && (rCol > 0)) rCol--; @@ -1704,7 +1704,7 @@ bool ScTable::HasStringCells( SCCOL nStartCol, SCROW nStartRow, void ScTable::SetDirtyVar() { - for (SCCOL i=0; i<=MAXCOL; i++) + for (SCCOL i=0; i < aCol.size(); i++) aCol[i].SetDirtyVar(); } @@ -1712,7 +1712,7 @@ void ScTable::CheckVectorizationState() { sc::AutoCalcSwitch aACSwitch(*pDocument, false); - for (SCCOL i = 0; i <= MAXCOL; i++) + for (SCCOL i = 0; i < aCol.size(); i++) aCol[i].CheckVectorizationState(); } @@ -1720,7 +1720,7 @@ void ScTable::SetAllFormulasDirty( const sc::SetFormulaDirtyContext& rCxt ) { sc::AutoCalcSwitch aACSwitch(*pDocument, false); - for (SCCOL i=0; i<=MAXCOL; i++) + for (SCCOL i=0; i < aCol.size(); i++) aCol[i].SetAllFormulasDirty(rCxt); } @@ -1748,7 +1748,7 @@ void ScTable::SetDirtyAfterLoad() { bool bOldAutoCalc = pDocument->GetAutoCalc(); pDocument->SetAutoCalc( false ); // avoid multiple recalculations - for (SCCOL i=0; i<=MAXCOL; i++) + for (SCCOL i=0; i < aCol.size(); i++) aCol[i].SetDirtyAfterLoad(); pDocument->SetAutoCalc( bOldAutoCalc ); } @@ -1757,7 +1757,7 @@ void ScTable::SetDirtyIfPostponed() { bool bOldAutoCalc = pDocument->GetAutoCalc(); pDocument->SetAutoCalc( false ); // avoid multiple recalculations - for (SCCOL i=0; i<=MAXCOL; i++) + for (SCCOL i=0; i < aCol.size(); i++) aCol[i].SetDirtyIfPostponed(); pDocument->SetAutoCalc( bOldAutoCalc ); } @@ -1765,7 +1765,7 @@ void ScTable::SetDirtyIfPostponed() void ScTable::BroadcastRecalcOnRefMove() { sc::AutoCalcSwitch aSwitch(*pDocument, false); - for (SCCOL i = 0; i <= MAXCOL; ++i) + for (SCCOL i = 0; i < aCol.size(); ++i) aCol[i].BroadcastRecalcOnRefMove(); } @@ -1798,12 +1798,13 @@ void ScTable::SetLoadingMedium(bool bLoading) void ScTable::CalcAll() { - for (SCCOL i=0; i<=MAXCOL; i++) aCol[i].CalcAll(); + for (SCCOL i=0; i < aCol.size(); i++) + aCol[i].CalcAll(); } void ScTable::CompileAll( sc::CompileFormulaContext& rCxt ) { - for (SCCOL i = 0; i <= MAXCOL; ++i) + for (SCCOL i = 0; i < aCol.size(); ++i) aCol[i].CompileAll(rCxt); if(mpCondFormatList) @@ -1815,7 +1816,7 @@ void ScTable::CompileXML( sc::CompileFormulaContext& rCxt, ScProgress& rProgress if (mpRangeName) mpRangeName->CompileUnresolvedXML(rCxt); - for (SCCOL i=0; i <= MAXCOL; i++) + for (SCCOL i=0; i < aCol.size(); i++) { aCol[i].CompileXML(rCxt, rProgress); } @@ -1827,7 +1828,7 @@ void ScTable::CompileXML( sc::CompileFormulaContext& rCxt, ScProgress& rProgress bool ScTable::CompileErrorCells( sc::CompileFormulaContext& rCxt, FormulaError nErrCode ) { bool bCompiled = false; - for (SCCOL i = 0; i <= MAXCOL; ++i) + for (SCCOL i = 0; i < aCol.size(); ++i) { if (aCol[i].CompileErrorCells(rCxt, nErrCode)) bCompiled = true; @@ -1838,7 +1839,7 @@ bool ScTable::CompileErrorCells( sc::CompileFormulaContext& rCxt, FormulaError n void ScTable::CalcAfterLoad( sc::CompileFormulaContext& rCxt, bool bStartListening ) { - for (SCCOL i = 0; i <= MAXCOL; ++i) + for (SCCOL i = 0; i < aCol.size(); ++i) aCol[i].CalcAfterLoad(rCxt, bStartListening); } @@ -2400,7 +2401,7 @@ void ScTable::UnlockTable() void ScTable::MergeSelectionPattern( ScMergePatternState& rState, const ScMarkData& rMark, bool bDeep ) const { - for (SCCOL i=0; i<=MAXCOL; i++) + for (SCCOL i=0; i < aCol.size(); i++) aCol[i].MergeSelectionPattern( rState, rMark, bDeep ); } @@ -2518,7 +2519,7 @@ void ScTable::ApplyStyleArea( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, S void ScTable::ApplySelectionStyle(const ScStyleSheet& rStyle, const ScMarkData& rMark) { - for (SCCOL i=0; i<=MAXCOL; i++) + for (SCCOL i=0; i < aCol.size(); i++) aCol[i].ApplySelectionStyle( rStyle, rMark ); } @@ -2528,7 +2529,7 @@ void ScTable::ApplySelectionLineStyle( const ScMarkData& rMark, if ( bColorOnly && !pLine ) return; - for (SCCOL i=0; i<=MAXCOL; i++) + for (SCCOL i=0; i < aCol.size(); i++) aCol[i].ApplySelectionLineStyle( rMark, pLine, bColorOnly ); } @@ -2550,7 +2551,7 @@ const ScStyleSheet* ScTable::GetSelectionStyle( const ScMarkData& rMark, bool& r const ScStyleSheet* pStyle = nullptr; const ScStyleSheet* pNewStyle; - for (SCCOL i=0; i<=MAXCOL && bEqual; i++) + for (SCCOL i=0; i < aCol.size() && bEqual; i++) if (rMark.HasMultiMarks(i)) { pNewStyle = aCol[i].GetSelectionStyle( rMark, bColFound ); @@ -2596,7 +2597,7 @@ bool ScTable::IsStyleSheetUsed( const ScStyleSheet& rStyle ) const { bool bIsUsed = false; - for ( SCCOL i=0; i<=MAXCOL; i++ ) + for ( SCCOL i=0; i < aCol.size(); i++ ) { if ( aCol[i].IsStyleSheetUsed( rStyle ) ) { @@ -2613,7 +2614,7 @@ void ScTable::StyleSheetChanged( const SfxStyleSheetBase* pStyleSheet, bool bRem const Fraction& rZoomX, const Fraction& rZoomY ) { ScFlatBoolRowSegments aUsedRows; - for (SCCOL i = 0; i <= MAXCOL; ++i) + for (SCCOL i = 0; i < aCol.size(); ++i) aCol[i].FindStyleSheet(pStyleSheet, aUsedRows, bRemoved); sc::RowHeightContext aCxt(nPPTX, nPPTY, rZoomX, rZoomY, pDev); @@ -2668,19 +2669,19 @@ void ScTable::ApplyAttr( SCCOL nCol, SCROW nRow, const SfxPoolItem& rAttr ) void ScTable::ApplySelectionCache( SfxItemPoolCache* pCache, const ScMarkData& rMark, ScEditDataArray* pDataArray ) { - for (SCCOL i=0; i<=MAXCOL; i++) + for (SCCOL i=0; i < aCol.size(); i++) aCol[i].ApplySelectionCache( pCache, rMark, pDataArray ); } void ScTable::ChangeSelectionIndent( bool bIncrement, const ScMarkData& rMark ) { - for (SCCOL i=0; i<=MAXCOL; i++) + for (SCCOL i=0; i < aCol.size(); i++) aCol[i].ChangeSelectionIndent( bIncrement, rMark ); } void ScTable::ClearSelectionItems( const sal_uInt16* pWhich, const ScMarkData& rMark ) { - for (SCCOL i=0; i<=MAXCOL; i++) + for (SCCOL i=0; i < aCol.size(); i++) aCol[i].ClearSelectionItems( pWhich, rMark ); } diff --git a/sc/source/core/data/table4.cxx b/sc/source/core/data/table4.cxx index aa7e44251c9f..693106d58999 100644 --- a/sc/source/core/data/table4.cxx +++ b/sc/source/core/data/table4.cxx @@ -2226,7 +2226,7 @@ void ScTable::SetError( SCCOL nCol, SCROW nRow, FormulaError nError) void ScTable::UpdateInsertTabAbs(SCTAB nTable) { - for (SCCOL i=0; i <= MAXCOL; i++) + for (SCCOL i=0; i < aCol.size(); i++) aCol[i].UpdateInsertTabAbs(nTable); } @@ -2274,20 +2274,20 @@ bool ScTable::GetNextSpellingCell(SCCOL& rCol, SCROW& rRow, bool bInSel, void ScTable::TestTabRefAbs(SCTAB nTable) const { - for (SCCOL i=0; i <= MAXCOL; i++) + for (SCCOL i=0; i < aCol.size(); i++) if (aCol[i].TestTabRefAbs(nTable)) return; } void ScTable::CompileDBFormula( sc::CompileFormulaContext& rCxt ) { - for (SCCOL i = 0; i <= MAXCOL; ++i) + for (SCCOL i = 0; i < aCol.size(); ++i) aCol[i].CompileDBFormula(rCxt); } void ScTable::CompileColRowNameFormula( sc::CompileFormulaContext& rCxt ) { - for (SCCOL i = 0; i <= MAXCOL; ++i) + for (SCCOL i = 0; i < aCol.size(); ++i) aCol[i].CompileColRowNameFormula(rCxt); } diff --git a/sc/source/core/data/table6.cxx b/sc/source/core/data/table6.cxx index 636ca5629592..953931114f37 100644 --- a/sc/source/core/data/table6.cxx +++ b/sc/source/core/data/table6.cxx @@ -631,21 +631,28 @@ bool ScTable::SearchStyle(const SvxSearchItem& rSearchItem, SCCOL& rCol, SCROW& } while (!bFound && ValidCol(nCol)); } - else // by column + else // by column { - SCsROW nNextRows[MAXCOLCOUNT]; + SCsCOL aColSize = aCol.size(); + std::vector< SCsROW > nNextRows ( aColSize ); SCsCOL i; - for (i=0; i<=MAXCOL; i++) + for (i=0; i < aColSize; ++i) { SCsROW nSRow = nRow; - if (bBack) { if (i>=nCol) --nSRow; } - else { if (i<=nCol) ++nSRow; } + if (bBack) + { + if (i>=nCol) --nSRow; + } + else + { + if (i<=nCol) ++nSRow; + } nNextRows[i] = aCol[i].SearchStyle( nSRow, pSearchStyle, bBack, bSelect, rMark ); } if (bBack) // backwards { nRow = -1; - for (i=MAXCOL; i>=0; i--) + for (i = aColSize - 1; i>=0; --i) if (nNextRows[i]>nRow) { nCol = i; @@ -656,7 +663,7 @@ bool ScTable::SearchStyle(const SvxSearchItem& rSearchItem, SCCOL& rCol, SCROW& else // forwards { nRow = MAXROW+1; - for (i=0; i<=MAXCOL; i++) + for (i=0; i < aColSize; ++i) if (nNextRows[i]<nRow) { nCol = i; @@ -711,7 +718,7 @@ bool ScTable::SearchAllStyle( bool bBack = rSearchItem.GetBackward(); bool bEverFound = false; - for (SCCOL i=0; i<=MAXCOL; i++) + for (SCCOL i=0; i < aCol.size(); ++i) { bool bFound = true; SCsROW nRow = 0; diff --git a/sc/source/core/data/table7.cxx b/sc/source/core/data/table7.cxx index d4cd767ec256..a84942912aa5 100644 --- a/sc/source/core/data/table7.cxx +++ b/sc/source/core/data/table7.cxx @@ -124,21 +124,21 @@ void ScTable::SwapNonEmpty( void ScTable::PreprocessRangeNameUpdate( sc::EndListeningContext& rEndListenCxt, sc::CompileFormulaContext& rCompileCxt ) { - for (SCCOL i = 0; i <= MAXCOL; ++i) + for (SCCOL i = 0; i < aCol.size(); ++i) aCol[i].PreprocessRangeNameUpdate(rEndListenCxt, rCompileCxt); } void ScTable::PreprocessDBDataUpdate( sc::EndListeningContext& rEndListenCxt, sc::CompileFormulaContext& rCompileCxt ) { - for (SCCOL i = 0; i <= MAXCOL; ++i) + for (SCCOL i = 0; i < aCol.size(); ++i) aCol[i].PreprocessDBDataUpdate(rEndListenCxt, rCompileCxt); } void ScTable::CompileHybridFormula( sc::StartListeningContext& rStartListenCxt, sc::CompileFormulaContext& rCompileCxt ) { - for (SCCOL i = 0; i <= MAXCOL; ++i) + for (SCCOL i = 0; i < aCol.size(); ++i) aCol[i].CompileHybridFormula(rStartListenCxt, rCompileCxt); } |