diff --git a/src/xercesc/util/XMLString.cpp b/src/xercesc/util/XMLString.cpp index b31b7fcb5ee9a141b89636cd6b4cbceb5fec39e7..2af615c90f65a08d849b15b26eac43693d5edbdb 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 7e39ae02190b32374f2d5685bcdb0fde2574417e..3d04923b9ef8af28a4f1526a617ef799d238ce27 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