📄 tcshl.h
字号:
/* -*- C++ -*- */
//=============================================================================
/**
* @文件 TcsHL.h
*
* TcsHL.h, 版本 1.00 2008/12/15
*
* @作者 邓雪清 <xueqingdeng@sohu.com>
* 乘法散列链表类
*/
//=============================================================================
#ifndef _TCS_HL_H_
#define _TCS_HL_H_
#if !defined (_WIN32)
#define DLLEXPORT
#elif !defined (DLLEXPORT)
#if defined (_LIB)
#define DLLEXPORT
#elif defined (_USRDLL)
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __declspec(dllimport)
#endif
#endif
#include <Windows.h>
typedef unsigned long uong;
// 乘法哈希函数
#define EQHASH_A ((uong)2654435769U)
#define EQHASH(k) (EQHASH_A*((uong)(k)))
typedef long (*EQLH_FUNC) (void *, void *);
typedef uong (*HASH_FUNC) (void *);
// ----- CTcsHL -------------------------------------------------------------
class DLLEXPORT CTcsHL
{
protected:
struct NODE {
NODE *next;
void *code;
void *data;
uong hash;
};
public:
CTcsHL(long nSize);
CTcsHL(long nSize, EQLH_FUNC eFunc, HASH_FUNC hFunc);
~CTcsHL(void);
void Lock(void);
void Lose(void);
long GetSize(void);
void *DetData(void *code);
void *GetData(void *code);
void *PutData(void *code, void *data);
void *GetHead(void);
void *GetNext(void);
void *RemoveHead(void);
void *RemoveNext(void);
void Free(void);
protected:
uong Hash(void *code);
NODE **Lookup(void *code);
NODE **Lookup(void *code, uong hash);
void Grow(void);
protected:
NODE **m_pHead;
NODE *m_pFree;
void *m_mLock;
long m_nSize;
long m_eSize;
EQLH_FUNC m_eFunc;
HASH_FUNC m_hFunc;
long m_oSize;
long m_nHidx;
long m_nEidx;
};
inline void CTcsHL::Lock(void)
{
::WaitForSingleObject(m_mLock, INFINITE);
}
inline void CTcsHL::Lose(void)
{
::ReleaseMutex(m_mLock);
}
inline long CTcsHL::GetSize(void)
{
return m_eSize;
}
#endif // _TCS_HL_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -