#ifndef __IHASH_H__
#define __IHASH_H__
#include "../../include/UString.h"
using namespace UStr;
/*
* IHash接口及其默认实现:ELFhash算法(默认hash算法)
*************************************************************************/
const unsigned long MAX_HASHTABLE_SIZE = 100000; //默认hash表最大元素数
class IHash
{
public:
virtual void init(unsigned long MaxHashTableSize) = 0;
virtual unsigned long operator ()(UString& Str, Section& StrSect) = 0;
};
class ELFHash
:public IHash
{
public:
ELFHash()
{
_hashTableSize = MAX_HASHTABLE_SIZE;
}
void init(unsigned long MaxHashTableSize)
{
_hashTableSize = MaxHashTableSize;
if( 0 == _hashTableSize )
_hashTableSize = MAX_HASHTABLE_SIZE;
}
unsigned long operator ()(UString& Str, Section& StrSect)
{
register unsigned long h = 0, g = 0;
if( Str.length() < StrSect._sect._begin+StrSect._sect._length )
return h;//所给区间错误
wchar_t* pStr = Str.u_str()+StrSect._sect._begin;
unsigned int length = StrSect._sect._length;
unsigned int pos = 0;
while( *pStr && pos < length )
{
pos ++;
h = (h << 4) + *pStr++;
g = h & 0xF0000000L;
if( g )
h ^= g>>24;
h &= ~g;
}
return h%_hashTableSize;
}
private:
unsigned long _hashTableSize;
};
#endif //__IHAS_H__
本文介绍了一个通用的哈希接口IHash及其实现ELFHash。ELFHash采用ELF算法进行字符串哈希处理,适用于多种场景。文中详细描述了ELFHash的初始化过程和哈希计算方法。
171

被折叠的 条评论
为什么被折叠?



