formula/source/ui/dlg/formula.cxx | 12 +++++++----- sc/inc/formulaiter.hxx | 4 +++- sc/source/core/data/colorscale.cxx | 4 ++-- sc/source/core/data/column.cxx | 5 +++-- sc/source/core/data/column3.cxx | 5 +++-- sc/source/core/data/conditio.cxx | 8 ++++---- sc/source/core/data/documen4.cxx | 7 ++++--- sc/source/core/data/document10.cxx | 9 ++++++--- sc/source/core/data/formulaiter.cxx | 12 ++++++------ sc/source/core/tool/formulagroup.cxx | 3 ++- sc/source/core/tool/interpr4.cxx | 3 ++- sc/source/core/tool/rangenam.cxx | 27 +++++++++++++-------------- sc/source/filter/excel/xechart.cxx | 5 +++-- sc/source/filter/excel/xeformula.cxx | 3 ++- sc/source/filter/excel/xelink.cxx | 3 ++- sc/source/filter/excel/xichart.cxx | 9 +++++---- sc/source/ui/docshell/externalrefmgr.cxx | 9 +++++---- sc/source/ui/miscdlgs/anyrefdg.cxx | 6 +++--- sc/source/ui/unoobj/chart2uno.cxx | 13 ++++++++----- 19 files changed, 83 insertions(+), 64 deletions(-)
New commits: commit 30e27a9936b5ad3550708f7920e749f94abe1828 Author: Tor Lillqvist <[email protected]> Date: Wed Jun 7 17:03:57 2017 +0300 Take new FormulaTokenArrayPlainIterator into use in one more file Change-Id: Ia2db1835e56d683769d8c3972fb0c73ba2eae2c6 diff --git a/sc/source/ui/unoobj/chart2uno.cxx b/sc/source/ui/unoobj/chart2uno.cxx index 432724da0b68..41ee1ee8a01c 100644 --- a/sc/source/ui/unoobj/chart2uno.cxx +++ b/sc/source/ui/unoobj/chart2uno.cxx @@ -2104,9 +2104,10 @@ sal_Bool SAL_CALL ScChart2DataProvider::createDataSequenceByFormulaTokensPossibl if (!n) return false; - const formula::FormulaToken* pFirst = aCode.First(); + formula::FormulaTokenArrayPlainIterator aIter(aCode); + const formula::FormulaToken* pFirst = aIter.First(); const formula::FormulaToken* pLast = aCode.GetArray()[n-1]; - for (const formula::FormulaToken* p = aCode.First(); p; p = aCode.Next()) + for (const formula::FormulaToken* p = aIter.First(); p; p = aIter.Next()) { switch (p->GetType()) { @@ -2162,9 +2163,10 @@ ScChart2DataProvider::createDataSequenceByFormulaTokens( return xResult; vector<ScTokenRef> aRefTokens; - const formula::FormulaToken* pFirst = aCode.First(); + formula::FormulaTokenArrayPlainIterator aIter(aCode); + const formula::FormulaToken* pFirst = aIter.First(); const formula::FormulaToken* pLast = aCode.GetArray()[n-1]; - for (const formula::FormulaToken* p = aCode.First(); p; p = aCode.Next()) + for (const formula::FormulaToken* p = aIter.First(); p; p = aIter.Next()) { switch (p->GetType()) { @@ -2625,7 +2627,8 @@ sal_Int32 ScChart2DataSequence::FillCacheFromExternalRef(const ScTokenRef& pToke ScExternalRefCache::TableTypeRef pTable = pRefMgr->getCacheTable(nFileId, aTabName, false); sal_Int32 nDataCount = 0; - for (FormulaToken* p = pArray->First(); p; p = pArray->Next()) + FormulaTokenArrayPlainIterator aIter(*pArray); + for (FormulaToken* p = aIter.First(); p; p = aIter.Next()) { // Cached external range is always represented as a single // matrix token, although that might change in the future when commit 2a29c792c214633bd8ab4ec229ec8bda91393388 Author: Tor Lillqvist <[email protected]> Date: Wed Jun 7 17:03:32 2017 +0300 Take new FormulaTokenArrayPlainIterator into use in one more file Change-Id: I70988724367b0ee798ccfee35c94e280b1015b36 diff --git a/sc/source/ui/miscdlgs/anyrefdg.cxx b/sc/source/ui/miscdlgs/anyrefdg.cxx index 2dba375feed6..9cf85abf729f 100644 --- a/sc/source/ui/miscdlgs/anyrefdg.cxx +++ b/sc/source/ui/miscdlgs/anyrefdg.cxx @@ -205,8 +205,8 @@ void ScFormulaReferenceHelper::ShowFormulaReference(const OUString& rStr) pTabViewShell->DoneRefMode(); pTabViewShell->ClearHighlightRanges(); - pScTokA->Reset(); - const formula::FormulaToken* pToken = pScTokA->GetNextReference(); + formula::FormulaTokenArrayPlainIterator aIter(*pScTokA); + const formula::FormulaToken* pToken = aIter.GetNextReference(); sal_uInt16 nIndex=0; @@ -232,7 +232,7 @@ void ScFormulaReferenceHelper::ShowFormulaReference(const OUString& rStr) pTabViewShell->AddHighlightRange(aRange, aColName); } - pToken = pScTokA->GetNextReference(); + pToken = aIter.GetNextReference(); } } } commit 7f2fbc92155f166a3cef61ba4ceb4a7be8e1f8e5 Author: Tor Lillqvist <[email protected]> Date: Wed Jun 7 17:03:09 2017 +0300 Take new FormulaTokenArrayPlainIterator into use in one more file Change-Id: I7134ce5c2d6d8fdc081410dcbc2b36c9db68839e diff --git a/sc/source/ui/docshell/externalrefmgr.cxx b/sc/source/ui/docshell/externalrefmgr.cxx index c8680615b789..2d27e0034eaa 100644 --- a/sc/source/ui/docshell/externalrefmgr.cxx +++ b/sc/source/ui/docshell/externalrefmgr.cxx @@ -202,9 +202,9 @@ bool hasRefsToSrcDoc(ScRangeData& rData, sal_uInt16 nFileId) if (!pArray) return false; - pArray->Reset(); - formula::FormulaToken* p = pArray->GetNextReference(); - for (; p; p = pArray->GetNextReference()) + formula::FormulaTokenArrayPlainIterator aIter(*pArray); + formula::FormulaToken* p = aIter.GetNextReference(); + for (; p; p = aIter.GetNextReference()) { if (!p->IsExternalRef()) continue; @@ -2323,7 +2323,8 @@ ScExternalRefCache::TokenArrayRef ScExternalRefManager::getRangeNameTokensFromSr ScExternalRefCache::TokenArrayRef pNew(new ScTokenArray); ScTokenArray aCode(*pRangeData->GetCode()); - for (const FormulaToken* pToken = aCode.First(); pToken; pToken = aCode.Next()) + FormulaTokenArrayPlainIterator aIter(aCode); + for (const FormulaToken* pToken = aIter.First(); pToken; pToken = aIter.Next()) { bool bTokenAdded = false; switch (pToken->GetType()) commit 5b142483c14bbf78ba161b2e1bf3302dd4ed6d46 Author: Tor Lillqvist <[email protected]> Date: Wed Jun 7 17:02:43 2017 +0300 Take new FormulaTokenArrayPlainIterator into use in one more file Change-Id: I2d68513664200349574446e68efcfacda1604f86 diff --git a/sc/source/filter/excel/xichart.cxx b/sc/source/filter/excel/xichart.cxx index 49c35f7ee6a6..f444ab05d5cf 100644 --- a/sc/source/filter/excel/xichart.cxx +++ b/sc/source/filter/excel/xichart.cxx @@ -120,6 +120,7 @@ using ::com::sun::star::chart2::data::XLabeledDataSequence; using ::com::sun::star::chart2::data::LabeledDataSequence; using ::formula::FormulaToken; +using ::formula::FormulaTokenArrayPlainIterator; using ::std::unique_ptr; namespace cssc = ::com::sun::star::chart; @@ -780,8 +781,8 @@ sal_uInt16 XclImpChSourceLink::GetCellCount() const sal_uInt32 nCellCount = 0; if( mxTokenArray ) { - mxTokenArray->Reset(); - for( const FormulaToken* pToken = mxTokenArray->First(); pToken; pToken = mxTokenArray->Next() ) + FormulaTokenArrayPlainIterator aIter(*mxTokenArray); + for( const FormulaToken* pToken = aIter.First(); pToken; pToken = aIter.Next() ) { switch( pToken->GetType() ) { @@ -895,8 +896,8 @@ void XclImpChSourceLink::FillSourceLink( ::std::vector< ScTokenRef >& rTokens ) // no links to fill. return; - mxTokenArray->Reset(); - for (FormulaToken* p = mxTokenArray->First(); p; p = mxTokenArray->Next()) + FormulaTokenArrayPlainIterator aIter(*mxTokenArray); + for (FormulaToken* p = aIter.First(); p; p = aIter.Next()) { ScTokenRef pToken(p->Clone()); if (ScRefTokenHelper::isRef(pToken)) commit 1d0d7127db27d12a39820023f25a212c05952610 Author: Tor Lillqvist <[email protected]> Date: Wed Jun 7 17:02:08 2017 +0300 Take new FormulaTokenArrayPlainIterator into use in one more place Change-Id: Id7f22d2d00e7c3ec79ec2dd886dce72be8692ac5 diff --git a/sc/source/filter/excel/xelink.cxx b/sc/source/filter/excel/xelink.cxx index 8b110575f7c0..55b320a50b1e 100644 --- a/sc/source/filter/excel/xelink.cxx +++ b/sc/source/filter/excel/xelink.cxx @@ -1916,7 +1916,8 @@ void XclExpSupbookBuffer::StoreCellRange( sal_uInt16 nFileId, const OUString& rT if (!pArray.get()) return; - for (FormulaToken* p = pArray->First(); p; p = pArray->Next()) + FormulaTokenArrayPlainIterator aIter(*pArray); + for (FormulaToken* p = aIter.First(); p; p = aIter.Next()) { if (p->GetType() == svMatrix) aMatrixList.push_back(p); commit 0505d3b22a29d47945f1d08135138610edbdc9bc Author: Tor Lillqvist <[email protected]> Date: Wed Jun 7 17:01:40 2017 +0300 Take new FormulaTokenArrayPlainIterator into use in one more place Change-Id: I8af9204e93608d7f63a502ddcc0b05e6f191343f diff --git a/sc/source/filter/excel/xeformula.cxx b/sc/source/filter/excel/xeformula.cxx index 7c0134f332be..ccc2ce6218d4 100644 --- a/sc/source/filter/excel/xeformula.cxx +++ b/sc/source/filter/excel/xeformula.cxx @@ -2126,7 +2126,8 @@ void XclExpFmlaCompImpl::ProcessExternalName( const XclExpScToken& rTokData ) // store external cell contents in CRN records if( mxData->mpScBasePos ) { - for( FormulaToken* pScToken = xArray->First(); pScToken; pScToken = xArray->Next() ) + FormulaTokenArrayPlainIterator aIter(*xArray); + for( FormulaToken* pScToken = aIter.First(); pScToken; pScToken = aIter.Next() ) { if( pScToken->IsExternalRef() ) { commit 468345765e71bcfabfc9148cbed8c4ae6c51910c Author: Tor Lillqvist <[email protected]> Date: Wed Jun 7 17:01:15 2017 +0300 Take new FormulaTokenArrayPlainIterator into use in one more place Change-Id: Ieb807769c64d38d8100c6c4bf0e7a0a2913d8e7b diff --git a/sc/source/filter/excel/xechart.cxx b/sc/source/filter/excel/xechart.cxx index e7d19e5227c4..3cdbd6e5006c 100644 --- a/sc/source/filter/excel/xechart.cxx +++ b/sc/source/filter/excel/xechart.cxx @@ -113,6 +113,7 @@ using ::com::sun::star::chart2::data::XDataSource; using ::com::sun::star::chart2::data::XLabeledDataSequence; using ::formula::FormulaToken; +using ::formula::FormulaTokenArrayPlainIterator; namespace cssc = ::com::sun::star::chart; namespace cssc2 = ::com::sun::star::chart2; @@ -904,8 +905,8 @@ sal_uInt16 XclExpChSourceLink::ConvertDataSequence( Reference< XDataSequence > c ScTokenArray aArray; sal_uInt32 nValueCount = 0; - pArray->Reset(); - for( const FormulaToken* pToken = pArray->First(); pToken; pToken = pArray->Next() ) + FormulaTokenArrayPlainIterator aIter(*pArray); + for( const FormulaToken* pToken = aIter.First(); pToken; pToken = aIter.Next() ) { switch( pToken->GetType() ) { commit 91a35c6a994a03ef5f0262a781740709a3d8e30a Author: Tor Lillqvist <[email protected]> Date: Wed Jun 7 16:47:17 2017 +0300 Take new FormulaTokenArrayPlainIterator into use in one more file Change-Id: I5dfae10ec9df7e5b450c9a105ecc76c5d36970c3 diff --git a/sc/source/core/tool/rangenam.cxx b/sc/source/core/tool/rangenam.cxx index f2aff8454dce..cbf3ff621495 100644 --- a/sc/source/core/tool/rangenam.cxx +++ b/sc/source/core/tool/rangenam.cxx @@ -163,8 +163,8 @@ void ScRangeData::CompileRangeData( const OUString& rSymbol, bool bSetError ) pCode->SetFromRangeName(true); if( pCode->GetCodeError() == FormulaError::NONE ) { - pCode->Reset(); - FormulaToken* p = pCode->GetNextReference(); + FormulaTokenArrayPlainIterator aIter(*pCode); + FormulaToken* p = aIter.GetNextReference(); if( p ) { // first token is a reference @@ -222,8 +222,8 @@ void ScRangeData::GuessPosition() SCTAB nMinTab = 0; formula::FormulaToken* t; - pCode->Reset(); - while ( ( t = pCode->GetNextReference() ) != nullptr ) + formula::FormulaTokenArrayPlainIterator aIter(*pCode); + while ( ( t = aIter.GetNextReference() ) != nullptr ) { ScSingleRefData& rRef1 = *t->GetSingleRef(); if ( rRef1.IsColRel() && rRef1.Col() < nMinCol ) @@ -283,9 +283,9 @@ void ScRangeData::UpdateTranspose( const ScRange& rSource, const ScAddress& rDes bool bChanged = false; formula::FormulaToken* t; - pCode->Reset(); + formula::FormulaTokenArrayPlainIterator aIter(*pCode); - while ( ( t = pCode->GetNextReference() ) != nullptr ) + while ( ( t = aIter.GetNextReference() ) != nullptr ) { if( t->GetType() != svIndex ) { @@ -315,9 +315,9 @@ void ScRangeData::UpdateGrow( const ScRange& rArea, SCCOL nGrowX, SCROW nGrowY ) bool bChanged = false; formula::FormulaToken* t; - pCode->Reset(); + formula::FormulaTokenArrayPlainIterator aIter(*pCode); - while ( ( t = pCode->GetNextReference() ) != nullptr ) + while ( ( t = aIter.GetNextReference() ) != nullptr ) { if( t->GetType() != svIndex ) { @@ -544,8 +544,8 @@ void ScRangeData::ValidateTabRefs() SCTAB nMinTab = aPos.Tab(); SCTAB nMaxTab = nMinTab; formula::FormulaToken* t; - pCode->Reset(); - while ( ( t = pCode->GetNextReference() ) != nullptr ) + formula::FormulaTokenArrayPlainIterator aIter(*pCode); + while ( ( t = aIter.GetNextReference() ) != nullptr ) { ScSingleRefData& rRef1 = *t->GetSingleRef(); ScAddress aAbs = rRef1.toAbs(aPos); @@ -580,8 +580,8 @@ void ScRangeData::ValidateTabRefs() ScAddress aOldPos = aPos; aPos.SetTab( aPos.Tab() - nMove ); - pCode->Reset(); - while ( ( t = pCode->GetNextReference() ) != nullptr ) + aIter.Reset(); + while ( ( t = aIter.GetNextReference() ) != nullptr ) { switch (t->GetType()) { @@ -628,8 +628,7 @@ void ScRangeData::InitCode() { if( pCode->GetCodeError() == FormulaError::NONE ) { - pCode->Reset(); - FormulaToken* p = pCode->GetNextReference(); + FormulaToken* p = FormulaTokenArrayPlainIterator(*pCode).GetNextReference(); if( p ) // exact one reference at first { if( p->GetType() == svSingleRef ) commit 74b1a89902980aaacc1c72ba42e3d945ead99bcf Author: Tor Lillqvist <[email protected]> Date: Wed Jun 7 16:46:21 2017 +0300 Take new FormulaTokenArrayPlainIterator into use in one more place Change-Id: I53531cb2e0ecf5972cb6c016b4395ded66622e9a diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx index 13ff13bf29f1..eb209c4be894 100644 --- a/sc/source/core/tool/interpr4.cxx +++ b/sc/source/core/tool/interpr4.cxx @@ -4453,7 +4453,8 @@ StackVar ScInterpreter::Interpret() { if ( !nErrorFunctionCount ) { // count of errorcode functions in formula - for ( FormulaToken* t = rArr.FirstRPN(); t; t = rArr.NextRPN() ) + FormulaTokenArrayPlainIterator aIter(rArr); + for ( FormulaToken* t = aIter.FirstRPN(); t; t = aIter.NextRPN() ) { if ( IsErrFunc(t->GetOpCode()) ) ++nErrorFunctionCount; commit 60df53223ba47c41593b94424235ded8a7f9fa49 Author: Tor Lillqvist <[email protected]> Date: Wed Jun 7 16:45:08 2017 +0300 Take new FormulaTokenArrayPlainIterator into use in one more place Change-Id: Idcbb0ebdf284568dc552c0edf5ae130ba7aaeafe diff --git a/sc/source/core/tool/formulagroup.cxx b/sc/source/core/tool/formulagroup.cxx index e165e0c317fe..cea77f9c90ac 100644 --- a/sc/source/core/tool/formulagroup.cxx +++ b/sc/source/core/tool/formulagroup.cxx @@ -168,7 +168,8 @@ bool FormulaGroupInterpreterSoftware::interpret(ScDocument& rDoc, const ScAddres for (SCROW i = 0; i < xGroup->mnLength; ++i, aTmpPos.IncRow()) { ScTokenArray aCode2; - for (const formula::FormulaToken* p = rCode.First(); p; p = rCode.Next()) + formula::FormulaTokenArrayPlainIterator aIter(rCode); + for (const formula::FormulaToken* p = aIter.First(); p; p = aIter.Next()) { CachedTokensType::iterator it = aCachedTokens.find(p); if (it != aCachedTokens.end()) commit 8f68e19356bfbc20f52e70a2b88ce77e01304b30 Author: Tor Lillqvist <[email protected]> Date: Wed Jun 7 16:43:43 2017 +0300 Take new FormulaTokenArrayPlainIterator into use in a couple more places Change-Id: Iaccbc7927943948136a56ba17f6bcff3a6971f31 diff --git a/sc/source/core/data/document10.cxx b/sc/source/core/data/document10.cxx index 2dc37a90c937..fddc029dc815 100644 --- a/sc/source/core/data/document10.cxx +++ b/sc/source/core/data/document10.cxx @@ -564,7 +564,8 @@ bool ScDocument::FindRangeNamesReferencingSheet( sc::UpdatedRangeNames& rIndexes bool bRef = !bSameDoc; // include every name used when copying to other doc if (nRecursion < 126) // whatever.. 42*3 { - for (const formula::FormulaToken* p = pCode->First(); p; p = pCode->Next()) + formula::FormulaTokenArrayPlainIterator aIter(*pCode); + for (const formula::FormulaToken* p = aIter.First(); p; p = aIter.Next()) { if (p->GetOpCode() == ocName) { @@ -603,7 +604,8 @@ MightReferenceSheet mightRangeNameReferenceSheet( ScRangeData* pData, SCTAB nRef if (!pCode) return MightReferenceSheet::NONE; - for (const formula::FormulaToken* p = pCode->First(); p; p = pCode->Next()) + formula::FormulaTokenArrayPlainIterator aIter(*pCode); + for (const formula::FormulaToken* p = aIter.First(); p; p = aIter.Next()) { if (p->GetOpCode() == ocName) return MightReferenceSheet::NAME; @@ -850,7 +852,8 @@ bool ScDocument::CopyAdjustRangeName( SCTAB& rSheet, sal_uInt16& rIndex, ScRange ScTokenArray* pCode = iRD->GetCode(); if (pCode) { - for (formula::FormulaToken* p = pCode->First(); p; p = pCode->Next()) + formula::FormulaTokenArrayPlainIterator aIter(*pCode); + for (formula::FormulaToken* p = aIter.First(); p; p = aIter.Next()) { if (p->GetOpCode() == ocName) { commit 1bb184b064fbd679152f503c0c997be24c21ce32 Author: Tor Lillqvist <[email protected]> Date: Wed Jun 7 16:42:48 2017 +0300 Take new FormulaTokenArrayPlainIterator into use in a couple more places Change-Id: Ic1725c930bcb376a54acd9ba5d3dfd270d546cd8 diff --git a/sc/source/core/data/documen4.cxx b/sc/source/core/data/documen4.cxx index 97cb5fe7ada7..c157a5f59ac3 100644 --- a/sc/source/core/data/documen4.cxx +++ b/sc/source/core/data/documen4.cxx @@ -477,10 +477,10 @@ bool ScDocument::MarkUsedExternalReferences( ScTokenArray& rArr, const ScAddress return false; ScExternalRefManager* pRefMgr = nullptr; - rArr.Reset(); + formula::FormulaTokenArrayPlainIterator aIter( rArr ); formula::FormulaToken* t = nullptr; bool bAllMarked = false; - while (!bAllMarked && (t = rArr.GetNextReferenceOrName()) != nullptr) + while (!bAllMarked && (t = aIter.GetNextReferenceOrName()) != nullptr) { if (t->IsExternalRef()) { @@ -498,7 +498,8 @@ bool ScDocument::MarkUsedExternalReferences( ScTokenArray& rArr, const ScAddress continue; ScTokenArray* pArray = pRangeData->GetCode(); - for (t = pArray->First(); t; t = pArray->Next()) + formula::FormulaTokenArrayPlainIterator aArrayIter(*pArray); + for (t = aArrayIter.First(); t; t = aArrayIter.Next()) { if (!t->IsExternalRef()) continue; commit 0eefc9554baf9374f2930b3a3c2cfc1fc2017945 Author: Tor Lillqvist <[email protected]> Date: Wed Jun 7 16:41:39 2017 +0300 Take new FormulaTokenArrayPlainIterator into use in a couple more places Change-Id: I49ddf780c0adee7123d985b1e343b8d248a46446 diff --git a/sc/source/core/data/conditio.cxx b/sc/source/core/data/conditio.cxx index 502d0b1e0623..8cbfc706f634 100644 --- a/sc/source/core/data/conditio.cxx +++ b/sc/source/core/data/conditio.cxx @@ -83,9 +83,9 @@ static bool lcl_HasRelRef( ScDocument* pDoc, ScTokenArray* pFormula, sal_uInt16 { if (pFormula) { - pFormula->Reset(); + FormulaTokenArrayPlainIterator aIter( *pFormula ); FormulaToken* t; - for( t = pFormula->Next(); t; t = pFormula->Next() ) + for( t = aIter.Next(); t; t = aIter.Next() ) { switch( t->GetType() ) { @@ -1418,9 +1418,9 @@ ScAddress ScConditionEntry::GetValidSrcPos() const ScTokenArray* pFormula = nPass ? pFormula2 : pFormula1; if (pFormula) { - pFormula->Reset(); + formula::FormulaTokenArrayPlainIterator aIter(*pFormula); formula::FormulaToken* t; - while ( ( t = pFormula->GetNextReference() ) != nullptr ) + while ( ( t = aIter.GetNextReference() ) != nullptr ) { ScSingleRefData& rRef1 = *t->GetSingleRef(); ScAddress aAbs = rRef1.toAbs(aSrcPos); commit f01ff6b831a76b3765b41d5bccc815215b1660ae Author: Tor Lillqvist <[email protected]> Date: Wed Jun 7 16:40:27 2017 +0300 Take new FormulaTokenArrayPlainIterator into use in one more place Change-Id: Idd92333d6c07748a2ae25f0124465d56b2302fbf diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx index d481a354f4a2..a19675dd7341 100644 --- a/sc/source/core/data/column3.cxx +++ b/sc/source/core/data/column3.cxx @@ -1229,11 +1229,12 @@ void lcl_AddCode( ScTokenArray& rArr, const ScFormulaCell* pCell ) ScTokenArray* pCode = const_cast<ScFormulaCell*>(pCell)->GetCode(); if (pCode) { - const formula::FormulaToken* pToken = pCode->First(); + FormulaTokenArrayPlainIterator aIter(*pCode); + const formula::FormulaToken* pToken = aIter.First(); while (pToken) { rArr.AddToken( *pToken ); - pToken = pCode->Next(); + pToken = aIter.Next(); } } commit d08f91b9acb52015c55dbfe7d5f4c4683d5a3e54 Author: Tor Lillqvist <[email protected]> Date: Wed Jun 7 16:39:23 2017 +0300 Take new FormulaTokenArrayPlainIterator into use in one more place Change-Id: I22b57104cf603883b51bb0f16f2e71ede939f9f4 diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx index 3d04070ebab5..314cf453f765 100644 --- a/sc/source/core/data/column.cxx +++ b/sc/source/core/data/column.cxx @@ -2684,11 +2684,12 @@ public: if (pCode && pCode->IsFormulaVectorDisabled()) { pCode->ResetVectorState(); - FormulaToken* pFT = pCode->First(); + FormulaTokenArrayPlainIterator aIter(*pCode); + FormulaToken* pFT = aIter.First(); while (pFT) { pCode->CheckToken(*pFT); - pFT = pCode->Next(); + pFT = aIter.Next(); } } } commit f1d4b0a9c831e5170ada49549197953af95d02a4 Author: Tor Lillqvist <[email protected]> Date: Wed Jun 7 16:14:32 2017 +0300 Take new FormulaTokenArrayPlainIterator into use in one more place Change-Id: I8c1ffdd725cc26f48722e09ba5c4d58551ce38a2 diff --git a/sc/source/core/data/colorscale.cxx b/sc/source/core/data/colorscale.cxx index 6b9837bb4a68..2a7b213de2a3 100644 --- a/sc/source/core/data/colorscale.cxx +++ b/sc/source/core/data/colorscale.cxx @@ -41,9 +41,9 @@ void ScFormulaListener::startListening(ScTokenArray* pArr, const ScRange& rRange if (!pArr || mpDoc->IsClipOrUndo()) return; - pArr->Reset(); formula::FormulaToken* t; - while ( ( t = pArr->GetNextReference() ) != nullptr ) + formula::FormulaTokenArrayPlainIterator aIter( *pArr ); + while ( ( t = aIter.GetNextReference() ) != nullptr ) { switch (t->GetType()) { commit 8b03c9595806fefaf49c844517024b088a007045 Author: Tor Lillqvist <[email protected]> Date: Wed Jun 7 15:36:44 2017 +0300 Take new FormulaTokenArrayPlainIterator into use in one more place Change-Id: Ia93b7759939bce42a4baf9ff55ec3c2b01840d9d diff --git a/sc/inc/formulaiter.hxx b/sc/inc/formulaiter.hxx index 75ec9e7d87c9..bbc0811cc286 100644 --- a/sc/inc/formulaiter.hxx +++ b/sc/inc/formulaiter.hxx @@ -20,11 +20,12 @@ #ifndef INCLUDED_SC_INC_FORMULAITER_HXX #define INCLUDED_SC_INC_FORMULAITER_HXX +#include <formula/tokenarray.hxx> + #include "address.hxx" class ScTokenArray; class ScFormulaCell; -namespace formula { class FormulaToken; } /** * Iterator for references in a formula cell. @@ -33,6 +34,7 @@ class ScDetectiveRefIter { private: ScTokenArray* pCode; + formula::FormulaTokenArrayPlainIterator maIter; ScAddress aPos; public: ScDetectiveRefIter( ScFormulaCell* pCell ); diff --git a/sc/source/core/data/formulaiter.cxx b/sc/source/core/data/formulaiter.cxx index e17da0769f54..dce2b20d7042 100644 --- a/sc/source/core/data/formulaiter.cxx +++ b/sc/source/core/data/formulaiter.cxx @@ -25,11 +25,11 @@ using namespace formula; -ScDetectiveRefIter::ScDetectiveRefIter( ScFormulaCell* pCell ) +ScDetectiveRefIter::ScDetectiveRefIter( ScFormulaCell* pCell ) : + pCode(pCell->GetCode()), + maIter(*pCode), + aPos(pCell->aPos) { - pCode = pCell->GetCode(); - pCode->Reset(); - aPos = pCell->aPos; } static bool lcl_ScDetectiveRefIter_SkipRef( formula::FormulaToken* p, const ScAddress& rPos ) @@ -65,10 +65,10 @@ bool ScDetectiveRefIter::GetNextRef( ScRange& rRange ) formula::FormulaToken* ScDetectiveRefIter::GetNextRefToken() { - formula::FormulaToken* p = pCode->GetNextReferenceRPN(); + formula::FormulaToken* p = maIter.GetNextReferenceRPN(); while (p && lcl_ScDetectiveRefIter_SkipRef(p, aPos)) { - p = pCode->GetNextReferenceRPN(); + p = maIter.GetNextReferenceRPN(); } return p; } commit 5abb8cc240238a9224c77108a2a9c207f03cf378 Author: Tor Lillqvist <[email protected]> Date: Wed Jun 7 14:05:35 2017 +0300 Take new FormulaTokenArrayPlainIterator into use in one simple place Change-Id: Ib3e0b24ab2857a94ccce3efbac160b2d8dd910c7 diff --git a/formula/source/ui/dlg/formula.cxx b/formula/source/ui/dlg/formula.cxx index 304b9430478c..3b137404419e 100644 --- a/formula/source/ui/dlg/formula.cxx +++ b/formula/source/ui/dlg/formula.cxx @@ -138,6 +138,7 @@ public: mutable uno::Reference< sheet::XFormulaOpCodeMapper> m_xOpCodeMapper; uno::Sequence< sheet::FormulaToken > m_aTokenList; ::std::unique_ptr<FormulaTokenArray> m_pTokenArray; + ::std::unique_ptr<FormulaTokenArrayPlainIterator> m_pTokenArrayIterator; mutable uno::Sequence< sheet::FormulaOpCodeMapEntry > m_aSpecialOpCodes; mutable const sheet::FormulaOpCodeMapEntry* m_pSpecialOpCodesEnd; mutable uno::Sequence< sheet::FormulaToken > m_aSeparatorsOpCodes; @@ -676,7 +677,7 @@ void FormulaDlg_Impl::MakeTree(StructPage* _pTree,SvTreeListEntry* pParent,Formu } } - MakeTree(_pTree,pEntry,m_pTokenArray->PrevRPN(),nParas); + MakeTree(_pTree,pEntry,m_pTokenArrayIterator->PrevRPN(),nParas); if (bCalcSubformula) { @@ -702,8 +703,8 @@ void FormulaDlg_Impl::MakeTree(StructPage* _pTree,SvTreeListEntry* pParent,Formu } --Count; - m_pTokenArray->NextRPN(); - MakeTree(_pTree,pParent,m_pTokenArray->PrevRPN(),Count); + m_pTokenArrayIterator->NextRPN(); + MakeTree(_pTree,pParent,m_pTokenArrayIterator->PrevRPN(),Count); } else { @@ -732,7 +733,7 @@ void FormulaDlg_Impl::MakeTree(StructPage* _pTree,SvTreeListEntry* pParent,Formu _pTree->InsertEntry(aResult,pParent,STRUCT_END,0,_pToken); } --Count; - MakeTree(_pTree,pParent,m_pTokenArray->PrevRPN(),Count); + MakeTree(_pTree,pParent,m_pTokenArrayIterator->PrevRPN(),Count); } } catch(const uno::Exception&) @@ -745,7 +746,7 @@ void FormulaDlg_Impl::MakeTree(StructPage* _pTree,SvTreeListEntry* pParent,Formu void FormulaDlg_Impl::fillTree(StructPage* _pTree) { InitFormulaOpCodeMapper(); - FormulaToken* pToken = m_pTokenArray->LastRPN(); + FormulaToken* pToken = m_pTokenArrayIterator->LastRPN(); if( pToken != nullptr) { @@ -768,6 +769,7 @@ void FormulaDlg_Impl::UpdateTokenArray( const OUString& rStrExp) } InitFormulaOpCodeMapper(); m_pTokenArray = m_pHelper->convertToTokenArray(m_aTokenList); + m_pTokenArrayIterator.reset(new FormulaTokenArrayPlainIterator(*m_pTokenArray)); const sal_Int32 nLen = static_cast<sal_Int32>(m_pTokenArray->GetLen()); FormulaToken** pTokens = m_pTokenArray->GetArray(); if ( pTokens && nLen == m_aTokenList.getLength() ) _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
