OpenBarnyard
 
Loading...
Searching...
No Matches
T2DerivedDynamicObjectPool< TClassType > Class Template Reference

#include <T2ObjectPool.h>

Inheritance diagram for T2DerivedDynamicObjectPool< TClassType >:
T2GenericObjectPool T2Allocator

Public Member Functions

 T2DerivedDynamicObjectPool (T2Allocator *a_pAllocator, TINT a_iMaxNumber)
 
virtual ~T2DerivedDynamicObjectPool ()
 
template<class... Args>
TClassType * NewObject (Args &&... args)
 
template<class T, class... Args>
T * NewDerivedObject (Args &&... args)
 
TClassType * AllocateObject ()
 
void FreeObject (TClassType *a_pObject)
 
void DeleteObject (TClassType *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 TClassType>
class T2DerivedDynamicObjectPool< TClassType >

Definition at line 266 of file T2ObjectPool.h.

Constructor & Destructor Documentation

◆ T2DerivedDynamicObjectPool()

template<class TClassType>
T2DerivedDynamicObjectPool< TClassType >::T2DerivedDynamicObjectPool ( T2Allocator * a_pAllocator,
TINT a_iMaxNumber )
inline

Definition at line 269 of file T2ObjectPool.h.

270 {
272 m_iMaxNumber = a_iMaxNumber;
273 m_pAllocator = a_pAllocator;
274
275 TUINT32 uiClassSize = TClassType::GetClassStatic()->GetMaxSizeOfDerivedClasses();
276 TUINT32 uiClassAlignment = TClassType::GetClassStatic()->GetMaxAlignmentOfDerivedClasses();
277 m_uiObjectSize = ( uiClassSize - 1 ) + uiClassAlignment & ~( uiClassAlignment - 1U );
278
279 TASSERT( m_uiObjectSize >= sizeof( TClassType ) && uiClassAlignment > 0 );
280
281 if ( m_iMaxNumber < 1 )
282 {
283 m_pData = TNULL;
284 }
285 else
286 {
287 m_pData = m_pAllocator->Malloc( m_iMaxNumber * m_uiObjectSize, uiClassAlignment );
288 }
289
290 TVALIDPTR( m_pData );
293 m_iMaxNumber,
294 m_uiObjectSize
295 );
296 }
#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)

◆ ~T2DerivedDynamicObjectPool()

template<class TClassType>
virtual T2DerivedDynamicObjectPool< TClassType >::~T2DerivedDynamicObjectPool ( )
inlinevirtual

Definition at line 298 of file T2ObjectPool.h.

299 {
300 m_pAllocator->Free( m_pData );
301 }

Member Function Documentation

◆ AllocateObject()

template<class TClassType>
TClassType * T2DerivedDynamicObjectPool< TClassType >::AllocateObject ( )
inline

Definition at line 320 of file T2ObjectPool.h.

321 {
322 TASSERT( TTRUE == T2GenericObjectPool::CanAllocate( m_uiObjectSize ) );
323 return TSTATICCAST( TClassType, Malloc( m_uiObjectSize ) );
324 }
#define TSTATICCAST(POINTERTYPE, VALUE)
Definition Defines.h:69
virtual void * Malloc(TSIZE a_uiSize, TSIZE a_uiAlignment) OVERRIDE

◆ CanAllocate()

template<class TClassType>
TBOOL T2DerivedDynamicObjectPool< TClassType >::CanAllocate ( ) const
inline

Definition at line 355 of file T2ObjectPool.h.

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

◆ DeleteObject()

template<class TClassType>
void T2DerivedDynamicObjectPool< TClassType >::DeleteObject ( TClassType * a_pObject)
inline

Definition at line 332 of file T2ObjectPool.h.

333 {
335 a_pObject->~TClassType();
336 Free( a_pObject );
337 }
virtual void Free(void *a_pPtr) OVERRIDE
virtual TBOOL IsAddressInPool(const void *a_pAddress) const

◆ FreeObject()

template<class TClassType>
void T2DerivedDynamicObjectPool< TClassType >::FreeObject ( TClassType * a_pObject)
inline

Definition at line 326 of file T2ObjectPool.h.

327 {
329 Free( a_pObject );
330 }

◆ GetCapacity()

template<class TClassType>
virtual TSIZE T2DerivedDynamicObjectPool< TClassType >::GetCapacity ( ) const
inlinevirtual

Implements T2Allocator.

Definition at line 344 of file T2ObjectPool.h.

345 {
346 return m_iMaxNumber * m_uiObjectSize;
347 }

◆ GetUsedSize()

template<class TClassType>
virtual TSIZE T2DerivedDynamicObjectPool< TClassType >::GetUsedSize ( ) const
inlinevirtual

Implements T2Allocator.

Definition at line 339 of file T2ObjectPool.h.

340 {
341 return ( m_iMaxNumber - GetNumFreeObjects() ) * m_uiObjectSize;
342 }
TUINT GetNumFreeObjects() const

◆ IsAddressInPool()

template<class TClassType>
virtual TBOOL T2DerivedDynamicObjectPool< TClassType >::IsAddressInPool ( const void * a_pAddress) const
inlinevirtual

Definition at line 349 of file T2ObjectPool.h.

350 {
352 TREINTERPRETCAST( TUINTPTR, a_pAddress ) < TREINTERPRETCAST( TUINTPTR, m_pData ) + ( m_iMaxNumber * m_uiObjectSize );
353 }

◆ NewDerivedObject()

template<class TClassType>
template<class T, class... Args>
T * T2DerivedDynamicObjectPool< TClassType >::NewDerivedObject ( Args &&... args)
inline

Definition at line 312 of file T2ObjectPool.h.

313 {
315 TASSERT( TTRUE == T2GenericObjectPool::CanAllocate( m_uiObjectSize ) );
316 T* pValue = new ( Malloc( m_uiObjectSize ) ) T( std::forward<Args>( args )... );
317 return pValue;
318 }

◆ NewObject()

template<class TClassType>
template<class... Args>
TClassType * T2DerivedDynamicObjectPool< TClassType >::NewObject ( Args &&... args)
inline

Definition at line 304 of file T2ObjectPool.h.

305 {
306 TASSERT( TTRUE == T2GenericObjectPool::CanAllocate( m_uiObjectSize ) );
307 TClassType* pValue = new ( Malloc( m_uiObjectSize ) ) TClassType( std::forward<Args>( args )... );
308 return pValue;
309 }

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