formula/inc/formula/tokenarray.hxx | 1 formula/source/core/api/token.cxx | 52 ------------------------------------- sc/inc/tokenarray.hxx | 2 + sc/source/core/tool/token.cxx | 52 +++++++++++++++++++++++++++++++++++++ 4 files changed, 54 insertions(+), 53 deletions(-)
New commits: commit f119d6456c5aaa8b6e6f6cb08002869fb1d9fbb7 Author: Kohei Yoshida <[email protected]> Date: Mon Mar 18 15:15:59 2013 -0400 Move GetHash() from FormulaTokenArray to ScTokenArray. To allow access to reference tokens. Change-Id: I3e2d2653722005c04b6d26e1a4ddfce0a459ef37 diff --git a/formula/inc/formula/tokenarray.hxx b/formula/inc/formula/tokenarray.hxx index aa382cd..42c9212 100644 --- a/formula/inc/formula/tokenarray.hxx +++ b/formula/inc/formula/tokenarray.hxx @@ -94,7 +94,6 @@ public: virtual ~FormulaTokenArray(); FormulaTokenArray* Clone() const; /// True copy! - size_t GetHash() const; void Clear(); void DelRPN(); FormulaToken* First() { nIndex = 0; return Next(); } diff --git a/formula/source/core/api/token.cxx b/formula/source/core/api/token.cxx index 5a47d2e..150be29 100644 --- a/formula/source/core/api/token.cxx +++ b/formula/source/core/api/token.cxx @@ -685,58 +685,6 @@ FormulaTokenArray* FormulaTokenArray::Clone() const return p; } -size_t FormulaTokenArray::GetHash() const -{ - static OUStringHash aHasher; - - size_t nHash = 1; - OpCode eOp; - StackVar eType; - const FormulaToken* p; - sal_uInt16 n = std::min<sal_uInt16>(nLen, 20); - for (sal_uInt16 i = 0; i < n; ++i) - { - p = pCode[i]; - eOp = p->GetOpCode(); - if (eOp == ocPush) - { - // This is stack variable. Do additional differentiation. - eType = p->GetType(); - switch (eType) - { - case svByte: - { - // Constant value. - sal_uInt8 nVal = p->GetByte(); - nHash += (static_cast<size_t>(nVal) << i); - continue; - } - case svDouble: - { - // Constant value. - double fVal = p->GetDouble(); - nHash += (static_cast<size_t>(fVal) << i); - continue; - } - case svString: - { - // Constant string. - const String& rStr = p->GetString(); - nHash += (aHasher(rStr) << i); - continue; - } - default: - // TODO: Decide later if we should generate hash from references as well. - ; - } - } - - // Use the opcode value in all the other cases. - nHash += (static_cast<size_t>(eOp) << i); - } - return nHash; -} - void FormulaTokenArray::Clear() { if( nRPN ) DelRPN(); diff --git a/sc/inc/tokenarray.hxx b/sc/inc/tokenarray.hxx index fd77250..01993e9 100644 --- a/sc/inc/tokenarray.hxx +++ b/sc/inc/tokenarray.hxx @@ -42,6 +42,8 @@ public: virtual ~ScTokenArray(); ScTokenArray* Clone() const; /// True copy! + size_t GetHash() const; + /// Exactly and only one range (valid or deleted) bool IsReference( ScRange& rRange ) const; /// Exactly and only one valid range (no #REF!s) diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx index da787e1..b400f6d 100644 --- a/sc/source/core/tool/token.cxx +++ b/sc/source/core/tool/token.cxx @@ -1274,6 +1274,58 @@ bool ScTokenArray::ImplGetReference( ScRange& rRange, bool bValidOnly ) const return bIs; } +size_t ScTokenArray::GetHash() const +{ + static OUStringHash aHasher; + + size_t nHash = 1; + OpCode eOp; + StackVar eType; + const FormulaToken* p; + sal_uInt16 n = std::min<sal_uInt16>(nLen, 20); + for (sal_uInt16 i = 0; i < n; ++i) + { + p = pCode[i]; + eOp = p->GetOpCode(); + if (eOp == ocPush) + { + // This is stack variable. Do additional differentiation. + eType = p->GetType(); + switch (eType) + { + case svByte: + { + // Constant value. + sal_uInt8 nVal = p->GetByte(); + nHash += (static_cast<size_t>(nVal) << i); + continue; + } + case svDouble: + { + // Constant value. + double fVal = p->GetDouble(); + nHash += (static_cast<size_t>(fVal) << i); + continue; + } + case svString: + { + // Constant string. + const String& rStr = p->GetString(); + nHash += (aHasher(rStr) << i); + continue; + } + default: + // TODO: Decide later if we should generate hash from references as well. + ; + } + } + + // Use the opcode value in all the other cases. + nHash += (static_cast<size_t>(eOp) << i); + } + return nHash; +} + bool ScTokenArray::IsReference( ScRange& rRange ) const { return ImplGetReference( rRange, false ); _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
