33#ifndef DVD_OBJECT_POOL_INL_
34#define DVD_OBJECT_POOL_INL_
38template<
typename T,
size_t N,
bool allowResize>
42 _pool.resize(N,
nullptr);
45template<
typename T,
size_t N,
bool allowResize>
51 return _pool[handle.
_id - 1];
57template<
typename T,
size_t N,
bool allowResize>
58template<
typename... Args>
61 T* obj =
new T(
FWD(args)...);
62 return registerExisting(*obj);
65template<
typename T,
size_t N,
bool allowResize>
68 T* obj = find(handle);
73 unregisterExisting(handle);
76template<
typename T,
size_t N,
bool allowResize>
80 return registerExistingInternal(
object,
false);
83template<
typename T,
size_t N,
bool allowResize>
86 for (
size_t i = 0; i < _ids.size(); ++i)
97 if (!allowResize || retry)
104 _pool.resize( _pool.size() * 2,
nullptr );
106 return registerExistingInternal(
object,
true );
109template<
typename T,
size_t N,
bool allowResize>
116 _pool[handle.
_id - 1] =
nullptr;
PoolHandle registerExisting(T &object)
T * find(PoolHandle handle) const
void unregisterExisting(PoolHandle handle)
void deallocate(PoolHandle handle)
PoolHandle registerExistingInternal(T &object, bool retry)
PoolHandle allocate(Args... args)
void Hash_combine(size_t &seed, const T &v, const Rest &... rest) noexcept
a la Boost
Handle console commands that start with a forward slash.
std::lock_guard< mutex > LockGuard
constexpr U16 to_U16(const T value)
std::shared_lock< mutex > SharedLock
size_t operator()(const Divide::PoolHandle &x) const noexcept