sc/source/ui/docshell/autostyl.cxx | 23 - sc/source/ui/docshell/datastream.cxx | 5 sc/source/ui/docshell/dbdocfun.cxx | 16 - sc/source/ui/docshell/docfunc.cxx | 367 ++++++++++++++++-------------- sc/source/ui/docshell/docfuncutil.cxx | 22 - sc/source/ui/docshell/docsh.cxx | 4 sc/source/ui/docshell/docsh4.cxx | 5 sc/source/ui/docshell/documentlinkmgr.cxx | 4 sc/source/ui/docshell/editable.cxx | 14 - sc/source/ui/docshell/externalrefmgr.cxx | 220 +++++++---------- sc/source/ui/docshell/macromgr.cxx | 9 11 files changed, 334 insertions(+), 355 deletions(-)
New commits: commit 739a3243944d533d94d244d1464c0b8ec49e214c Author: Arkadiy Illarionov <qar...@gmail.com> AuthorDate: Fri Jan 11 01:40:49 2019 +0300 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Tue Jan 15 07:05:18 2019 +0100 Simplify containers iterations in sc/source/ui/docshell Use range-based loop or replace with STL functions Change-Id: I7ab254241ff5b9637ac28282ad0868b3c55a1fb3 Reviewed-on: https://gerrit.libreoffice.org/66135 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/sc/source/ui/docshell/autostyl.cxx b/sc/source/ui/docshell/autostyl.cxx index d7db2e4a7d5a..41458d241159 100644 --- a/sc/source/ui/docshell/autostyl.cxx +++ b/sc/source/ui/docshell/autostyl.cxx @@ -83,15 +83,14 @@ void ScAutoStyleList::AddInitial( const ScRange& rRange, const OUString& rStyle1 IMPL_LINK_NOARG(ScAutoStyleList, InitHdl, Timer *, void) { - std::vector<ScAutoStyleInitData>::iterator iter; - for (iter = aInitials.begin(); iter != aInitials.end(); ++iter) + for (const auto& rInitial : aInitials) { // apply first style immediately - pDocSh->DoAutoStyle(iter->aRange,iter->aStyle1); + pDocSh->DoAutoStyle(rInitial.aRange, rInitial.aStyle1); // add second style to list - if (iter->nTimeout) - AddEntry(iter->nTimeout,iter->aRange,iter->aStyle2 ); + if (rInitial.nTimeout) + AddEntry(rInitial.nTimeout, rInitial.aRange, rInitial.aStyle2 ); } aInitials.clear(); @@ -131,13 +130,12 @@ void ScAutoStyleList::AddEntry( sal_uLong nTimeout, const ScRange& rRange, const void ScAutoStyleList::AdjustEntries( sal_uLong nDiff ) // milliseconds { - std::vector<ScAutoStyleData>::iterator iter; - for (iter = aEntries.begin(); iter != aEntries.end(); ++iter) + for (auto& rEntry : aEntries) { - if (iter->nTimeout <= nDiff) - iter->nTimeout = 0; // expired + if (rEntry.nTimeout <= nDiff) + rEntry.nTimeout = 0; // expired else - iter->nTimeout -= nDiff; // continue counting + rEntry.nTimeout -= nDiff; // continue counting } } @@ -162,9 +160,8 @@ void ScAutoStyleList::ExecuteAllNow() { aTimer.Stop(); - std::vector<ScAutoStyleData>::iterator iter; - for (iter = aEntries.begin(); iter != aEntries.end(); ++iter) - pDocSh->DoAutoStyle(iter->aRange,iter->aStyle); + for (const auto& rEntry : aEntries) + pDocSh->DoAutoStyle(rEntry.aRange, rEntry.aStyle); aEntries.clear(); } diff --git a/sc/source/ui/docshell/datastream.cxx b/sc/source/ui/docshell/datastream.cxx index bbbed185ef35..4e3c700c73f1 100644 --- a/sc/source/ui/docshell/datastream.cxx +++ b/sc/source/ui/docshell/datastream.cxx @@ -477,12 +477,10 @@ void DataStream::Text2Doc() MoveData(); { - std::vector<Cell>::const_iterator it = aLine.maCells.begin(), itEnd = aLine.maCells.end(); SCCOL nCol = maStartRange.aStart.Col(); const char* pLineHead = aLine.maLine.getStr(); - for (; it != itEnd; ++it, ++nCol) + for (const Cell& rCell : aLine.maCells) { - const Cell& rCell = *it; if (rCell.mbValue) { maDocAccess.setNumericCell( @@ -494,6 +492,7 @@ void DataStream::Text2Doc() ScAddress(nCol, mnCurRow, maStartRange.aStart.Tab()), OUString(pLineHead+rCell.maStr.Pos, rCell.maStr.Size, RTL_TEXTENCODING_UTF8)); } + ++nCol; } } diff --git a/sc/source/ui/docshell/dbdocfun.cxx b/sc/source/ui/docshell/dbdocfun.cxx index aec29c4434e8..8a7896a71024 100644 --- a/sc/source/ui/docshell/dbdocfun.cxx +++ b/sc/source/ui/docshell/dbdocfun.cxx @@ -251,12 +251,11 @@ void ScDBDocFunc::ModifyAllDBData( const ScDBCollection& rNewColl, const std::ve std::unique_ptr<ScDBCollection> pUndoColl; bool bRecord = rDoc.IsUndoEnabled(); - std::vector<ScRange>::const_iterator iter; - for (iter = rDelAreaList.begin(); iter != rDelAreaList.end(); ++iter) + for (const auto& rDelArea : rDelAreaList) { // unregistering target in SBA no longer necessary - const ScAddress& rStart = iter->aStart; - const ScAddress& rEnd = iter->aEnd; + const ScAddress& rStart = rDelArea.aStart; + const ScAddress& rEnd = rDelArea.aEnd; rDocShell.DBAreaDeleted( rStart.Tab(), rStart.Col(), rStart.Row(), rEnd.Col()); } @@ -1626,11 +1625,8 @@ void ScDBDocFunc::RefreshPivotTables(const ScDPObject* pDPObj, bool bApi) if (pErrId) return; - std::set<ScDPObject*>::iterator it = aRefs.begin(), itEnd = aRefs.end(); - for (; it != itEnd; ++it) + for (ScDPObject* pObj : aRefs) { - ScDPObject* pObj = *it; - // This action is intentionally not undoable since it modifies cache. UpdatePivotTable(*pObj, false, bApi); } @@ -1663,10 +1659,8 @@ void ScDBDocFunc::RefreshPivotTableGroups(ScDPObject* pDPObj) // We allow pDimData being NULL. const ScDPDimensionSaveData* pDimData = pSaveData->GetExistingDimensionData(); - std::set<ScDPObject*>::iterator it = aRefs.begin(), itEnd = aRefs.end(); - for (; it != itEnd; ++it) + for (ScDPObject* pObj : aRefs) { - ScDPObject* pObj = *it; if (pObj != pDPObj) { pSaveData = pObj->GetSaveData(); diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx index bfea212bd7cc..8f8d642190e5 100644 --- a/sc/source/ui/docshell/docfunc.cxx +++ b/sc/source/ui/docshell/docfunc.cxx @@ -737,10 +737,14 @@ bool ScDocFunc::TransliterateText( const ScMarkData& rMark, TransliterationFlags ScDocumentUniquePtr pUndoDoc(new ScDocument( SCDOCMODE_UNDO )); pUndoDoc->InitUndo( &rDoc, nStartTab, nStartTab ); - ScMarkData::const_iterator itr = rMark.begin(), itrEnd = rMark.end(); - for (; itr != itrEnd && *itr < nTabCount; ++itr) - if (*itr != nStartTab) - pUndoDoc->AddUndoTab( *itr, *itr ); + for (const auto& rTab : rMark) + { + if (rTab >= nTabCount) + break; + + if (rTab != nStartTab) + pUndoDoc->AddUndoTab( rTab, rTab ); + } ScRange aCopyRange = aMarkRange; aCopyRange.aStart.SetTab(0); @@ -1099,11 +1103,9 @@ void ScDocFunc::PutData( const ScAddress& rPos, ScEditEngineDefaulter& rEngine, bRet = SetEditCell(rPos, *pNewData, !bApi); // Set the paragraph attributes back to the EditEngine. - ScMyRememberItemVector::iterator aItr = aRememberItems.begin(); - while (aItr != aRememberItems.end()) + for (const auto& rxItem : aRememberItems) { - rEngine.SetParaAttribs((*aItr)->nIndex, (*aItr)->aItemSet); - ++aItr; + rEngine.SetParaAttribs(rxItem->nIndex, rxItem->aItemSet); } // #i61702# if the content isn't accessed, there's no need to set the UpdateMode again @@ -1415,10 +1417,14 @@ bool ScDocFunc::ApplyStyle( const ScMarkData& rMark, const OUString& rStyleName, SCTAB nStartTab = aMultiRange.aStart.Tab(); SCTAB nTabCount = rDoc.GetTableCount(); pUndoDoc->InitUndo( &rDoc, nStartTab, nStartTab ); - ScMarkData::const_iterator itr = rMark.begin(), itrEnd = rMark.end(); - for (; itr != itrEnd && *itr < nTabCount; ++itr) - if (*itr != nStartTab) - pUndoDoc->AddUndoTab( *itr, *itr ); + for (const auto& rTab : rMark) + { + if (rTab >= nTabCount) + break; + + if (rTab != nStartTab) + pUndoDoc->AddUndoTab( rTab, rTab ); + } ScRange aCopyRange = aMultiRange; aCopyRange.aStart.SetTab(0); @@ -1457,7 +1463,6 @@ bool canInsertCellsByPivot(const ScRange& rRange, const ScMarkData& rMarkData, I return true; const ScDPCollection* pDPs = pDoc->GetDPCollection(); - ScMarkData::const_iterator itBeg = rMarkData.begin(), itEnd = rMarkData.end(); ScRange aRange(rRange); // local copy switch (eCmd) @@ -1470,12 +1475,11 @@ bool canInsertCellsByPivot(const ScRange& rRange, const ScMarkData& rMarkData, I } case INS_CELLSDOWN: { - for (ScMarkData::const_iterator it = itBeg; it != itEnd; ++it) - { - if (pDPs->IntersectsTableByColumns(aRange.aStart.Col(), aRange.aEnd.Col(), aRange.aStart.Row(), *it)) - // This column range cuts through at least one pivot table. Not good. - return false; - } + auto bIntersects = std::any_of(rMarkData.begin(), rMarkData.end(), [&pDPs, &aRange](const SCTAB& rTab) { + return pDPs->IntersectsTableByColumns(aRange.aStart.Col(), aRange.aEnd.Col(), aRange.aStart.Row(), rTab); }); + if (bIntersects) + // This column range cuts through at least one pivot table. Not good. + return false; // Start row must be either at the top or above any pivot tables. if (aRange.aStart.Row() < 0) @@ -1489,10 +1493,10 @@ bool canInsertCellsByPivot(const ScRange& rRange, const ScMarkData& rMarkData, I ScRange aTest(aRange); aTest.aStart.IncRow(-1); // Test one row up. aTest.aEnd.SetRow(aTest.aStart.Row()); - for (ScMarkData::const_iterator it = itBeg; it != itEnd; ++it) + for (const auto& rTab : rMarkData) { - aTest.aStart.SetTab(*it); - aTest.aEnd.SetTab(*it); + aTest.aStart.SetTab(rTab); + aTest.aEnd.SetTab(rTab); if (pDPs->HasTable(aTest)) return false; } @@ -1506,12 +1510,11 @@ bool canInsertCellsByPivot(const ScRange& rRange, const ScMarkData& rMarkData, I } case INS_CELLSRIGHT: { - for (ScMarkData::const_iterator it = itBeg; it != itEnd; ++it) - { - if (pDPs->IntersectsTableByRows(aRange.aStart.Col(), aRange.aStart.Row(), aRange.aEnd.Row(), *it)) - // This column range cuts through at least one pivot table. Not good. - return false; - } + auto bIntersects = std::any_of(rMarkData.begin(), rMarkData.end(), [&pDPs, &aRange](const SCTAB& rTab) { + return pDPs->IntersectsTableByRows(aRange.aStart.Col(), aRange.aStart.Row(), aRange.aEnd.Row(), rTab); }); + if (bIntersects) + // This column range cuts through at least one pivot table. Not good. + return false; // Start row must be either at the top or above any pivot tables. if (aRange.aStart.Col() < 0) @@ -1525,10 +1528,10 @@ bool canInsertCellsByPivot(const ScRange& rRange, const ScMarkData& rMarkData, I ScRange aTest(aRange); aTest.aStart.IncCol(-1); // Test one column to the left. aTest.aEnd.SetCol(aTest.aStart.Col()); - for (ScMarkData::const_iterator it = itBeg; it != itEnd; ++it) + for (const auto& rTab : rMarkData) { - aTest.aStart.SetTab(*it); - aTest.aEnd.SetTab(*it); + aTest.aStart.SetTab(rTab); + aTest.aEnd.SetTab(rTab); if (pDPs->HasTable(aTest)) return false; } @@ -1554,7 +1557,6 @@ bool canDeleteCellsByPivot(const ScRange& rRange, const ScMarkData& rMarkData, D return true; const ScDPCollection* pDPs = pDoc->GetDPCollection(); - ScMarkData::const_iterator itBeg = rMarkData.begin(), itEnd = rMarkData.end(); ScRange aRange(rRange); // local copy @@ -1568,18 +1570,17 @@ bool canDeleteCellsByPivot(const ScRange& rRange, const ScMarkData& rMarkData, D } case DelCellCmd::CellsUp: { - for (ScMarkData::const_iterator it = itBeg; it != itEnd; ++it) - { - if (pDPs->IntersectsTableByColumns(aRange.aStart.Col(), aRange.aEnd.Col(), aRange.aStart.Row(), *it)) - // This column range cuts through at least one pivot table. Not good. - return false; - } + auto bIntersects = std::any_of(rMarkData.begin(), rMarkData.end(), [&pDPs, &aRange](const SCTAB& rTab) { + return pDPs->IntersectsTableByColumns(aRange.aStart.Col(), aRange.aEnd.Col(), aRange.aStart.Row(), rTab); }); + if (bIntersects) + // This column range cuts through at least one pivot table. Not good. + return false; ScRange aTest(aRange); - for (ScMarkData::const_iterator it = itBeg; it != itEnd; ++it) + for (const auto& rTab : rMarkData) { - aTest.aStart.SetTab(*it); - aTest.aEnd.SetTab(*it); + aTest.aStart.SetTab(rTab); + aTest.aEnd.SetTab(rTab); if (pDPs->HasTable(aTest)) return false; } @@ -1593,18 +1594,17 @@ bool canDeleteCellsByPivot(const ScRange& rRange, const ScMarkData& rMarkData, D } case DelCellCmd::CellsLeft: { - for (ScMarkData::const_iterator it = itBeg; it != itEnd; ++it) - { - if (pDPs->IntersectsTableByRows(aRange.aStart.Col(), aRange.aStart.Row(), aRange.aEnd.Row(), *it)) - // This column range cuts through at least one pivot table. Not good. - return false; - } + auto bIntersects = std::any_of(rMarkData.begin(), rMarkData.end(), [&pDPs, &aRange](const SCTAB& rTab) { + return pDPs->IntersectsTableByRows(aRange.aStart.Col(), aRange.aStart.Row(), aRange.aEnd.Row(), rTab); }); + if (bIntersects) + // This column range cuts through at least one pivot table. Not good. + return false; ScRange aTest(aRange); - for (ScMarkData::const_iterator it = itBeg; it != itEnd; ++it) + for (const auto& rTab : rMarkData) { - aTest.aStart.SetTab(*it); - aTest.aEnd.SetTab(*it); + aTest.aStart.SetTab(rTab); + aTest.aEnd.SetTab(rTab); if (pDPs->HasTable(aTest)) return false; } @@ -1675,7 +1675,6 @@ bool ScDocFunc::InsertCells( const ScRange& rRange, const ScMarkData* pTabMark, SCROW nPaintEndRow = nEndRow; PaintPartFlags nPaintFlags = PaintPartFlags::Grid; bool bSuccess; - SCTAB i; ScTabViewShell* pViewSh = rDocShell.GetBestViewShell(); //preserve current cursor position SCCOL nCursorCol = 0; @@ -1695,7 +1694,7 @@ bool ScDocFunc::InsertCells( const ScRange& rRange, const ScMarkData* pTabMark, else { SCTAB nCount = 0; - for( i=0; i<nTabCount; i++ ) + for( SCTAB i=0; i<nTabCount; i++ ) { if( !rDoc.IsScenario(i) ) { @@ -1710,10 +1709,14 @@ bool ScDocFunc::InsertCells( const ScRange& rRange, const ScMarkData* pTabMark, } ScMarkData aFullMark( aMark ); // including scenario sheets - ScMarkData::iterator itr = aMark.begin(), itrEnd = aMark.end(); - for (; itr != itrEnd && *itr < nTabCount; ++itr) - for( SCTAB j = *itr+1; j<nTabCount && rDoc.IsScenario(j); j++ ) + for (const auto& rTab : aMark) + { + if (rTab >= nTabCount) + break; + + for( SCTAB j = rTab+1; j<nTabCount && rDoc.IsScenario(j); j++ ) aFullMark.SelectTable( j, true ); + } SCTAB nSelCount = aMark.GetSelectCount(); @@ -1826,10 +1829,11 @@ bool ScDocFunc::InsertCells( const ScRange& rRange, const ScMarkData* pTabMark, } std::unique_ptr<ScUndoRemoveMerge> pUndoRemoveMerge; - itr = aMark.begin(); - for (; itr != itrEnd && *itr < nTabCount; ++itr) + for (const SCTAB i : aMark) { - i = *itr; + if (i >= nTabCount) + break; + if( rDoc.HasAttrib( nMergeTestStartCol, nMergeTestStartRow, i, nMergeTestEndCol, nMergeTestEndRow, i, HasAttrFlags::Merged | HasAttrFlags::Overlapped ) ) { if (eCmd==INS_CELLSRIGHT) @@ -1937,9 +1941,8 @@ bool ScDocFunc::InsertCells( const ScRange& rRange, const ScMarkData* pTabMark, pUndoRemoveMerge.reset( new ScUndoRemoveMerge( &rDocShell, rRange, std::move(pUndoDoc) )); } - for( ::std::vector<ScRange>::const_iterator iIter( qIncreaseRange.begin()); iIter != qIncreaseRange.end(); ++iIter ) + for( const ScRange& aRange : qIncreaseRange ) { - ScRange aRange( *iIter ); if( rDoc.HasAttrib( aRange, HasAttrFlags::Overlapped | HasAttrFlags::Merged ) ) { UnmergeCells( aRange, bRecord, pUndoRemoveMerge.get() ); @@ -2003,15 +2006,17 @@ bool ScDocFunc::InsertCells( const ScRange& rRange, const ScMarkData* pTabMark, std::unique_ptr<SCTAB[]> pTabs(new SCTAB[nSelCount]); std::unique_ptr<SCTAB[]> pScenarios(new SCTAB[nSelCount]); nUndoPos = 0; - itr = aMark.begin(); - for (; itr != itrEnd && *itr < nTabCount; ++itr) + for (const auto& rTab : aMark) { + if (rTab >= nTabCount) + break; + SCTAB nCount = 0; - for( SCTAB j=*itr+1; j<nTabCount && rDoc.IsScenario(j); j++ ) + for( SCTAB j=rTab+1; j<nTabCount && rDoc.IsScenario(j); j++ ) nCount ++; pScenarios[nUndoPos] = nCount; - pTabs[nUndoPos] = *itr; + pTabs[nUndoPos] = rTab; nUndoPos ++; } @@ -2059,10 +2064,11 @@ bool ScDocFunc::InsertCells( const ScRange& rRange, const ScMarkData* pTabMark, if( bInsertMerge ) rDocShell.GetUndoManager()->LeaveListAction(); - itr = aMark.begin(); - for (; itr != itrEnd && *itr < nTabCount; ++itr) + for (const SCTAB i : aMark) { - i = *itr; + if (i >= nTabCount) + break; + rDoc.SetDrawPageSize(i); if (bNeedRefresh) @@ -2208,10 +2214,14 @@ bool ScDocFunc::DeleteCells( const ScRange& rRange, const ScMarkData* pTabMark, } ScMarkData aFullMark( aMark ); // including scenario sheets - ScMarkData::iterator itr = aMark.begin(), itrEnd = aMark.end(); - for (; itr != itrEnd && *itr < nTabCount; ++itr) - for( SCTAB j = *itr+1; j<nTabCount && rDoc.IsScenario(j); j++ ) + for (const auto& rTab : aMark) + { + if (rTab >= nTabCount) + break; + + for( SCTAB j = rTab+1; j<nTabCount && rDoc.IsScenario(j); j++ ) aFullMark.SelectTable( j, true ); + } SCTAB nSelCount = aMark.GetSelectCount(); @@ -2303,10 +2313,11 @@ bool ScDocFunc::DeleteCells( const ScRange& rRange, const ScMarkData* pTabMark, } std::unique_ptr<ScUndoRemoveMerge> pUndoRemoveMerge; - itr = aMark.begin(); - for (; itr != itrEnd && *itr < nTabCount; ++itr) + for (const SCTAB i : aMark) { - SCTAB i = *itr; + if (i >= nTabCount) + break; + if ( rDoc.HasAttrib( nUndoStartCol, nUndoStartRow, i, nMergeTestEndCol, nMergeTestEndRow, i, HasAttrFlags::Merged | HasAttrFlags::Overlapped )) { SCCOL nMergeStartCol = nUndoStartCol; @@ -2417,9 +2428,8 @@ bool ScDocFunc::DeleteCells( const ScRange& rRange, const ScMarkData* pTabMark, pUndoRemoveMerge.reset( new ScUndoRemoveMerge( &rDocShell, rRange, std::move(pUndoDoc) )); } - for( ::std::vector<ScRange>::const_iterator iIter( qDecreaseRange.begin()); iIter != qDecreaseRange.end(); ++iIter ) + for( const ScRange& aRange : qDecreaseRange ) { - ScRange aRange( *iIter ); if( rDoc.HasAttrib( aRange, HasAttrFlags::Overlapped | HasAttrFlags::Merged ) ) { UnmergeCells( aRange, bRecord, pUndoRemoveMerge.get() ); @@ -2456,15 +2466,17 @@ bool ScDocFunc::DeleteCells( const ScRange& rRange, const ScMarkData* pTabMark, pUndoDoc.reset(new ScDocument( SCDOCMODE_UNDO )); pUndoDoc->InitUndo( &rDoc, 0, nTabCount-1, (eCmd==DelCellCmd::Cols), (eCmd==DelCellCmd::Rows) ); - itr = aMark.begin(); - for (; itr != itrEnd && *itr < nTabCount; ++itr) + for (const auto& rTab : aMark) { + if (rTab >= nTabCount) + break; + SCTAB nScenarioCount = 0; - for( SCTAB j = *itr+1; j<nTabCount && rDoc.IsScenario(j); j++ ) + for( SCTAB j = rTab+1; j<nTabCount && rDoc.IsScenario(j); j++ ) nScenarioCount ++; - rDoc.CopyToDocument( nUndoStartCol, nUndoStartRow, *itr, nUndoEndCol, nUndoEndRow, *itr+nScenarioCount, + rDoc.CopyToDocument( nUndoStartCol, nUndoStartRow, rTab, nUndoEndCol, nUndoEndRow, rTab+nScenarioCount, InsertDeleteFlags::ALL | InsertDeleteFlags::NOCAPTIONS, false, *pUndoDoc ); } @@ -2477,10 +2489,12 @@ bool ScDocFunc::DeleteCells( const ScRange& rRange, const ScMarkData* pTabMark, } sal_uInt16 nExtFlags = 0; - itr = aMark.begin(); - for (; itr != itrEnd && *itr < nTabCount; ++itr) + for (const auto& rTab : aMark) { - rDocShell.UpdatePaintExt( nExtFlags, nStartCol, nStartRow, *itr, nEndCol, nEndRow, *itr ); + if (rTab >= nTabCount) + break; + + rDocShell.UpdatePaintExt( nExtFlags, nStartCol, nStartRow, rTab, nEndCol, nEndRow, rTab ); } bool bUndoOutline = false; @@ -2517,10 +2531,13 @@ bool ScDocFunc::DeleteCells( const ScRange& rRange, const ScMarkData* pTabMark, if ( bRecord ) { - itr = aFullMark.begin(); - itrEnd = aFullMark.end(); - for (; itr != itrEnd && *itr < nTabCount; ++itr) - pRefUndoDoc->DeleteAreaTab(nUndoStartCol,nUndoStartRow,nUndoEndCol,nUndoEndRow, *itr, InsertDeleteFlags::ALL); + for (const auto& rTab : aFullMark) + { + if (rTab >= nTabCount) + break; + + pRefUndoDoc->DeleteAreaTab(nUndoStartCol,nUndoStartRow,nUndoEndCol,nUndoEndRow, rTab, InsertDeleteFlags::ALL); + } // for all sheets, so that formulas can be copied pUndoDoc->AddUndoTab( 0, nTabCount-1 ); @@ -2533,16 +2550,17 @@ bool ScDocFunc::DeleteCells( const ScRange& rRange, const ScMarkData* pTabMark, std::unique_ptr<SCTAB[]> pScenarios( new SCTAB[nSelCount]); SCTAB nUndoPos = 0; - itr = aMark.begin(); - itrEnd = aMark.end(); - for (; itr != itrEnd && *itr < nTabCount; ++itr) + for (const auto& rTab : aMark) { + if (rTab >= nTabCount) + break; + SCTAB nCount = 0; - for( SCTAB j=*itr+1; j<nTabCount && rDoc.IsScenario(j); j++ ) + for( SCTAB j=rTab+1; j<nTabCount && rDoc.IsScenario(j); j++ ) nCount ++; pScenarios[nUndoPos] = nCount; - pTabs[nUndoPos] = *itr; + pTabs[nUndoPos] = rTab; nUndoPos ++; } @@ -2624,53 +2642,56 @@ bool ScDocFunc::DeleteCells( const ScRange& rRange, const ScMarkData* pTabMark, rDoc.ApplyPatternArea( nExtendStartCol, nExtendStartRow, nMergeTestEndCol, nMergeTestEndRow, aMark, aPattern ); - itr = aMark.begin(); - itrEnd = aMark.end(); - for (; itr != itrEnd && *itr < nTabCount; ++itr) + for (const auto& rTab : aMark) { + if (rTab >= nTabCount) + break; + SCTAB nScenarioCount = 0; - for( SCTAB j = *itr+1; j<nTabCount && rDoc.IsScenario(j); j++ ) + for( SCTAB j = rTab+1; j<nTabCount && rDoc.IsScenario(j); j++ ) nScenarioCount ++; - ScRange aMergedRange( nExtendStartCol, nExtendStartRow, *itr, nMergeTestEndCol, nMergeTestEndRow, *itr+nScenarioCount ); + ScRange aMergedRange( nExtendStartCol, nExtendStartRow, rTab, nMergeTestEndCol, nMergeTestEndRow, rTab+nScenarioCount ); rDoc.ExtendMerge( aMergedRange, true ); } } - itr = aMark.begin(); - itrEnd = aMark.end(); - for (; itr != itrEnd && *itr < nTabCount; ++itr) + for (const auto& rTab : aMark) { - rDoc.RefreshAutoFilter( nExtendStartCol, nExtendStartRow, nMergeTestEndCol, nMergeTestEndRow, *itr ); + if (rTab >= nTabCount) + break; + + rDoc.RefreshAutoFilter( nExtendStartCol, nExtendStartRow, nMergeTestEndCol, nMergeTestEndRow, rTab ); } - itr = aMark.begin(); - itrEnd = aMark.end(); - for (; itr != itrEnd && *itr < nTabCount; ++itr) + for (const auto& rTab : aMark) { - rDoc.SetDrawPageSize(*itr); + if (rTab >= nTabCount) + break; + + rDoc.SetDrawPageSize(rTab); if ( eCmd == DelCellCmd::Cols || eCmd == DelCellCmd::Rows ) - rDoc.UpdatePageBreaks( *itr ); + rDoc.UpdatePageBreaks( rTab ); - rDocShell.UpdatePaintExt( nExtFlags, nPaintStartCol, nPaintStartRow, *itr, nPaintEndCol, nPaintEndRow, *itr ); + rDocShell.UpdatePaintExt( nExtFlags, nPaintStartCol, nPaintStartRow, rTab, nPaintEndCol, nPaintEndRow, rTab ); SCTAB nScenarioCount = 0; - for( SCTAB j = *itr+1; j<nTabCount && rDoc.IsScenario(j); j++ ) + for( SCTAB j = rTab+1; j<nTabCount && rDoc.IsScenario(j); j++ ) nScenarioCount ++; // delete entire rows: do not adjust - if ( eCmd == DelCellCmd::Rows || !AdjustRowHeight(ScRange( 0, nPaintStartRow, *itr, MAXCOL, nPaintEndRow, *itr+nScenarioCount )) ) - rDocShell.PostPaint( nPaintStartCol, nPaintStartRow, *itr, nPaintEndCol, nPaintEndRow, *itr+nScenarioCount, nPaintFlags, nExtFlags ); + if ( eCmd == DelCellCmd::Rows || !AdjustRowHeight(ScRange( 0, nPaintStartRow, rTab, MAXCOL, nPaintEndRow, rTab+nScenarioCount )) ) + rDocShell.PostPaint( nPaintStartCol, nPaintStartRow, rTab, nPaintEndCol, nPaintEndRow, rTab+nScenarioCount, nPaintFlags, nExtFlags ); else { // paint only what is not done by AdjustRowHeight if (nExtFlags & SC_PF_LINES) - lcl_PaintAbove( rDocShell, ScRange( nPaintStartCol, nPaintStartRow, *itr, nPaintEndCol, nPaintEndRow, *itr+nScenarioCount) ); + lcl_PaintAbove( rDocShell, ScRange( nPaintStartCol, nPaintStartRow, rTab, nPaintEndCol, nPaintEndRow, rTab+nScenarioCount) ); if (nPaintFlags & PaintPartFlags::Top) - rDocShell.PostPaint( nPaintStartCol, nPaintStartRow, *itr, nPaintEndCol, nPaintEndRow, *itr+nScenarioCount, PaintPartFlags::Top ); + rDocShell.PostPaint( nPaintStartCol, nPaintStartRow, rTab, nPaintEndCol, nPaintEndRow, rTab+nScenarioCount, PaintPartFlags::Top ); } } @@ -4020,10 +4041,14 @@ bool ScDocFunc::ChangeIndent( const ScMarkData& rMark, bool bIncrement, bool bAp ScDocumentUniquePtr pUndoDoc(new ScDocument( SCDOCMODE_UNDO )); pUndoDoc->InitUndo( &rDoc, nStartTab, nStartTab ); - ScMarkData::const_iterator itr = rMark.begin(), itrEnd = rMark.end(); - for (; itr != itrEnd && *itr < nTabCount; ++itr) - if (*itr != nStartTab) - pUndoDoc->AddUndoTab( *itr, *itr ); + for (const auto& rTab : rMark) + { + if (rTab >= nTabCount) + break; + + if (rTab != nStartTab) + pUndoDoc->AddUndoTab( rTab, rTab ); + } ScRange aCopyRange = aMarkRange; aCopyRange.aStart.SetTab(0); @@ -4101,10 +4126,14 @@ bool ScDocFunc::AutoFormat( const ScRange& rRange, const ScMarkData* pTabMark, { pUndoDoc.reset(new ScDocument( SCDOCMODE_UNDO )); pUndoDoc->InitUndo( &rDoc, nStartTab, nStartTab, bSize, bSize ); - ScMarkData::iterator itr = aMark.begin(), itrEnd = aMark.end(); - for (; itr != itrEnd && *itr < nTabCount; ++itr) - if (*itr != nStartTab) - pUndoDoc->AddUndoTab( *itr, *itr, bSize, bSize ); + for (const auto& rTab : aMark) + { + if (rTab >= nTabCount) + break; + + if (rTab != nStartTab) + pUndoDoc->AddUndoTab( rTab, rTab, bSize, bSize ); + } ScRange aCopyRange = rRange; aCopyRange.aStart.SetTab(0); @@ -4127,28 +4156,32 @@ bool ScDocFunc::AutoFormat( const ScRange& rRange, const ScMarkData* pTabMark, std::vector<sc::ColRowSpan> aCols(1, sc::ColRowSpan(nStartCol,nEndCol)); std::vector<sc::ColRowSpan> aRows(1, sc::ColRowSpan(nStartRow,nEndRow)); - ScMarkData::iterator itr = aMark.begin(), itrEnd = aMark.end(); - for (; itr != itrEnd && *itr < nTabCount; ++itr) + for (const auto& rTab : aMark) { - SetWidthOrHeight(true, aCols, *itr, SC_SIZE_VISOPT, STD_EXTRA_WIDTH, false, true); - SetWidthOrHeight(false, aRows, *itr, SC_SIZE_VISOPT, 0, false, false); - rDocShell.PostPaint( 0,0,*itr, MAXCOL,MAXROW,*itr, + if (rTab >= nTabCount) + break; + + SetWidthOrHeight(true, aCols, rTab, SC_SIZE_VISOPT, STD_EXTRA_WIDTH, false, true); + SetWidthOrHeight(false, aRows, rTab, SC_SIZE_VISOPT, 0, false, false); + rDocShell.PostPaint( 0,0,rTab, MAXCOL,MAXROW,rTab, PaintPartFlags::Grid | PaintPartFlags::Left | PaintPartFlags::Top ); } } else { - ScMarkData::iterator itr = aMark.begin(), itrEnd = aMark.end(); - for (; itr != itrEnd && *itr < nTabCount; ++itr) + for (const auto& rTab : aMark) { - bool bAdj = AdjustRowHeight( ScRange(nStartCol, nStartRow, *itr, - nEndCol, nEndRow, *itr), false ); + if (rTab >= nTabCount) + break; + + bool bAdj = AdjustRowHeight( ScRange(nStartCol, nStartRow, rTab, + nEndCol, nEndRow, rTab), false ); if (bAdj) - rDocShell.PostPaint( 0,nStartRow,*itr, MAXCOL,MAXROW,*itr, + rDocShell.PostPaint( 0,nStartRow,rTab, MAXCOL,MAXROW,rTab, PaintPartFlags::Grid | PaintPartFlags::Left ); else - rDocShell.PostPaint( nStartCol, nStartRow, *itr, - nEndCol, nEndRow, *itr, PaintPartFlags::Grid ); + rDocShell.PostPaint( nStartCol, nStartRow, rTab, + nEndCol, nEndRow, rTab, PaintPartFlags::Grid ); } } @@ -4461,10 +4494,14 @@ bool ScDocFunc::FillSimple( const ScRange& rRange, const ScMarkData* pTabMark, pUndoDoc.reset(new ScDocument( SCDOCMODE_UNDO )); pUndoDoc->InitUndo( &rDoc, nDestStartTab, nDestStartTab ); - ScMarkData::iterator itr = aMark.begin(), itrEnd = aMark.end(); - for (; itr != itrEnd && *itr < nTabCount; ++itr) - if (*itr != nDestStartTab) - pUndoDoc->AddUndoTab( *itr, *itr ); + for (const auto& rTab : aMark) + { + if (rTab >= nTabCount) + break; + + if (rTab != nDestStartTab) + pUndoDoc->AddUndoTab( rTab, rTab ); + } ScRange aCopyRange = aDestArea; aCopyRange.aStart.SetTab(0); @@ -4577,10 +4614,14 @@ bool ScDocFunc::FillSeries( const ScRange& rRange, const ScMarkData* pTabMark, pUndoDoc.reset(new ScDocument( SCDOCMODE_UNDO )); pUndoDoc->InitUndo( &rDoc, nDestStartTab, nDestStartTab ); - ScMarkData::iterator itr = aMark.begin(), itrEnd = aMark.end(); - for (; itr != itrEnd && *itr < nTabCount; ++itr) - if (*itr != nDestStartTab) - pUndoDoc->AddUndoTab( *itr, *itr ); + for (const auto& rTab : aMark) + { + if (rTab >= nTabCount) + break; + + if (rTab != nDestStartTab) + pUndoDoc->AddUndoTab( rTab, rTab ); + } rDoc.CopyToDocument( aDestArea.aStart.Col(), aDestArea.aStart.Row(), 0, @@ -4729,10 +4770,14 @@ bool ScDocFunc::FillAuto( ScRange& rRange, const ScMarkData* pTabMark, FillDir e pUndoDoc.reset(new ScDocument( SCDOCMODE_UNDO )); pUndoDoc->InitUndo( &rDoc, nDestStartTab, nDestStartTab ); - ScMarkData::iterator itr = aMark.begin(), itrEnd = aMark.end(); - for (; itr != itrEnd && *itr < nTabCount; ++itr) - if (*itr != nDestStartTab) - pUndoDoc->AddUndoTab( *itr, *itr ); + for (const auto& rTab : aMark) + { + if (rTab >= nTabCount) + break; + + if (rTab != nDestStartTab) + pUndoDoc->AddUndoTab( rTab, rTab ); + } // do not clone note captions in undo document rDoc.CopyToDocument( @@ -4787,15 +4832,14 @@ bool ScDocFunc::MergeCells( const ScCellMergeOption& rOption, bool bContents, bo } ScDocument& rDoc = rDocShell.GetDocument(); - set<SCTAB>::const_iterator itrBeg = rOption.maTabs.begin(), itrEnd = rOption.maTabs.end(); - SCTAB nTab1 = *itrBeg, nTab2 = *rOption.maTabs.rbegin(); + SCTAB nTab1 = *rOption.maTabs.begin(), nTab2 = *rOption.maTabs.rbegin(); if (bRecord && !rDoc.IsUndoEnabled()) bRecord = false; - for (set<SCTAB>::const_iterator itr = itrBeg; itr != itrEnd; ++itr) + for (const auto& rTab : rOption.maTabs) { - ScEditableTester aTester( &rDoc, *itr, nStartCol, nStartRow, nEndCol, nEndRow ); + ScEditableTester aTester( &rDoc, rTab, nStartCol, nStartRow, nEndCol, nEndRow ); if (!aTester.IsEditable()) { if (!bApi) @@ -4803,7 +4847,7 @@ bool ScDocFunc::MergeCells( const ScCellMergeOption& rOption, bool bContents, bo return false; } - if ( rDoc.HasAttrib( nStartCol, nStartRow, *itr, nEndCol, nEndRow, *itr, + if ( rDoc.HasAttrib( nStartCol, nStartRow, rTab, nEndCol, nEndRow, rTab, HasAttrFlags::Merged | HasAttrFlags::Overlapped ) ) { // "Merge of already merged cells not possible" @@ -4815,9 +4859,8 @@ bool ScDocFunc::MergeCells( const ScCellMergeOption& rOption, bool bContents, bo ScDocumentUniquePtr pUndoDoc; bool bNeedContentsUndo = false; - for (set<SCTAB>::const_iterator itr = itrBeg; itr != itrEnd; ++itr) + for (const SCTAB nTab : rOption.maTabs) { - SCTAB nTab = *itr; bool bIsBlockEmpty = ( nStartRow == nEndRow ) ? rDoc.IsBlockEmpty( nTab, nStartCol+1,nStartRow, nEndCol,nEndRow, true ) : rDoc.IsBlockEmpty( nTab, nStartCol,nStartRow+1, nStartCol,nEndRow, true ) && @@ -4915,10 +4958,8 @@ bool ScDocFunc::UnmergeCells( const ScCellMergeOption& rOption, bool bRecord, Sc ScDocument* pUndoDoc = (pUndoRemoveMerge ? pUndoRemoveMerge->GetUndoDoc() : nullptr); assert( pUndoDoc || !pUndoRemoveMerge ); - for (set<SCTAB>::const_iterator itr = rOption.maTabs.begin(), itrEnd = rOption.maTabs.end(); - itr != itrEnd; ++itr) + for (const SCTAB nTab : rOption.maTabs) { - SCTAB nTab = *itr; ScRange aRange = rOption.getSingleRange(nTab); if ( !rDoc.HasAttrib(aRange, HasAttrFlags::Merged) ) continue; @@ -5216,18 +5257,16 @@ bool ScDocFunc::InsertNameList( const ScAddress& rStartPos, bool bApi ) //local names have higher priority than global names ScRangeName* pLocalList = rDoc.GetRangeName(nTab); sal_uInt16 nValidCount = 0; - ScRangeName::iterator itrLocalBeg = pLocalList->begin(), itrLocalEnd = pLocalList->end(); - for (ScRangeName::iterator itr = itrLocalBeg; itr != itrLocalEnd; ++itr) + for (const auto& rEntry : *pLocalList) { - const ScRangeData& r = *itr->second; + const ScRangeData& r = *rEntry.second; if (!r.HasType(ScRangeData::Type::Database)) ++nValidCount; } ScRangeName* pList = rDoc.GetRangeName(); - ScRangeName::iterator itrBeg = pList->begin(), itrEnd = pList->end(); - for (ScRangeName::iterator itr = itrBeg; itr != itrEnd; ++itr) + for (const auto& rEntry : *pList) { - const ScRangeData& r = *itr->second; + const ScRangeData& r = *rEntry.second; if (!r.HasType(ScRangeData::Type::Database) && !pLocalList->findByUpperName(r.GetUpperName())) ++nValidCount; } @@ -5256,16 +5295,16 @@ bool ScDocFunc::InsertNameList( const ScAddress& rStartPos, bool bApi ) std::unique_ptr<ScRangeData*[]> ppSortArray(new ScRangeData* [ nValidCount ]); sal_uInt16 j = 0; - for (ScRangeName::iterator itr = itrLocalBeg; itr != itrLocalEnd; ++itr) + for (const auto& rEntry : *pLocalList) { - ScRangeData& r = *itr->second; + ScRangeData& r = *rEntry.second; if (!r.HasType(ScRangeData::Type::Database)) ppSortArray[j++] = &r; } - for (ScRangeName::iterator itr = itrBeg; itr != itrEnd; ++itr) + for (const auto& [rName, rxData] : *pList) { - ScRangeData& r = *itr->second; - if (!r.HasType(ScRangeData::Type::Database) && !pLocalList->findByUpperName(itr->first)) + ScRangeData& r = *rxData; + if (!r.HasType(ScRangeData::Type::Database) && !pLocalList->findByUpperName(rName)) ppSortArray[j++] = &r; } qsort( static_cast<void*>(ppSortArray.get()), nValidCount, sizeof(ScRangeData*), diff --git a/sc/source/ui/docshell/docfuncutil.cxx b/sc/source/ui/docshell/docfuncutil.cxx index a2559ee562e2..5b51625f369c 100644 --- a/sc/source/ui/docshell/docfuncutil.cxx +++ b/sc/source/ui/docshell/docfuncutil.cxx @@ -35,10 +35,14 @@ namespace sc { bool DocFuncUtil::hasProtectedTab( const ScDocument& rDoc, const ScMarkData& rMark ) { SCTAB nTabCount = rDoc.GetTableCount(); - ScMarkData::const_iterator itr = rMark.begin(), itrEnd = rMark.end(); - for (; itr != itrEnd && *itr < nTabCount; ++itr) - if (rDoc.IsTabProtected(*itr)) + for (const auto& rTab : rMark) + { + if (rTab >= nTabCount) + break; + + if (rDoc.IsTabProtected(rTab)) return true; + } return false; } @@ -51,10 +55,9 @@ ScDocumentUniquePtr DocFuncUtil::createDeleteContentsUndoDoc( SCTAB nTab = rRange.aStart.Tab(); pUndoDoc->InitUndo(&rDoc, nTab, nTab); SCTAB nTabCount = rDoc.GetTableCount(); - ScMarkData::const_iterator itr = rMark.begin(), itrEnd = rMark.end(); - for (; itr != itrEnd; ++itr) - if (*itr != nTab) - pUndoDoc->AddUndoTab( *itr, *itr ); + for (const auto& rTab : rMark) + if (rTab != nTab) + pUndoDoc->AddUndoTab( rTab, rTab ); ScRange aCopyRange = rRange; aCopyRange.aStart.SetTab(0); aCopyRange.aEnd.SetTab(nTabCount-1); @@ -93,11 +96,8 @@ std::unique_ptr<ScSimpleUndo::DataSpansType> DocFuncUtil::getNonEmptyCellSpans( const ScDocument& rDoc, const ScMarkData& rMark, const ScRange& rRange ) { std::unique_ptr<ScSimpleUndo::DataSpansType> pDataSpans(new ScSimpleUndo::DataSpansType); - ScMarkData::const_iterator it = rMark.begin(), itEnd = rMark.end(); - for (; it != itEnd; ++it) + for (const SCTAB nTab : rMark) { - SCTAB nTab = *it; - SCCOL nCol1 = rRange.aStart.Col(), nCol2 = rRange.aEnd.Col(); SCROW nRow1 = rRange.aStart.Row(), nRow2 = rRange.aEnd.Row(); diff --git a/sc/source/ui/docshell/docsh.cxx b/sc/source/ui/docshell/docsh.cxx index adcc96feeae9..7f45f9964084 100644 --- a/sc/source/ui/docshell/docsh.cxx +++ b/sc/source/ui/docshell/docsh.cxx @@ -2999,10 +2999,8 @@ namespace { void removeKeysIfExists(const Reference<ui::XAcceleratorConfiguration>& xScAccel, const vector<const awt::KeyEvent*>& rKeys) { - vector<const awt::KeyEvent*>::const_iterator itr = rKeys.begin(), itrEnd = rKeys.end(); - for (; itr != itrEnd; ++itr) + for (const awt::KeyEvent* p : rKeys) { - const awt::KeyEvent* p = *itr; if (!p) continue; diff --git a/sc/source/ui/docshell/docsh4.cxx b/sc/source/ui/docshell/docsh4.cxx index 11f240c9d2f8..d937275a3a55 100644 --- a/sc/source/ui/docshell/docsh4.cxx +++ b/sc/source/ui/docshell/docsh4.cxx @@ -535,10 +535,9 @@ void ScDocShell::Execute( SfxRequest& rReq ) if (xQueryBox->run() == RET_YES) { ScDBCollection::NamedDBs& rDBs = pDBColl->getNamedDBs(); - ScDBCollection::NamedDBs::iterator itr = rDBs.begin(), itrEnd = rDBs.end(); - for (; itr != itrEnd; ++itr) + for (const auto& rxDB : rDBs) { - ScDBData& rDBData = **itr; + ScDBData& rDBData = *rxDB; if ( rDBData.IsStripData() && rDBData.HasImportParam() && !rDBData.HasImportSelection() ) { diff --git a/sc/source/ui/docshell/documentlinkmgr.cxx b/sc/source/ui/docshell/documentlinkmgr.cxx index 7452f87d3ce7..479d1b0e56b2 100644 --- a/sc/source/ui/docshell/documentlinkmgr.cxx +++ b/sc/source/ui/docshell/documentlinkmgr.cxx @@ -52,8 +52,8 @@ struct DocumentLinkManagerImpl if (linkManager) { sfx2::SvLinkSources aTemp = linkManager->GetServers(); - for (sfx2::SvLinkSources::const_iterator it = aTemp.begin(); it != aTemp.end(); ++it) - (*it)->Closed(); + for (const auto& pLinkSource : aTemp) + pLinkSource->Closed(); if (!linkManager->GetLinks().empty()) linkManager->Remove(0, linkManager->GetLinks().size()); diff --git a/sc/source/ui/docshell/editable.cxx b/sc/source/ui/docshell/editable.cxx index 3b0f58ee653f..b66d47e77442 100644 --- a/sc/source/ui/docshell/editable.cxx +++ b/sc/source/ui/docshell/editable.cxx @@ -100,9 +100,13 @@ void ScEditableTester::TestSelectedBlock( const ScDocument* pDoc, const ScMarkData& rMark ) { SCTAB nTabCount = pDoc->GetTableCount(); - ScMarkData::const_iterator itr = rMark.begin(), itrEnd = rMark.end(); - for (; itr != itrEnd && *itr < nTabCount; ++itr) - TestBlock( pDoc, *itr, nStartCol, nStartRow, nEndCol, nEndRow ); + for (const auto& rTab : rMark) + { + if (rTab >= nTabCount) + break; + + TestBlock( pDoc, rTab, nStartCol, nStartRow, nEndCol, nEndRow ); + } } void ScEditableTester::TestRange( const ScDocument* pDoc, const ScRange& rRange ) @@ -137,12 +141,12 @@ void ScEditableTester::TestBlockForAction( { mbOnlyMatrix = false; - for (ScMarkData::const_iterator it = rMark.begin(), itEnd = rMark.end(); it != itEnd; ++it) + for (const auto& rTab : rMark) { if (!mbIsEditable) return; - mbIsEditable = rDoc.IsEditActionAllowed(eAction, *it, nStart, nEnd); + mbIsEditable = rDoc.IsEditActionAllowed(eAction, rTab, nStart, nEnd); } } diff --git a/sc/source/ui/docshell/externalrefmgr.cxx b/sc/source/ui/docshell/externalrefmgr.cxx index c7086d6b70d1..3d4b93f323b4 100644 --- a/sc/source/ui/docshell/externalrefmgr.cxx +++ b/sc/source/ui/docshell/externalrefmgr.cxx @@ -336,10 +336,9 @@ void ScExternalRefCache::Table::getAllRows(vector<SCROW>& rRows, SCROW nLow, SCR { vector<SCROW> aRows; aRows.reserve(maRows.size()); - RowsDataType::const_iterator itr = maRows.begin(), itrEnd = maRows.end(); - for (; itr != itrEnd; ++itr) - if (nLow <= itr->first && itr->first <= nHigh) - aRows.push_back(itr->first); + for (const auto& rEntry : maRows) + if (nLow <= rEntry.first && rEntry.first <= nHigh) + aRows.push_back(rEntry.first); // hash map is not ordered, so we need to explicitly sort it. ::std::sort(aRows.begin(), aRows.end()); @@ -352,16 +351,10 @@ void ScExternalRefCache::Table::getAllRows(vector<SCROW>& rRows, SCROW nLow, SCR if( !maRows.empty() ) { // iterate over entire container (hash map is not sorted by key) - RowsDataType::const_iterator itr = maRows.begin(), itrEnd = maRows.end(); - aRange.first = itr->first; - aRange.second = itr->first + 1; - while( ++itr != itrEnd ) - { - if( itr->first < aRange.first ) - aRange.first = itr->first; - else if( itr->first >= aRange.second ) - aRange.second = itr->first + 1; - } + auto itMinMax = std::minmax_element(maRows.begin(), maRows.end(), + [](const RowsDataType::value_type& a, const RowsDataType::value_type& b) { return a.first < b.first; }); + aRange.first = itMinMax.first->first; + aRange.second = itMinMax.second->first + 1; } return aRange; } @@ -376,10 +369,9 @@ void ScExternalRefCache::Table::getAllCols(SCROW nRow, vector<SCCOL>& rCols, SCC const RowDataType& rRowData = itrRow->second; vector<SCCOL> aCols; aCols.reserve(rRowData.size()); - RowDataType::const_iterator itrCol = rRowData.begin(), itrColEnd = rRowData.end(); - for (; itrCol != itrColEnd; ++itrCol) - if (nLow <= itrCol->first && itrCol->first <= nHigh) - aCols.push_back(itrCol->first); + for (const auto& rCol : rRowData) + if (nLow <= rCol.first && rCol.first <= nHigh) + aCols.push_back(rCol.first); // hash map is not ordered, so we need to explicitly sort it. ::std::sort(aCols.begin(), aCols.end()); @@ -399,30 +391,22 @@ void ScExternalRefCache::Table::getAllCols(SCROW nRow, vector<SCCOL>& rCols, SCC if( !rRowData.empty() ) { // iterate over entire container (hash map is not sorted by key) - RowDataType::const_iterator itr = rRowData.begin(), itrEnd = rRowData.end(); - aRange.first = itr->first; - aRange.second = itr->first + 1; - while( ++itr != itrEnd ) - { - if( itr->first < aRange.first ) - aRange.first = itr->first; - else if( itr->first >= aRange.second ) - aRange.second = itr->first + 1; - } + auto itMinMax = std::minmax_element(rRowData.begin(), rRowData.end(), + [](const RowDataType::value_type& a, const RowDataType::value_type& b) { return a.first < b.first; }); + aRange.first = itMinMax.first->first; + aRange.second = itMinMax.second->first + 1; } return aRange; } void ScExternalRefCache::Table::getAllNumberFormats(vector<sal_uInt32>& rNumFmts) const { - RowsDataType::const_iterator itrRow = maRows.begin(), itrRowEnd = maRows.end(); - for (; itrRow != itrRowEnd; ++itrRow) + for (const auto& rRow : maRows) { - const RowDataType& rRowData = itrRow->second; - RowDataType::const_iterator itrCol = rRowData.begin(), itrColEnd = rRowData.end(); - for (; itrCol != itrColEnd; ++itrCol) + const RowDataType& rRowData = rRow.second; + for (const auto& rCol : rRowData) { - const Cell& rCell = itrCol->second; + const Cell& rCell = rCol.second; rNumFmts.push_back(rCell.mnFmtIndex); } } @@ -642,10 +626,10 @@ ScExternalRefCache::TokenArrayRef ScExternalRefCache::getCellRangeData( nDataRow2 = aRows.back(); SCCOL nMinCol = std::numeric_limits<SCCOL>::max(); SCCOL nMaxCol = std::numeric_limits<SCCOL>::min(); - for (vector<SCROW>::const_iterator itr = aRows.begin(), itrEnd = aRows.end(); itr != itrEnd; ++itr) + for (const auto& rRow : aRows) { vector<SCCOL> aCols; - pTab->getAllCols(*itr, aCols, nDataCol1, nDataCol2); + pTab->getAllCols(rRow, aCols, nDataCol1, nDataCol2); if (!aCols.empty()) { nMinCol = std::min( nMinCol, aCols.front()); @@ -673,14 +657,12 @@ ScExternalRefCache::TokenArrayRef ScExternalRefCache::getCellRangeData( if (bFill) { // Only fill non-empty cells, for better performance. - for (vector<SCROW>::const_iterator itr = aRows.begin(), itrEnd = aRows.end(); itr != itrEnd; ++itr) + for (SCROW nRow : aRows) { - SCROW nRow = *itr; vector<SCCOL> aCols; pTab->getAllCols(nRow, aCols, nDataCol1, nDataCol2); - for (vector<SCCOL>::const_iterator itrCol = aCols.begin(), itrColEnd = aCols.end(); itrCol != itrColEnd; ++itrCol) + for (SCCOL nCol : aCols) { - SCCOL nCol = *itrCol; TokenRef pToken = pTab->getCell(nCol, nRow); if (!pToken) // This should never happen! @@ -834,15 +816,14 @@ void ScExternalRefCache::setCellRangeData(sal_uInt16 nFileId, const ScRange& rRa size_t nTabFirstId = itrTabName->second; SCROW nRow1 = rRange.aStart.Row(), nRow2 = rRange.aEnd.Row(); SCCOL nCol1 = rRange.aStart.Col(), nCol2 = rRange.aEnd.Col(); - vector<SingleRangeData>::const_iterator itrDataBeg = rData.begin(), itrDataEnd = rData.end(); - for (vector<SingleRangeData>::const_iterator itrData = itrDataBeg; itrData != itrDataEnd; ++itrData) + size_t i = nTabFirstId; + for (const auto& rItem : rData) { - size_t i = nTabFirstId + ::std::distance(itrDataBeg, itrData); TableTypeRef& pTabData = rDoc.maTables[i]; if (!pTabData.get()) pTabData.reset(new Table); - const ScMatrixRef& pMat = itrData->mpRangeData; + const ScMatrixRef& pMat = rItem.mpRangeData; SCSIZE nMatCols, nMatRows; pMat->GetDimensions( nMatCols, nMatRows); if (nMatCols > static_cast<SCSIZE>(nCol2 - nCol1) && nMatRows > static_cast<SCSIZE>(nRow2 - nRow1)) @@ -883,6 +864,7 @@ void ScExternalRefCache::setCellRangeData(sal_uInt16 nFileId, const ScRange& rRa (nErr == FormulaError::MatrixSize ? ", ok" : ", not ok")); } } + ++i; } size_t nTabLastId = nTabFirstId + rRange.aEnd.Tab() - rRange.aStart.Tab(); @@ -945,10 +927,9 @@ void ScExternalRefCache::initializeDoc(sal_uInt16 nFileId, const vector<OUString // when loading cached data from, say, Excel XCT/CRN records. vector<TableName> aNewTabNames; aNewTabNames.reserve(n); - for (vector<OUString>::const_iterator itr = rTabNames.begin(), itrEnd = rTabNames.end(); - itr != itrEnd; ++itr) + for (const auto& rTabName : rTabNames) { - TableName aNameItem(ScGlobal::pCharClass->uppercase(*itr), *itr); + TableName aNameItem(ScGlobal::pCharClass->uppercase(rTabName), rTabName); aNewTabNames.push_back(aNameItem); } pDoc->maTableNames.swap(aNewTabNames); @@ -1065,9 +1046,8 @@ void ScExternalRefCache::getAllTableNames(sal_uInt16 nFileId, vector<OUString>& size_t n = pDoc->maTableNames.size(); rTabNames.reserve(n); - for (vector<TableName>::const_iterator itr = pDoc->maTableNames.begin(), itrEnd = pDoc->maTableNames.end(); - itr != itrEnd; ++itr) - rTabNames.push_back(itr->maRealName); + for (const auto& rTableName : pDoc->maTableNames) + rTabNames.push_back(rTableName.maRealName); } SCTAB ScExternalRefCache::getTabSpan( sal_uInt16 nFileId, const OUString& rStartTabName, const OUString& rEndTabName ) const @@ -1102,14 +1082,11 @@ void ScExternalRefCache::getAllNumberFormats(vector<sal_uInt32>& rNumFmts) const using ::std::unique; vector<sal_uInt32> aNumFmts; - for (DocDataType::const_iterator itrDoc = maDocs.begin(), itrDocEnd = maDocs.end(); - itrDoc != itrDocEnd; ++itrDoc) + for (const auto& rEntry : maDocs) { - const vector<TableTypeRef>& rTables = itrDoc->second.maTables; - for (vector<TableTypeRef>::const_iterator itrTab = rTables.begin(), itrTabEnd = rTables.end(); - itrTab != itrTabEnd; ++itrTab) + const vector<TableTypeRef>& rTables = rEntry.second.maTables; + for (const TableTypeRef& pTab : rTables) { - TableTypeRef pTab = *itrTab; if (!pTab) continue; @@ -1129,11 +1106,10 @@ bool ScExternalRefCache::setCacheDocReferenced( sal_uInt16 nFileId ) if (!pDocItem) return areAllCacheTablesReferenced(); - for (::std::vector<TableTypeRef>::iterator itrTab = pDocItem->maTables.begin(); - itrTab != pDocItem->maTables.end(); ++itrTab) + for (auto& rxTab : pDocItem->maTables) { - if ((*itrTab).get()) - (*itrTab)->setReferenced( true); + if (rxTab.get()) + rxTab->setReferenced(true); } addCacheDocToReferenced( nFileId); return areAllCacheTablesReferenced(); @@ -1172,31 +1148,27 @@ void ScExternalRefCache::setAllCacheTableReferencedStati( bool bReferenced ) if (bReferenced) { maReferenced.reset(0); - for (DocDataType::iterator itrDoc = maDocs.begin(); itrDoc != maDocs.end(); ++itrDoc) + for (auto& rEntry : maDocs) { - ScExternalRefCache::DocItem& rDocItem = (*itrDoc).second; - for (::std::vector<TableTypeRef>::iterator itrTab = rDocItem.maTables.begin(); - itrTab != rDocItem.maTables.end(); ++itrTab) + ScExternalRefCache::DocItem& rDocItem = rEntry.second; + for (auto& rxTab : rDocItem.maTables) { - if ((*itrTab).get()) - (*itrTab)->setReferenced( true); + if (rxTab.get()) + rxTab->setReferenced(true); } } } else { size_t nDocs = 0; - for (DocDataType::const_iterator itrDoc = maDocs.begin(); itrDoc != maDocs.end(); ++itrDoc) - { - if (nDocs <= (*itrDoc).first) - nDocs = (*itrDoc).first + 1; - } + auto itrMax = std::max_element(maDocs.begin(), maDocs.end(), + [](const DocDataType::value_type& a, const DocDataType::value_type& b) { return a.first < b.first; }); + if (itrMax != maDocs.end()) + nDocs = itrMax->first + 1; maReferenced.reset( nDocs); - for (DocDataType::iterator itrDoc = maDocs.begin(); itrDoc != maDocs.end(); ++itrDoc) + for (auto& [nFileId, rDocItem] : maDocs) { - ScExternalRefCache::DocItem& rDocItem = (*itrDoc).second; - sal_uInt16 nFileId = (*itrDoc).first; size_t nTables = rDocItem.maTables.size(); ReferencedStatus::DocReferenced & rDocReferenced = maReferenced.maDocs[nFileId]; // All referenced => non-existing tables evaluate as completed. @@ -1274,16 +1246,12 @@ void ScExternalRefCache::getAllCachedDataSpans( sal_uInt16 nFileId, sc::ColumnSp std::vector<SCROW> aRows; pTab->getAllRows(aRows); - std::vector<SCROW>::const_iterator itRow = aRows.begin(), itRowEnd = aRows.end(); - for (; itRow != itRowEnd; ++itRow) + for (SCROW nRow : aRows) { - SCROW nRow = *itRow; std::vector<SCCOL> aCols; pTab->getAllCols(nRow, aCols); - std::vector<SCCOL>::const_iterator itCol = aCols.begin(), itColEnd = aCols.end(); - for (; itCol != itColEnd; ++itCol) + for (SCCOL nCol : aCols) { - SCCOL nCol = *itCol; rSet.set(nTab, nCol, nRow, true); } } @@ -1314,12 +1282,8 @@ void ScExternalRefCache::ReferencedStatus::reset( size_t nDocs ) void ScExternalRefCache::ReferencedStatus::checkAllDocs() { - for (DocReferencedVec::const_iterator itr = maDocs.begin(); itr != maDocs.end(); ++itr) - { - if (!(*itr).mbAllTablesReferenced) - return; - } - mbAllReferenced = true; + if (std::all_of(maDocs.begin(), maDocs.end(), [](const DocReferenced& rDoc) { return rDoc.mbAllTablesReferenced; })) + mbAllReferenced = true; } ScExternalRefCache::TableTypeRef ScExternalRefCache::getCacheTable(sal_uInt16 nFileId, size_t nTabIndex) const @@ -1739,11 +1703,13 @@ sal_uInt16 ScExternalRefManager::getExternalFileCount() const void ScExternalRefManager::markUsedByLinkListeners() { bool bAllMarked = false; - for (LinkListenerMap::const_iterator itr = maLinkListeners.begin(); - itr != maLinkListeners.end() && !bAllMarked; ++itr) + for (const auto& [rFileId, rLinkListeners] : maLinkListeners) { - if (!(*itr).second.empty()) - bAllMarked = maRefCache.setCacheDocReferenced( (*itr).first); + if (!rLinkListeners.empty()) + bAllMarked = maRefCache.setCacheDocReferenced(rFileId); + + if (bAllMarked) + break; /* TODO: LinkListeners should remember the table they're listening to. * As is, listening to one table will mark all tables of the document * being referenced. */ @@ -1752,13 +1718,10 @@ void ScExternalRefManager::markUsedByLinkListeners() void ScExternalRefManager::markUsedExternalRefCells() { - RefCellMap::iterator itr = maRefCells.begin(), itrEnd = maRefCells.end(); - for (; itr != itrEnd; ++itr) + for (const auto& rEntry : maRefCells) { - RefCellSet::iterator itrCell = itr->second.begin(), itrCellEnd = itr->second.end(); - for (; itrCell != itrCellEnd; ++itrCell) + for (ScFormulaCell* pCell : rEntry.second) { - ScFormulaCell* pCell = *itrCell; bool bUsed = pCell->MarkUsedExternalReferences(); if (bUsed) // Return true when at least one cell references external docs. @@ -2196,11 +2159,8 @@ bool ScExternalRefManager::hasCellExternalReference(const ScAddress& rCell) ScFormulaCell* pCell = mpDoc->GetFormulaCell(rCell); if (pCell) - for (RefCellMap::iterator itr = maRefCells.begin(); itr != maRefCells.end(); ++itr) - { - if (itr->second.find(pCell) != itr->second.end()) - return true; - } + return std::any_of(maRefCells.begin(), maRefCells.end(), + [&pCell](const RefCellMap::value_type& rEntry) { return rEntry.second.find(pCell) != rEntry.second.end(); }); return false; } @@ -2215,9 +2175,8 @@ void ScExternalRefManager::enableDocTimer( bool bEnable ) { if (!maDocShells.empty()) { - DocShellMap::iterator it = maDocShells.begin(), itEnd = maDocShells.end(); - for (; it != itEnd; ++it) - it->second.maLastAccess = tools::Time(tools::Time::SYSTEM); + for (auto& rEntry : maDocShells) + rEntry.second.maLastAccess = tools::Time(tools::Time::SYSTEM); maSrcDocTimer.Start(); } @@ -2757,10 +2716,8 @@ std::vector<OUString> ScExternalRefManager::getAllCachedExternalFileNames() cons { std::vector<OUString> aNames; aNames.reserve(maSrcFiles.size()); - std::vector<SrcFileData>::const_iterator it = maSrcFiles.begin(), itEnd = maSrcFiles.end(); - for (; it != itEnd; ++it) + for (const SrcFileData& rData : maSrcFiles) { - const SrcFileData& rData = *it; aNames.push_back(rData.maFileName); } @@ -3023,9 +2980,8 @@ void ScExternalRefManager::setFilterData(sal_uInt16 nFileId, const OUString& rFi void ScExternalRefManager::clear() { - DocShellMap::iterator itrEnd = maDocShells.end(); - for (DocShellMap::iterator itr = maDocShells.begin(); itr != itrEnd; ++itr) - itr->second.maShell->DoClose(); + for (auto& rEntry : maDocShells) + rEntry.second.maShell->DoClose(); maDocShells.clear(); maSrcDocTimer.Stop(); @@ -3038,15 +2994,14 @@ bool ScExternalRefManager::hasExternalData() const void ScExternalRefManager::resetSrcFileData(const OUString& rBaseFileUrl) { - for (vector<SrcFileData>::iterator itr = maSrcFiles.begin(), itrEnd = maSrcFiles.end(); - itr != itrEnd; ++itr) + for (auto& rSrcFile : maSrcFiles) { // Re-generate relative file name from the absolute file name. - OUString aAbsName = itr->maRealFileName; + OUString aAbsName = rSrcFile.maRealFileName; if (aAbsName.isEmpty()) - aAbsName = itr->maFileName; + aAbsName = rSrcFile.maFileName; - itr->maRelativeName = URIHelper::simpleNormalizedMakeRelative( + rSrcFile.maRelativeName = URIHelper::simpleNormalizedMakeRelative( rBaseFileUrl, aAbsName); } } @@ -3054,16 +3009,15 @@ void ScExternalRefManager::resetSrcFileData(const OUString& rBaseFileUrl) void ScExternalRefManager::updateAbsAfterLoad() { OUString aOwn( getOwnDocumentName() ); - for (vector<SrcFileData>::iterator itr = maSrcFiles.begin(), itrEnd = maSrcFiles.end(); - itr != itrEnd; ++itr) + for (auto& rSrcFile : maSrcFiles) { // update maFileName to the real file name, // to be called when the original name is no longer needed (after CompileXML) - itr->maybeCreateRealFileName( aOwn ); - OUString aReal = itr->maRealFileName; + rSrcFile.maybeCreateRealFileName( aOwn ); + OUString aReal = rSrcFile.maRealFileName; if (!aReal.isEmpty()) - itr->maFileName = aReal; + rSrcFile.maFileName = aReal; } } @@ -3109,9 +3063,8 @@ void ScExternalRefManager::removeLinkListener(sal_uInt16 nFileId, LinkListener* void ScExternalRefManager::removeLinkListener(LinkListener* pListener) { - LinkListenerMap::iterator itr = maLinkListeners.begin(), itrEnd = maLinkListeners.end(); - for (; itr != itrEnd; ++itr) - itr->second.erase(pListener); + for (auto& rEntry : maLinkListeners) + rEntry.second.erase(pListener); } void ScExternalRefManager::notifyAllLinkListeners(sal_uInt16 nFileId, LinkUpdateType eType) @@ -3128,18 +3081,17 @@ void ScExternalRefManager::notifyAllLinkListeners(sal_uInt16 nFileId, LinkUpdate void ScExternalRefManager::purgeStaleSrcDocument(sal_Int32 nTimeOut) { // To avoid potentially freezing Calc, we close one stale document at a time. - DocShellMap::iterator itr = maDocShells.begin(), itrEnd = maDocShells.end(); - for (; itr != itrEnd; ++itr) - { - // in 100th of a second. - sal_Int32 nSinceLastAccess = (tools::Time( tools::Time::SYSTEM ) - itr->second.maLastAccess).GetTime(); - if (nSinceLastAccess >= nTimeOut) - { - // Timed out. Let's close this, and exit the loop. - itr->second.maShell->DoClose(); - maDocShells.erase(itr); - break; - } + DocShellMap::iterator itr = std::find_if(maDocShells.begin(), maDocShells.end(), + [nTimeOut](const DocShellMap::value_type& rEntry) { + // in 100th of a second. + sal_Int32 nSinceLastAccess = (tools::Time( tools::Time::SYSTEM ) - rEntry.second.maLastAccess).GetTime(); + return nSinceLastAccess >= nTimeOut; + }); + if (itr != maDocShells.end()) + { + // Timed out. Let's close this. + itr->second.maShell->DoClose(); + maDocShells.erase(itr); } if (maDocShells.empty()) diff --git a/sc/source/ui/docshell/macromgr.cxx b/sc/source/ui/docshell/macromgr.cxx index bbe31344c73b..108df7be46dc 100644 --- a/sc/source/ui/docshell/macromgr.cxx +++ b/sc/source/ui/docshell/macromgr.cxx @@ -60,10 +60,9 @@ public: void removeCell(const ScFormulaCell* pCell) { - ModuleCellMap::iterator itr = maCells.begin(), itrEnd = maCells.end(); - for (; itr != itrEnd; ++itr) + for (auto& rEntry : maCells) { - itr->second.erase(std::remove(itr->second.begin(), itr->second.end(), pCell), itr->second.end() ); + rEntry.second.erase(std::remove(rEntry.second.begin(), rEntry.second.end(), pCell), rEntry.second.end() ); } } @@ -181,10 +180,8 @@ void ScMacroManager::BroadcastModuleUpdate(const OUString& aModuleName) { vector<ScFormulaCell*> aCells; mpDepTracker->getCellsByModule(aModuleName, aCells); - vector<ScFormulaCell*>::iterator itr = aCells.begin(), itrEnd = aCells.end(); - for (; itr != itrEnd; ++itr) + for (ScFormulaCell* pCell : aCells) { - ScFormulaCell* pCell = *itr; mpDoc->PutInFormulaTree(pCell); // for F9 recalc // for recalc on cell value change. If the cell is not volatile, the _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits