Fishnet 2.0.1
Framework for Graph-Based Analysis of GIS Vector Data
Loading...
Searching...
No Matches
FiniteBlockingQueue.hpp
Go to the documentation of this file.
1#pragma once
2#include "BlockingQueue.hpp"
3namespace fishnet::util{
9template<typename T>
11{
12private:
13 size_t capacity;
14public:
15
16 FiniteBlockingQueue(size_t capacity):BlockingQueue<T>() {
17 if (capacity==0) {
18 this->capacity = (size_t) -1; // == size_t::max()
19 }
20 this->capacity = capacity;
21 }
22
23 FiniteBlockingQueue():BlockingQueue<T>(), capacity((size_t) -1) {}
24
25 void put(fishnet::Option<T> element)override{
26 std::unique_lock<std::mutex> lock(this->mutex);
27 while(this->queue.size()>= this->capacity) {
28 this->waitOnNotFull.wait(lock);
29 }
30 this->queue.push(element);
31 this->waitOnNotEmpty.notify_one();
32 }
33};
34}
35
Definition Option.hpp:13
Blocking queue implementation. Blocks when no elements are present and take() is called until further...
Definition BlockingQueue.hpp:14
std::queue< fishnet::Option< T > > queue
Definition BlockingQueue.hpp:17
std::condition_variable waitOnNotEmpty
Definition BlockingQueue.hpp:18
std::condition_variable waitOnNotFull
Definition BlockingQueue.hpp:19
std::mutex mutex
Definition BlockingQueue.hpp:16
Blocking queue with a fixed size. Blocks if capacity is reached until elements are removed again.
Definition FiniteBlockingQueue.hpp:11
void put(fishnet::Option< T > element) override
Definition FiniteBlockingQueue.hpp:25
FiniteBlockingQueue(size_t capacity)
Definition FiniteBlockingQueue.hpp:16
FiniteBlockingQueue()
Definition FiniteBlockingQueue.hpp:23
Definition AlternativeKeyMap.hpp:4