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

📄 fsa.h

📁 此为传奇游戏源代码
💻 H
字号:


/*
	Fixed Size Allocator

	Date:
		2002/03/05

	Note:
		皋葛府 且寸/秦力俊 靛绰 厚侩(Cost)苞 窜祈拳(Fragmentation)甫 临捞扁 困茄 努贰胶
*/
#ifndef __ORZ_MEMORY_ALLOCATOR__
#define __ORZ_MEMORY_ALLOCATOR__


template< class T >
class CFixedSizeAllocator
{
public:
	class CMemBlock
	{
	public:
		T			tData;
		CMemBlock	*pNext;
	};

protected:
	CMemBlock *	m_pMemory;
	CMemBlock * m_pFirstFree;
	int			m_nCapacity;

public:
	CFixedSizeAllocator( int nCapacity );
	virtual ~CFixedSizeAllocator();

	T *  Alloc();
	void Free( T *pMemory );

protected:
	void ConstructFreeList( int nFrom, int nTo );
};


template< class T >
CFixedSizeAllocator< T >::CFixedSizeAllocator( int nCapacity )
: m_nCapacity( nCapacity )
{
	m_pMemory = new CMemBlock[ nCapacity ];
	if ( !m_pMemory )
		m_nCapacity = 0;

	ConstructFreeList( 0, m_nCapacity );
}


template< class T >
CFixedSizeAllocator< T >::~CFixedSizeAllocator()
{
	if ( m_pMemory )
		delete[] m_pMemory;
}


template< class T >
T * CFixedSizeAllocator< T >::Alloc()
{
	if ( !m_pFirstFree )
		return NULL;
	
	CMemBlock *pBlock	= m_pFirstFree;
	m_pFirstFree		= pBlock->pNext;

	return (T *) pBlock;
}


template< class T >
void CFixedSizeAllocator< T >::Free( T *pMemory )
{
	CMemBlock *pBlock = (CMemBlock *) pMemory;

	pBlock->pNext = m_pFirstFree;
	m_pFirstFree  = pBlock;
}


template< class T >
void CFixedSizeAllocator< T >::ConstructFreeList( int nFrom, int nTo )
{
	CMemBlock *pBaseMemory	= &m_pMemory[nFrom];
	m_pFirstFree			= pBaseMemory;

	for ( int i = nFrom + 1; i < nTo; i++ )
	{
		pBaseMemory->pNext = pBaseMemory + 1;
		pBaseMemory++;
	}

	pBaseMemory->pNext = NULL;
}


#endif

⌨️ 快捷键说明

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