diff options
author | Tor Lillqvist <tml@collabora.com> | 2017-06-19 11:37:43 +0300 |
---|---|---|
committer | Tor Lillqvist <tml@collabora.com> | 2017-06-19 12:23:24 +0300 |
commit | c3fae6be6067572aaf9f0c72ad35b69019a79135 (patch) | |
tree | dab6a4ac276daa0fcc54d09b36f42323376c56eb | |
parent | cfd5d203e9c641c150f92c2b1ee5b84e89e6dc99 (diff) |
Add yet another kind of iterator for the two arrays in FormulaTokenArray
This one has no extra functionality at all, and its only purpose is to
be used in range-based for loops. If there is a cleaner way to do
this, feel free. Not sure if this functionality could or should be
combined with either of the two existing iterator classes related to
FormulaTokenArray (FormulaTokenIterator and
FormulaTokenArrayPlainIterator). Probably not.
Change-Id: I32599b0800fd2585624d3742a46ad4896ce7e47a
-rw-r--r-- | formula/source/core/api/token.cxx | 48 | ||||
-rw-r--r-- | include/formula/tokenarray.hxx | 36 |
2 files changed, 58 insertions, 26 deletions
diff --git a/formula/source/core/api/token.cxx b/formula/source/core/api/token.cxx index 2cd4b63f92a4..bb634fcdfa46 100644 --- a/formula/source/core/api/token.cxx +++ b/formula/source/core/api/token.cxx @@ -495,15 +495,15 @@ FormulaToken* FormulaTokenArray::FirstRPNToken() const bool FormulaTokenArray::HasReferences() const { - for (sal_uInt16 i = 0; i < nLen; ++i) + for (auto i: Tokens()) { - if (pCode[i]->IsRef()) + if (i->IsRef()) return true; } - for (sal_uInt16 i = 0; i < nRPN; ++i) + for (auto i: RPNTokens()) { - if (pRPN[i]->IsRef()) + if (i->IsRef()) return true; } @@ -512,9 +512,9 @@ bool FormulaTokenArray::HasReferences() const bool FormulaTokenArray::HasExternalRef() const { - for ( sal_uInt16 j=0; j < nLen; j++ ) + for (auto i: Tokens()) { - if (pCode[j]->IsExternalRef()) + if (i->IsExternalRef()) return true; } return false; @@ -522,9 +522,9 @@ bool FormulaTokenArray::HasExternalRef() const bool FormulaTokenArray::HasOpCode( OpCode eOp ) const { - for ( sal_uInt16 j=0; j < nLen; j++ ) + for (auto i: Tokens()) { - if ( pCode[j]->GetOpCode() == eOp ) + if (i->GetOpCode() == eOp) return true; } return false; @@ -532,9 +532,9 @@ bool FormulaTokenArray::HasOpCode( OpCode eOp ) const bool FormulaTokenArray::HasOpCodeRPN( OpCode eOp ) const { - for ( sal_uInt16 j=0; j < nRPN; j++ ) + for (auto i: RPNTokens()) { - if ( pRPN[j]->GetOpCode() == eOp ) + if (i->GetOpCode() == eOp) return true; } return false; @@ -542,9 +542,9 @@ bool FormulaTokenArray::HasOpCodeRPN( OpCode eOp ) const bool FormulaTokenArray::HasNameOrColRowName() const { - for ( sal_uInt16 j=0; j < nLen; j++ ) + for (auto i: Tokens()) { - if( pCode[j]->GetType() == svIndex || pCode[j]->GetOpCode() == ocColRowName ) + if (i->GetType() == svIndex || i->GetOpCode() == ocColRowName ) return true; } return false; @@ -552,12 +552,9 @@ bool FormulaTokenArray::HasNameOrColRowName() const bool FormulaTokenArray::HasOpCodes(const unordered_opcode_set& rOpCodes) const { - FormulaToken** p = pCode; - FormulaToken** pEnd = p + static_cast<size_t>(nLen); - for (; p != pEnd; ++p) + for (auto i: Tokens()) { - OpCode eOp = (*p)->GetOpCode(); - if (rOpCodes.count(eOp) > 0) + if (rOpCodes.count(i->GetOpCode()) > 0) return true; } @@ -853,9 +850,8 @@ bool FormulaTokenArray::HasMatrixDoubleRefOps() std::unique_ptr<FormulaToken*[]> pStack(new FormulaToken* [nRPN]); FormulaToken* pResult = new FormulaDoubleToken( 0.0 ); short sp = 0; - for ( sal_uInt16 j = 0; j < nRPN; j++ ) + for ( auto t: RPNTokens() ) { - FormulaToken* t = pRPN[j]; OpCode eOp = t->GetOpCode(); sal_uInt8 nParams = t->GetParamCount(); switch ( eOp ) @@ -1248,9 +1244,9 @@ bool FormulaMissingContext::AddMissing( FormulaTokenArray *pNewArr, const Missin bool FormulaTokenArray::NeedsPodfRewrite( const MissingConventionODF & rConv ) { - for ( int i = 0; i < nLen; ++i ) + for ( auto i: Tokens() ) { - if ( rConv.isRewriteNeeded( pCode[i]->GetOpCode())) + if ( rConv.isRewriteNeeded( i->GetOpCode())) return true; } return false; @@ -1258,9 +1254,9 @@ bool FormulaTokenArray::NeedsPodfRewrite( const MissingConventionODF & rConv ) bool FormulaTokenArray::NeedsOoxmlRewrite() { - for ( int i = 0; i < nLen; ++i ) + for ( auto i: Tokens() ) { - if ( MissingConventionOOXML::isRewriteNeeded( pCode[i]->GetOpCode())) + if ( MissingConventionOOXML::isRewriteNeeded( i->GetOpCode())) return true; } return false; @@ -1484,12 +1480,12 @@ FormulaToken* FormulaTokenArray::AddOpCode( OpCode eOp ) void FormulaTokenArray::ReinternStrings( svl::SharedStringPool& rPool ) { - for (sal_uInt16 i=0; i < nLen; ++i) + for (auto i: Tokens()) { - switch (pCode[i]->GetType()) + switch (i->GetType()) { case svString: - pCode[i]->SetString( rPool.intern( pCode[i]->GetString().getString())); + i->SetString( rPool.intern( i->GetString().getString())); break; default: ; // nothing diff --git a/include/formula/tokenarray.hxx b/include/formula/tokenarray.hxx index 2014994e03fc..7252613cf713 100644 --- a/include/formula/tokenarray.hxx +++ b/include/formula/tokenarray.hxx @@ -112,6 +112,30 @@ public: typedef std::unordered_set<OpCode, std::hash<std::underlying_type<OpCode>::type> > unordered_opcode_set; +class FORMULA_DLLPUBLIC FormulaTokenArrayStandardIterator +{ +private: + FormulaToken** mpBegin; + FormulaToken** mpEnd; + +public: + FormulaTokenArrayStandardIterator(FormulaToken** pBegin, sal_uInt16 nSize) : + mpBegin(pBegin), + mpEnd(pBegin + nSize) + { + } + + FormulaToken** begin() const + { + return mpBegin; + } + + FormulaToken** end() const + { + return mpEnd; + } +}; + class FORMULA_DLLPUBLIC FormulaTokenArray { protected: @@ -247,7 +271,19 @@ public: } FormulaToken** GetArray() const { return pCode; } + + FormulaTokenArrayStandardIterator Tokens() const + { + return FormulaTokenArrayStandardIterator(pCode, nLen); + } + FormulaToken** GetCode() const { return pRPN; } + + FormulaTokenArrayStandardIterator RPNTokens() const + { + return FormulaTokenArrayStandardIterator(pRPN, nRPN); + } + sal_uInt16 GetLen() const { return nLen; } sal_uInt16 GetCodeLen() const { return nRPN; } FormulaError GetCodeError() const { return nError; } |