percylee的专栏

...........................让互联网使你我他的生活更加美好!

SegWord::IHash

 

#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__

 

阅读更多
文章标签: class 算法
个人分类: SegWord
想对作者说点什么? 我来说一句

单向散列函数组件 for ASP

2006年03月16日 10KB 下载

没有更多推荐了,返回首页

不良信息举报

SegWord::IHash

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