[Libreoffice-commits] core.git: Branch 'feature/formula-core-rework' - formula/inc formula/source sc/inc sc/source
Kohei Yoshida
kohei.yoshida at gmail.com
Mon Mar 18 12:13:59 PDT 2013
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 <kohei.yoshida at gmail.com>
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 );
More information about the Libreoffice-commits
mailing list