20 #ifndef HEDGEHOG_POOL_H 21 #define HEDGEHOG_POOL_H 28 #include <condition_variable> 35 template<
class ManagedData>
39 std::deque<std::shared_ptr<ManagedData>>
queue_ = {};
41 std::unique_ptr<std::condition_variable>
50 capacity_ = capacity == 0 ? 1 :
capacity;
51 queue_ = std::deque<std::shared_ptr<ManagedData>>(
capacity_);
57 std::deque<std::shared_ptr<ManagedData>>
const &
queue()
const {
return queue_; }
62 typename std::deque<std::shared_ptr<ManagedData>>::iterator
begin() {
return this->queue_.begin(); }
67 typename std::deque<std::shared_ptr<ManagedData>>::iterator
end() {
return this->queue_.end(); }
73 std::lock_guard<std::mutex> lock(mutex_);
80 bool empty() {
return queue_.empty(); }
90 void push_back(std::shared_ptr<ManagedData>
const &data) {
91 std::lock_guard<std::mutex> lock(mutex_);
92 this->queue_.push_back(data);
94 std::ostringstream oss;
95 oss <<
"The queue is overflowing, the same data " << data <<
" has been returned to the memory manager too many " 98 HLOG_SELF(0, oss.str())
99 throw (std::runtime_error(oss.str()));
107 std::unique_lock<std::mutex> lock(mutex_);
108 std::shared_ptr<ManagedData> ret =
nullptr;
111 ret = queue_.front();
120 #endif //HEDGEHOG_POOL_H size_t capacity_
Pool capacity, maximum size.
void push_back(std::shared_ptr< ManagedData > const &data)
Push back data into the pool.
std::deque< std::shared_ptr< ManagedData > > queue_
Container used to store pool's data.
std::mutex mutex_
Pool mutex to protect pool access.
Pool(size_t const &capacity)
Pool constructor defining capacity.
size_t size()
Queue size accessor.
std::deque< std::shared_ptr< ManagedData > >::iterator end()
End iterator accessor for the queue's container.
std::unique_ptr< std::condition_variable > conditionVariable_
Condition variable to wait on data for empty queue.
Pool that is used by the memory manager.
std::shared_ptr< ManagedData > pop_front()
Return and pop the fist element from the queue, it the queue is empty wait for an element to come bac...
size_t capacity() const
Capacity accessor.
Hedgehog behavior namespace.
std::deque< std::shared_ptr< ManagedData > >::iterator begin()
Begin iterator accessor for the queue's container.
std::deque< std::shared_ptr< ManagedData > > const & queue() const
Queue container accessor.
bool empty()
Emptiness queue accessor.