⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcshl.h

📁 并行TIN生成算法, 基于DeWall算法理论实现
💻 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 + -