3#ifndef TRAM_SDK_TEMPLATES_POOL_H
4#define TRAM_SDK_TEMPLATES_POOL_H
46 constexpr Pool(std::string name, uint64_t initialSize,
bool skipFirst =
false){
51 first =
static_cast<T*
>(::operator
new((initialSize *
sizeof(T)) +
sizeof(uint64_t) * 2));
60 *((uint64_t*)
last) = 0;
61 *(((uint64_t*)
last) + 1) = 0;
64 template <
typename... Args>
67 std::cout <<
"Pool " <<
poolName <<
" out of space!" << std::endl;
75 uint64_t* skip =
reinterpret_cast<uint64_t*
>(
lastfree);
77 T** skip2 =
reinterpret_cast<T**
>(skip);
84 *((uint64_t*)
last) = 0;
85 *(((uint64_t*)
last) + 1) = 0;
88 new(newobj) T(std::forward<Args>(args)...);
96 assert(removeptr >=
first && removeptr <
last);
98 uint64_t* skip =
reinterpret_cast<uint64_t*
>(removeptr);
101 T** nextfree =
reinterpret_cast<T**
>(skip);
117 return ptr >=
first && ptr <=
last && *((uint64_t*)ptr) != 0;
121 static_assert(
sizeof(T) >=
sizeof(T*) +
sizeof(uint64_t));
128 template <
typename... Args>
129 static T*
New(Args&&... args){
return pool.AddNew(std::forward<Args>(args)...);}
146 explicit operator bool() {
return ptr !=
nullptr; }
T * lastfree
Definition: pool.h:28
bool validate(const T *ptr) const
Checks if an object can be accessed through iteration.
Definition: pool.h:116
T * AddNew(Args &&... args)
Definition: pool.h:65
uint64_t poolSize
Definition: pool.h:24
T * last
Definition: pool.h:27
iterator end()
Definition: pool.h:110
void Remove(T *removeptr)
Definition: pool.h:95
T * GetLast()
Definition: pool.h:108
std::string poolName
Definition: pool.h:23
size_t index(const T *ptr) const
Definition: pool.h:113
iterator begin()
Definition: pool.h:109
uint64_t maxSize
Definition: pool.h:25
T * first
Definition: pool.h:26
constexpr Pool(std::string name, uint64_t initialSize, bool skipFirst=false)
Definition: pool.h:46
T & operator[](size_t index)
Definition: pool.h:106
T * GetFirst()
Definition: pool.h:107
size_t size() const
Definition: pool.h:112
size_t GetSize() const
Definition: pool.h:111
static void Delete(T *obj)
Definition: pool.h:130
static Pool< T > & GetPool()
Definition: pool.h:131
static T * New(Args &&... args)
Definition: pool.h:129
static Pool< T > pool
Definition: pool.h:133
T * GetResource()
Definition: pool.h:143
T * operator->()
Definition: pool.h:144
~PoolPtr()
Definition: pool.h:142
T & operator*()
Definition: pool.h:145
T * ptr
Definition: pool.h:148
PoolPtr()
Definition: pool.h:141
iterator(T *ptr)
Definition: pool.h:31
T * operator->()
Definition: pool.h:34
friend bool operator!=(const iterator &a, const iterator &b)
Definition: pool.h:41
T * ptr
Definition: pool.h:41
friend bool operator==(const iterator &a, const iterator &b)
Definition: pool.h:40
iterator operator++(int)
Definition: pool.h:38
T & operator*() const
Definition: pool.h:33
iterator & operator++()
Definition: pool.h:36