OpenBarnyard
 
Loading...
Searching...
No Matches
T2DynamicObjectPool< T > Class Template Reference

#include <T2ObjectPool.h>

Inheritance diagram for T2DynamicObjectPool< T >:
T2GenericObjectPool T2Allocator

Public Member Functions

 T2DynamicObjectPool (T2Allocator *a_pAllocator, TINT a_iMaxNumber, TSIZE a_uiSize=sizeof(T), TSIZE a_uiAlignment=alignof(T))
 
virtual ~T2DynamicObjectPool ()
 
template<class... Args>
T * NewObject (Args &&... args)
 
T * AllocateObject ()
 
void FreeObject (T *a_pObject)
 
void DeleteObject (T *a_pObject)
 
virtual TSIZE GetUsedSize () const OVERRIDE
 
virtual TSIZE GetCapacity () const OVERRIDE
 
virtual TBOOL IsAddressInPool (const void *a_pAddress) const
 
TBOOL CanAllocate () const
 

Additional Inherited Members

- Protected Member Functions inherited from T2GenericObjectPool
virtual void * Malloc (TSIZE a_uiSize, TSIZE a_uiAlignment) OVERRIDE
 
virtual void * Malloc (TSIZE a_uiSize) OVERRIDE
 
virtual void Free (void *a_pPtr) OVERRIDE
 
virtual TBOOL CanAllocate (TSIZE size) const OVERRIDE
 
virtual void * TryMalloc (TSIZE size, TSIZE alignment) OVERRIDE
 
virtual void * TryMalloc (TSIZE size) OVERRIDE
 
void Initialise (UnusedObject *a_pObjects, TUINT a_uiMaxNumber, TUINT a_uiObjectSize)
 
UnusedObjectGetObject ()
 
void ReturnObject (UnusedObject *a_pObject)
 
TUINT GetNumFreeObjects () const
 
virtual ~T2GenericObjectPool ()=default
 
- Protected Member Functions inherited from T2Allocator
template<class T, class... Args>
T * New (Args &&... args)
 
template<class T>
void Delete (T *ptr)
 
- Protected Attributes inherited from T2GenericObjectPool
UnusedObjectm_pHead
 

Detailed Description

template<class T>
class T2DynamicObjectPool< T >

Definition at line 176 of file T2ObjectPool.h.

Constructor & Destructor Documentation

◆ T2DynamicObjectPool()

template<class T>
T2DynamicObjectPool< T >::T2DynamicObjectPool ( T2Allocator * a_pAllocator,
TINT a_iMaxNumber,
TSIZE a_uiSize = sizeof( T ),
TSIZE a_uiAlignment = alignof( T ) )
inline

Definition at line 179 of file T2ObjectPool.h.

180 {
182 m_iMaxNumber = a_iMaxNumber;
183 m_pAllocator = a_pAllocator;
184
187 m_uiObjectSize = ( uiClassSize - 1 ) + uiClassAlignment & ~( uiClassAlignment - 1U );
188
189 TASSERT( m_uiObjectSize >= a_uiSize && uiClassAlignment > 0 );
190
191 if ( m_iMaxNumber < 1 )
192 {
193 m_pData = TNULL;
194 }
195 else
196 {
197 m_pData = m_pAllocator->Malloc( m_iMaxNumber * m_uiObjectSize, uiClassAlignment );
198 }
199
200 TVALIDPTR( m_pData );
203 m_iMaxNumber,
204 m_uiObjectSize
205 );
206 }
#define TASSERT(X,...)
Definition Defines.h:138
#define TREINTERPRETCAST(TYPE, VALUE)
Definition Defines.h:68
#define TVALIDPTR(PTR)
Definition Defines.h:139
void Initialise(UnusedObject *a_pObjects, TUINT a_uiMaxNumber, TUINT a_uiObjectSize)

◆ ~T2DynamicObjectPool()

template<class T>
virtual T2DynamicObjectPool< T >::~T2DynamicObjectPool ( )
inlinevirtual

Definition at line 208 of file T2ObjectPool.h.

209 {
210 m_pAllocator->Free( m_pData );
211 }

Member Function Documentation

◆ AllocateObject()

template<class T>
T * T2DynamicObjectPool< T >::AllocateObject ( )
inline

Definition at line 221 of file T2ObjectPool.h.

222 {
223 TASSERT( TTRUE == T2GenericObjectPool::CanAllocate( m_uiObjectSize ) );
224 return TSTATICCAST( T, Malloc( m_uiObjectSize ) );
225 }
#define TSTATICCAST(POINTERTYPE, VALUE)
Definition Defines.h:69
virtual void * Malloc(TSIZE a_uiSize, TSIZE a_uiAlignment) OVERRIDE

◆ CanAllocate()

template<class T>
TBOOL T2DynamicObjectPool< T >::CanAllocate ( ) const
inline

Definition at line 256 of file T2ObjectPool.h.

256{ return T2GenericObjectPool::CanAllocate( m_uiObjectSize ); }
virtual TBOOL CanAllocate(TSIZE size) const OVERRIDE

◆ DeleteObject()

template<class T>
void T2DynamicObjectPool< T >::DeleteObject ( T * a_pObject)
inline

Definition at line 233 of file T2ObjectPool.h.

234 {
236 a_pObject->~T();
237 Free( a_pObject );
238 }
virtual void Free(void *a_pPtr) OVERRIDE
virtual TBOOL IsAddressInPool(const void *a_pAddress) const

◆ FreeObject()

template<class T>
void T2DynamicObjectPool< T >::FreeObject ( T * a_pObject)
inline

Definition at line 227 of file T2ObjectPool.h.

228 {
230 Free( a_pObject );
231 }

◆ GetCapacity()

template<class T>
virtual TSIZE T2DynamicObjectPool< T >::GetCapacity ( ) const
inlinevirtual

Implements T2Allocator.

Definition at line 245 of file T2ObjectPool.h.

246 {
247 return m_iMaxNumber * m_uiObjectSize;
248 }

◆ GetUsedSize()

template<class T>
virtual TSIZE T2DynamicObjectPool< T >::GetUsedSize ( ) const
inlinevirtual

Implements T2Allocator.

Definition at line 240 of file T2ObjectPool.h.

241 {
242 return ( m_iMaxNumber - GetNumFreeObjects() ) * m_uiObjectSize;
243 }
TUINT GetNumFreeObjects() const

◆ IsAddressInPool()

template<class T>
virtual TBOOL T2DynamicObjectPool< T >::IsAddressInPool ( const void * a_pAddress) const
inlinevirtual

Definition at line 250 of file T2ObjectPool.h.

251 {
253 TREINTERPRETCAST( TUINTPTR, a_pAddress ) < TREINTERPRETCAST( TUINTPTR, m_pData ) + ( m_iMaxNumber * m_uiObjectSize );
254 }

◆ NewObject()

template<class T>
template<class... Args>
T * T2DynamicObjectPool< T >::NewObject ( Args &&... args)
inline

Definition at line 214 of file T2ObjectPool.h.

215 {
216 TASSERT( TTRUE == T2GenericObjectPool::CanAllocate( m_uiObjectSize ) );
217 T* pValue = new ( Malloc( m_uiObjectSize ) ) T( std::forward<Args>( args )... );
218 return pValue;
219 }

The documentation for this class was generated from the following file: