5 #ifndef UAVCAN_DYNAMIC_MEMORY_HPP_INCLUDED
6 #define UAVCAN_DYNAMIC_MEMORY_HPP_INCLUDED
27 virtual void deallocate(
const void* ptr) = 0;
32 virtual uint16_t getBlockCapacity()
const = 0;
73 static const uint16_t NumBlocks = PoolSize / BlockSize;
78 virtual void deallocate(
const void* ptr);
95 return static_cast<uint16_t>(NumBlocks - used_);
138 template <std::
size_t PoolSize, u
int8_t BlockSize,
typename RaiiSynchronizer>
141 template <std::
size_t PoolSize, u
int8_t BlockSize,
typename RaiiSynchronizer>
143 free_list_(reinterpret_cast<
Node*>(pool_.bytes)),
148 StaticAssert<((PoolSize / BlockSize) <= 0xFFFFU)>::check();
150 (void)std::memset(pool_.bytes, 0, PoolSize);
151 for (
unsigned i = 0; (i + 1) < (NumBlocks - 1 + 1); i++)
154 free_list_[i].next = free_list_ + i + 1;
159 template <std::
size_t PoolSize, u
int8_t BlockSize,
typename RaiiSynchronizer>
170 void* pmem = free_list_;
171 free_list_ = free_list_->next;
176 if (used_ > max_used_)
184 template <std::
size_t PoolSize, u
int8_t BlockSize,
typename RaiiSynchronizer>
195 Node* p =
static_cast<Node*
>(
const_cast<void*
>(ptr));
196 p->next = free_list_;
206 #endif // UAVCAN_DYNAMIC_MEMORY_HPP_INCLUDED