OpenTTD Source  20241124-master-g9399a92a4f
Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool > Struct Template Reference

Base class for all PoolItems. More...

#include <pool_type.hpp>

Public Types

typedef struct Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero > Pool
 Type of the pool this item is going to be part of.
 

Public Member Functions

void * operator new (size_t size)
 Allocates space for new Titem. More...
 
void operator delete (void *p)
 Marks Titem as free. More...
 
void * operator new (size_t size, size_t index)
 Allocates space for new Titem with given index. More...
 
void * operator new (size_t, void *ptr)
 Allocates space for new Titem at given memory address. More...
 

Static Public Member Functions

static bool CanAllocateItem (size_t n=1)
 Helper functions so we can use PoolItem::Function() instead of _poolitem_pool.Function() More...
 
static bool CleaningPool ()
 Returns current state of pool cleaning - yes or no. More...
 
static bool IsValidID (size_t index)
 Tests whether given index can be used to get valid (non-nullptr) Titem. More...
 
static Titem * Get (size_t index)
 Returns Titem with given index. More...
 
static Titem * GetIfValid (size_t index)
 Returns Titem with given index. More...
 
static size_t GetPoolSize ()
 Returns first unused index. More...
 
static size_t GetNumItems ()
 Returns number of valid items in the pool. More...
 
static void PostDestructor ([[maybe_unused]] size_t index)
 Dummy function called after destructor of each member. More...
 
static Pool::IterateWrapper< Titem > Iterate (size_t from=0)
 Returns an iterable ensemble of all valid Titem. More...
 

Data Fields

Tindex index
 Index of this pool item.
 

Detailed Description

template<class Titem, typename Tindex, size_t Tgrowth_step, size_t Tmax_size, PoolType Tpool_type = PT_NORMAL, bool Tcache = false, bool Tzero = true>
template<struct Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero > * Tpool>
struct Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >

Base class for all PoolItems.

Template Parameters
TpoolThe pool this item is going to be part of

Definition at line 237 of file pool_type.hpp.

Member Function Documentation

◆ CanAllocateItem()

template<class Titem , typename Tindex , size_t Tgrowth_step, size_t Tmax_size, PoolType Tpool_type = PT_NORMAL, bool Tcache = false, bool Tzero = true>
template<struct Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero > * Tpool>
static bool Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::CanAllocateItem ( size_t  n = 1)
inlinestatic

Helper functions so we can use PoolItem::Function() instead of _poolitem_pool.Function()

Tests whether we can allocate 'n' items

Parameters
nnumber of items we want to allocate
Returns
true if 'n' items can be allocated

Definition at line 309 of file pool_type.hpp.

◆ CleaningPool()

template<class Titem , typename Tindex , size_t Tgrowth_step, size_t Tmax_size, PoolType Tpool_type = PT_NORMAL, bool Tcache = false, bool Tzero = true>
template<struct Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero > * Tpool>
static bool Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::CleaningPool ( )
inlinestatic

Returns current state of pool cleaning - yes or no.

Returns
true iff we are cleaning the pool now

Definition at line 318 of file pool_type.hpp.

◆ Get()

template<class Titem , typename Tindex , size_t Tgrowth_step, size_t Tmax_size, PoolType Tpool_type = PT_NORMAL, bool Tcache = false, bool Tzero = true>
template<struct Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero > * Tpool>
static Titem* Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::Get ( size_t  index)
inlinestatic

Returns Titem with given index.

Parameters
indexof item to get
Returns
pointer to Titem
Precondition
index < this->first_unused

Definition at line 339 of file pool_type.hpp.

References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index.

◆ GetIfValid()

template<class Titem , typename Tindex , size_t Tgrowth_step, size_t Tmax_size, PoolType Tpool_type = PT_NORMAL, bool Tcache = false, bool Tzero = true>
template<struct Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero > * Tpool>
static Titem* Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::GetIfValid ( size_t  index)
inlinestatic

Returns Titem with given index.

Parameters
indexof item to get
Returns
pointer to Titem
Note
returns nullptr for invalid index

Definition at line 350 of file pool_type.hpp.

References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index.

◆ GetNumItems()

template<class Titem , typename Tindex , size_t Tgrowth_step, size_t Tmax_size, PoolType Tpool_type = PT_NORMAL, bool Tcache = false, bool Tzero = true>
template<struct Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero > * Tpool>
static size_t Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::GetNumItems ( )
inlinestatic

Returns number of valid items in the pool.

Returns
number of valid items in the pool

