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

📄 tcsbl.h

📁 并行TIN生成算法, 基于DeWall算法理论实现
💻 H
字号:
/* -*- C++ -*- */

//=============================================================================
/**
 *  @文件    TcsBL.h
 *
 *  TcsBL.h, 版本 1.30 2008/12/15
 *
 *  @作者 邓雪清 <xueqingdeng@sohu.com>
 *  双向链表类
 */
//=============================================================================

#ifndef _TCS_BL_H_
#define _TCS_BL_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>

// ----- CTcsBL -------------------------------------------------------------

class DLLEXPORT CTcsBL
{
protected:
	struct NODE {
		NODE	*prev;
		NODE	*next;
		void	*data;
	};

public:
	CTcsBL(void);
	~CTcsBL(void);

	void Lock(void);
	void Lose(void);

	long  GetSize(void);

	void *GetHead(void);
	void *GetTail(void);
	void *AddHead(void *pData);
	void *AddTail(void *pData);
	void *AddNext(void *pNode, void *pData);
	void *AddPrev(void *pNode, void *pData);

	void *GetNext(void);
	void *GetPrev(void);
	void *GetAt(long idx);
	long  SetAt(long idx, void *pData);
	void *AddAt(long idx, void *pData);

	void *RemoveHead(void);
	void *RemoveTail(void);
	void *RemoveAt(long idx);
	void *RemoveAt(void *pNode);

protected:
	NODE *NewNode(NODE *pPrev, NODE *pNext);

protected:
	NODE	*m_pHead;
	NODE	*m_pTail;
	NODE	*m_pNonc;
	long	 m_nNonc;
	NODE	*m_pFree;
	void	*m_mLock;
	long	 m_nSize;
};

inline void CTcsBL::Lock(void)
{
	::WaitForSingleObject(m_mLock, INFINITE);
}

inline void CTcsBL::Lose(void)
{
	::ReleaseMutex(m_mLock);
}

inline long CTcsBL::GetSize(void)
{
	return m_nSize;
}

inline void *CTcsBL::GetHead(void)
{
	if (m_nSize > 0)
	{
		m_nNonc = 0;
		m_pNonc = m_pHead;
		return m_pHead->data;
	}
	else
		return 0;
}

inline void *CTcsBL::GetTail(void)
{
	if (m_nSize > 0)
	{
		m_pNonc = m_pTail;
		m_nNonc = m_nSize - 1;
		return  m_pTail->data;
	}
	else
		return 0;
}

inline void *CTcsBL::GetNext(void)
{
	if (!(m_pNonc->next))
		return 0;

	m_pNonc = m_pNonc->next;
	m_nNonc++;
	
	return m_pNonc->data;
}

inline void *CTcsBL::GetPrev(void)
{
	if (!(m_pNonc->prev))
		return 0;
	
	m_pNonc = m_pNonc->prev;
	m_nNonc--;
	
	return m_pNonc->data;
}

#endif // _TCS_BL_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -