From 5065b274a548143e7beae606b9d78b1747c91c22 Mon Sep 17 00:00:00 2001
From: David Abram Cargill <cargilld@apache.org>
Date: Tue, 14 Dec 2004 02:09:20 +0000
Subject: [PATCH] Performance update from Christian Will.

git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@176244 13f79535-47bb-0310-9956-ffa450edef68
---
 src/xercesc/util/XMLString.cpp | 23 -----------------------
 src/xercesc/util/XMLString.hpp | 27 +++++++++++++++++++++++++++
 2 files changed, 27 insertions(+), 23 deletions(-)

diff --git a/src/xercesc/util/XMLString.cpp b/src/xercesc/util/XMLString.cpp
index b31b7fcb5..2af615c90 100644
--- a/src/xercesc/util/XMLString.cpp
+++ b/src/xercesc/util/XMLString.cpp
@@ -1096,29 +1096,6 @@ bool XMLString::copyNString(        XMLCh* const    target
     return (*srcPtr == 0);
 }
 
-
-unsigned int XMLString::hash(   const   XMLCh* const    tohash
-                                , const unsigned int    hashModulus
-                                , MemoryManager* const)
-{  
-    assert(hashModulus);
-
-    unsigned int hashVal = 0;
-    if (tohash) {
-        const XMLCh* curCh = tohash;
-        while (*curCh)
-        {
-            unsigned int top = hashVal >> 24;
-            hashVal += (hashVal * 37) + top + (unsigned int)(*curCh);
-            curCh++;
-        }
-    }
-
-    // Divide by modulus
-    return hashVal % hashModulus;
-}
-
-
 const XMLCh* XMLString::findAny(const   XMLCh* const    toSearch
                                 , const XMLCh* const    searchList)
 {
diff --git a/src/xercesc/util/XMLString.hpp b/src/xercesc/util/XMLString.hpp
index 7e39ae021..3d04923b9 100644
--- a/src/xercesc/util/XMLString.hpp
+++ b/src/xercesc/util/XMLString.hpp
@@ -16,6 +16,9 @@
 
 /*
  * $Log$
+ * Revision 1.30  2004/12/14 02:09:20  cargilld
+ * Performance update from Christian Will.
+ *
  * Revision 1.29  2004/12/06 10:47:01  amassari
  * Added XMLString::release(void**, MemoryManager*) [jira# 1301]
  *
@@ -235,6 +238,7 @@
 #include <xercesc/framework/XMLBuffer.hpp>
 #include <xercesc/framework/MemoryManager.hpp>
 #include <string.h>
+#include <assert.h>
 
 XERCES_CPP_NAMESPACE_BEGIN
 
@@ -1733,6 +1737,29 @@ inline int XMLString::lastIndexOf(const XMLCh* const toSearch, const XMLCh ch)
     return XMLString::lastIndexOf(ch, toSearch, stringLen(toSearch));
 }
 
+inline unsigned int XMLString::hash(   const   XMLCh* const    tohash
+                                , const unsigned int    hashModulus
+                                , MemoryManager* const)
+{  
+    assert(hashModulus);
+
+    if (tohash == 0 || *tohash == 0)
+        return 0;
+
+    const XMLCh* curCh = tohash;
+    unsigned int hashVal = (unsigned int)(*curCh);
+    curCh++;
+
+    while (*curCh)
+    {
+        hashVal = (hashVal * 38) + (hashVal >> 24) + (unsigned int)(*curCh);
+        curCh++;
+    }
+
+    // Divide by modulus
+    return hashVal % hashModulus;
+}
+
 XERCES_CPP_NAMESPACE_END
 
 #endif
-- 
GitLab