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