tcssl.cpp

来自「并行TIN生成算法, 基于DeWall算法理论实现」· C++ 代码 · 共 100 行

CPP
100
字号
// 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 + =
减小字号Ctrl + -
显示快捷键?