00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef __NEHASH_H
00028 #define __NEHASH_H
00029
00030 #include "base.h"
00031
00032 #include <string>
00033
00034
00041 namespace NeoEngine
00042 {
00043
00044
00053 inline unsigned int Hash( const char *pszString, unsigned int uiLength = 0 )
00054 {
00055 if( !pszString )
00056 return 0;
00057
00058 if( !uiLength )
00059 uiLength = (unsigned int)strlen( pszString );
00060
00061 unsigned int uiRet = 0;
00062 unsigned int uiTmp;
00063 const unsigned char *pszStr = (const unsigned char*)pszString;
00064
00065 for( unsigned int i = 0; i < uiLength; ++i, ++pszStr )
00066 {
00067 uiRet = ( uiRet << 4 ) + *pszStr;
00068
00069 if( ( uiTmp = uiRet & 0xF0000000 ) )
00070 uiRet ^= ( uiTmp >> 24 );
00071
00072 uiRet &= ~uiTmp;
00073 }
00074
00075 return uiRet;
00076 }
00077
00078
00087 inline unsigned int Hash( const std::string &rstrString, unsigned int uiLength = 0 )
00088 {
00089 return Hash( rstrString.c_str(), uiLength ? uiLength : rstrString.length() );
00090 }
00091
00092
00093 };
00094
00095
00096 #endif
00097