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

📄 tcssl.cpp

📁 并行TIN生成算法, 基于DeWall算法理论实现
💻 CPP
字号:
// TcsSL.cpp
// 邓雪清, 2008/12/15

#include "TcsSL.h"

/////////////////////////////////////////////////////////////////////////////
// CTcsSL

CTcsSL::CTcsSL(void)
{
	m_nSize = 0;
	m_pHead = m_pFree = 0;
	m_mLock = ::CreateMutex(0, 0, 0);
}

CTcsSL::~CTcsSL(void)
{
	if (m_mLock)
		::WaitForSingleObject(m_mLock, INFINITE);

	NODE *pNode;

	while (m_pHead)
	{
		pNode = m_pHead;
		m_pHead = pNode->next;
		delete pNode;
	}

	while (m_pFree)
	{
		pNode = m_pFree;
		m_pFree = pNode->next;
		delete pNode;
	}

	if (m_mLock)
		::CloseHandle(m_mLock);
}

CTcsSL::NODE *CTcsSL::NewNode(void)
{
	CTcsSL::NODE* pNode;
	
	if (!m_pFree)
	{
		pNode = new CTcsSL::NODE;
		if (!pNode)
			return 0;
	}
	else
	{
		pNode = m_pFree;
		m_pFree = pNode->next;
	}

	return pNode;
}

void *CTcsSL::PutData(void *pData)
{
	NODE *pNode = NewNode();
	if (!pNode)
		return 0;

	pNode->next = m_pHead;
	pNode->data = pData;
	m_pHead = pNode;
	m_nSize++;

	return pNode;
}

void *CTcsSL::PopData(void)
{
	if (!m_pHead)
		return 0;

	m_nSize--;
	NODE *pNode = m_pHead;
	m_pHead = m_pHead->next;
	void *pData = pNode->data;

	// Insert Free List;
	if (m_pFree)
	{
		pNode->next = m_pFree;
		pNode->data = 0;
		m_pFree = pNode;
	}
	else
	{
		pNode->next = 0;
		pNode->data = 0;
		m_pFree = pNode;
	}

	return pData;
}

⌨️ 快捷键说明

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