Definition at line 369 of file pool_type.hpp.

◆ GetPoolSize()

template<class Titem , typename Tindex , size_t Tgrowth_step, size_t Tmax_size, PoolType Tpool_type = PT_NORMAL, bool Tcache = false, bool Tzero = true>
template<struct Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero > * Tpool>
static size_t Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::GetPoolSize ( )
inlinestatic

Returns first unused index.

Useful when iterating over all pool items.

Returns
first unused index

Definition at line 360 of file pool_type.hpp.

◆ IsValidID()

template<class Titem , typename Tindex , size_t Tgrowth_step, size_t Tmax_size, PoolType Tpool_type = PT_NORMAL, bool Tcache = false, bool Tzero = true>
template<struct Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero > * Tpool>
static bool Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::IsValidID ( size_t  index)
inlinestatic

Tests whether given index can be used to get valid (non-nullptr) Titem.

Parameters
indexindex to examine
Returns
true if PoolItem::Get(index) will return non-nullptr pointer

Definition at line 328 of file pool_type.hpp.

References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index.

◆ Iterate()

template<class Titem , typename Tindex , size_t Tgrowth_step, size_t Tmax_size, PoolType Tpool_type = PT_NORMAL, bool Tcache = false, bool Tzero = true>
template<struct Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero > * Tpool>
static Pool::IterateWrapper<Titem> Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::Iterate ( size_t  from = 0)
inlinestatic

Returns an iterable ensemble of all valid Titem.

Parameters
fromindex of the first Titem to consider
Returns
an iterable ensemble of all valid Titem

Definition at line 388 of file pool_type.hpp.

◆ operator delete()

template<class Titem , typename Tindex , size_t Tgrowth_step, size_t Tmax_size, PoolType Tpool_type = PT_NORMAL, bool Tcache = false, bool Tzero = true>
template<struct Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero > * Tpool>
void Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::operator delete ( void *  p)
inline

Marks Titem as free.

Its memory is released

Parameters
pmemory to free
Note
the item has to be allocated in the pool!

Definition at line 259 of file pool_type.hpp.

◆ operator new() [1/3]

template<class Titem , typename Tindex , size_t Tgrowth_step, size_t Tmax_size, PoolType Tpool_type = PT_NORMAL, bool Tcache = false, bool Tzero = true>
template<struct Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero > * Tpool>
void* Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::operator new ( size_t  size)
inline

Allocates space for new Titem.

Parameters
sizesize of Titem
Returns
pointer to allocated memory
Note
can never fail (return nullptr), use CanAllocate() to check first!

Definition at line 249 of file pool_type.hpp.

References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::size.

◆ operator new() [2/3]

template<class Titem , typename Tindex , size_t Tgrowth_step, size_t Tmax_size, PoolType Tpool_type = PT_NORMAL, bool Tcache = false, bool Tzero = true>
template<struct Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero > * Tpool>
void* Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::operator new ( size_t  size,
size_t  index 
)
inline

Allocates space for new Titem with given index.

Parameters
sizesize of Titem
indexindex of item
Returns
pointer to allocated memory
Note
can never fail (return nullptr), use CanAllocate() to check first!
Precondition
index has to be unused! Else it will crash

Definition at line 275 of file pool_type.hpp.

References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::size.

◆ operator new() [3/3]

template<class Titem , typename Tindex , size_t Tgrowth_step, size_t Tmax_size, PoolType Tpool_type = PT_NORMAL, bool Tcache = false, bool Tzero = true>
template<struct Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero > * Tpool>
void* Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::operator new ( size_t  ,
void *  ptr 
)
inline

Allocates space for new Titem at given memory address.

Parameters
ptrwhere are we allocating the item?
Returns
pointer to allocated memory (== ptr)
Note
use of this is strongly discouraged
Precondition
the memory must not be allocated in the Pool!

Definition at line 287 of file pool_type.hpp.

◆ PostDestructor()

template<class Titem , typename Tindex , size_t Tgrowth_step, size_t Tmax_size, PoolType Tpool_type = PT_NORMAL, bool Tcache = false, bool Tzero = true>
template<struct Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero > * Tpool>
static void Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::PostDestructor ( [[maybe_unused] ] size_t  index)
inlinestatic

Dummy function called after destructor of each member.

If you want to use it, override it in PoolItem's subclass.

Parameters
indexindex of deleted item
Note
when this function is called, PoolItem::Get(index) == nullptr.
it's called only when !CleaningPool()

Definition at line 381 of file pool_type.hpp.


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