📄 xobjectpool.h
字号:
#pragma once
#include "xmemory.h"
#include "xvector.h"
const DWORD OBJECT_POOL_MAGIC = 'XOP1';
template <class T, DWORD dwMaxCount = 65536>
class xObjectPool :
public xFixedMemPool
{
public:
xObjectPool( DWORD dwMagic = OBJECT_POOL_MAGIC ) : xFixedMemPool( sizeof( T ), dwMaxCount, dwMagic )
{}
~xObjectPool()
{}
T * newObject()
{
T * pt = (T*)newElement();
if( pt == NULL )
return NULL;
return CALL_CON( pt );
}
void deleteObject( const T * pt )
{
if( pt == NULL ||
!isInPool( pt ) )
return;
CALL_DEC( pt );
delElement( (BYTE*)pt );
}
bool isInPool( const T * pt )
{
return isElement( (BYTE*)pt );
}
};
template <class T>
class xUnlimitedObjectPool
{
typedef xObjectPool<T, 1024> TOBJPOOL;
xVector<TOBJPOOL, 1024> m_vPools;
public:
T * newObject()
{
for( int i = 0;i < m_vPools.size();i ++ )
{
if( !m_vPools.full() )
return m_vPools[i].newObject();
}
m_vPools.push_back_empty();
return m_vPools[m_vPools.size()-1].newObject();
}
void deleteObject( const T * pt )
{
for( int i = 0;i < m_vPools.size();i ++ )
{
if( m_vPools[i].isInPool( pt ) )
{
m_vPools[i].deleteObject( pt );
return;
}
}
}
bool isInPool( const T * pt )
{
for( int i = 0;i < m_vPools.size();i ++ )
{
if( m_vPools[i].isInPool( pt ) )
{
return TRUE;
}
}
return FALSE;
}
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -