//===----------------------------------------------------------------------===// // DuckDB // // duckdb/parallel/concurrentqueue.hpp // // //===----------------------------------------------------------------------===// #pragma once #ifndef DUCKDB_NO_THREADS #include "concurrentqueue.h" #else #include #include #include namespace duckdb_moodycamel { template class ConcurrentQueue; template class BlockingConcurrentQueue; struct ProducerToken { //! Constructor template explicit ProducerToken(ConcurrentQueue &); //! Constructor template explicit ProducerToken(BlockingConcurrentQueue &); //! Constructor ProducerToken(ProducerToken &&) { } //! Is valid token? inline bool valid() const { return true; } }; template class ConcurrentQueue { private: //! The queue std::queue> q; public: //! Constructor ConcurrentQueue() = default; //! Constructor explicit ConcurrentQueue(size_t capacity) { q.reserve(capacity); } //! Enqueue item template bool enqueue(U &&item) { q.push(std::forward(item)); return true; } //! Try to dequeue an item bool try_dequeue(T &item) { if (q.empty()) { return false; } item = std::move(q.front()); q.pop(); return true; } }; } // namespace duckdb_moodycamel #endif