OpenTTD Source: Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero > Struct Template Reference

OpenTTD Source 14.0-RC3

Data Structures | Public Types | Public Member Functions | Data Fields | Static Public Attributes | Private Member Functions | Private Attributes | Static Private Attributes
Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero > Struct Template Reference

Base class for all pools. More...

`#include <pool_type.hpp>`

Inheritance diagram for Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >:

## Data Structures
struct | AllocCache
| Helper struct to cache 'freed' PoolItems so we do not need to allocate them again. More...
struct | IterateWrapper
struct | IterateWrapperFiltered
struct | PoolItem
| Base class for all PoolItems. More...
struct | PoolIterator
| Iterator to iterate all valid T of a pool. More...
struct | PoolIteratorFiltered
| Iterator to iterate all valid T of a pool. More...

## Public Types
using | BitmapStorage = size_t

## Public Member Functions
| Pool (const char *name)
void | CleanPool () override
| Virtual method that deletes all items in the pool.
Titem * | Get (size_t index)
| Returns Titem with given index. More...
bool | IsValidID (size_t index)
| Tests whether given index can be used to get valid (non-nullptr) Titem. More...
bool | CanAllocate (size_t n=1)
| Tests whether we can allocate 'n' items. More...
Public Member Functions inherited from PoolBase
| PoolBase (PoolType pt)
| Constructor registers this object in the pool vector. More...
virtual | ~PoolBase ()
| Destructor removes this object from the pool vector and deletes the vector itself if this was the last item removed.

## Data Fields
const char *const | name
| Name of this pool.
size_t | size
| Current allocated size.
size_t | first_free
| No item with index lower than this is free (doesn't say anything about this one!)
size_t | first_unused
| This and all higher indexes are free (doesn't say anything about first_unused-1 !)
size_t | items
| Number of used indexes (non-nullptr)
bool | cleaning
| True if cleaning pool (deleting all items)
Titem ** | data
| Pointer to array of pointers to Titem.
std::vector< BitmapStorage > | used_bitmap
| Bitmap of used indices.
Data Fields inherited from PoolBase
const PoolType | type
| Type of this pool.

## Static Public Attributes
static constexpr size_t | MAX_SIZE = Tmax_size
| Make template parameter accessible from outside.
static constexpr size_t | BITMAP_SIZE = std::numeric_limits<BitmapStorage>::digits

## Private Member Functions
void * | AllocateItem (size_t size, size_t index)
void | ResizeFor (size_t index)
size_t | FindFirstFree ()
void * | GetNew (size_t size)
void * | GetNew (size_t size, size_t index)
void | FreeItem (size_t index)

## Private Attributes
AllocCache * | alloc_cache
| Cache of freed pointers.

## Static Private Attributes
static const size_t | NO_FREE_ITEM = MAX_UVALUE(size_t)
| Constant to indicate we can't allocate any more items.

## Additional Inherited Members
Static Public Member Functions inherited from PoolBase
static PoolVector * | GetPools ()
| Function used to access the vector of all pools. More...
static void | Clean (PoolType)
| Clean all pools of given type. More...

## 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>
struct Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >

Base class for all pools.

Template Parameters

  Titem | Type of the class/struct that is going to be pooled
  Tindex | Type of the index for this pool
  Tgrowth_step | Size of growths; if the pool is full increase the size by this amount
  Tmax_size | Maximum size of the pool
  Tpool_type | Type of this pool
  Tcache | Whether to perform 'alloc' caching, i.e. don't actually free/malloc just reuse the memory
  Tzero | Whether to zero the memory

Warning
  when Tcache is enabled all instances of this pool's item must be of the same size.

Definition at line 80 of file pool_type.hpp.

## Member Function Documentation

## ◆ CanAllocate()

template<class Titem , typename Tindex , size_t Tgrowth_step, size_t Tmax_size, PoolType Tpool_type = PT_NORMAL, bool Tcache = false, bool Tzero = true>

bool Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::CanAllocate | ( | size_t | n = `1` | ) |
| inline

Tests whether we can allocate 'n' items.

Parameters

  n | number of items we want to allocate

Returns
  true if 'n' items can be allocated

Definition at line 133 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>

Titem* Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::Get | ( | size_t | index | ) |
| inline

Returns Titem with given index.

Parameters

  index | of item to get

Returns
  pointer to Titem

Precondition
  index < this->first_unused

Definition at line 112 of file pool_type.hpp.

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

Referenced by Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::IsValidID().

## ◆ 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>

bool Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::IsValidID | ( | size_t | index | ) |
| inline

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

Parameters

  index | index to examine

Returns
  true if PoolItem::Get(index) will return non-nullptr pointer

Definition at line 123 of file pool_type.hpp.

References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::Get().

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

- src/core/pool_type.hpp