[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