diff options
author | Eike Rathke <erack@redhat.com> | 2015-06-15 14:51:52 +0200 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2015-08-06 12:22:47 +0200 |
commit | 2b25c9d40f0bf5cfcf1eaca9f020f3ecb2811f4f (patch) | |
tree | 1afd11c8f70d83b7017cd4becafd4423f2e28066 /formula | |
parent | 791fe38f5582432992e330a0d844179097bbcf5b (diff) |
prepare ReplaceToken() to replace also in RPN
Change-Id: I98fbcb9849f2c2b1f26109a54ecbf5347cdd8b4e
(cherry picked from commit 1d463600f4db2993838c7660da2cb87aa19218fd)
Diffstat (limited to 'formula')
-rw-r--r-- | formula/source/core/api/token.cxx | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/formula/source/core/api/token.cxx b/formula/source/core/api/token.cxx index ba1be28e788f..cc88919e994f 100644 --- a/formula/source/core/api/token.cxx +++ b/formula/source/core/api/token.cxx @@ -848,15 +848,33 @@ FormulaToken* FormulaTokenArray::MergeArray( ) return NULL; } -FormulaToken* FormulaTokenArray::ReplaceToken( sal_uInt16 nOffset, FormulaToken* t ) +FormulaToken* FormulaTokenArray::ReplaceToken( sal_uInt16 nOffset, FormulaToken* t, + FormulaTokenArray::ReplaceMode eMode ) { + if (eMode == BACKWARD_CODE_ONLY) + nOffset = nLen - nOffset - 1; + if (nOffset < nLen) { CheckToken(*t); - sal_uInt16 nPos = nLen - nOffset - 1; t->IncRef(); - pCode[nPos]->DecRef(); - pCode[nPos] = t; + FormulaToken* p = pCode[nOffset]; + pCode[nOffset] = t; + if (eMode == FORWARD_CODE_AND_RPN && p->GetRef() > 1) + { + for (sal_uInt16 i=0; i < nRPN; ++i) + { + if (pRPN[i] == p) + { + t->IncRef(); + pRPN[i] = t; + p->DecRef(); + if (p->GetRef() == 1) + break; // for + } + } + } + p->DecRef(); // may be dead now return t; } else |