51 typename BoundPolicy = policies::unbounded_policy,
52 typename OverflowPolicy = policies::overflow_reject_policy
78 BoundPolicy bound_policy,
79 OverflowPolicy overflow_policy)
81 std::move(sync_policy),
82 std::move(bound_policy),
83 std::move(overflow_policy))) {}
102 [[nodiscard]]
auto enqueue(std::unique_ptr<job>&& j) -> common::VoidResult
override {
103 return queue_->enqueue(std::move(j));
106 [[nodiscard]]
auto enqueue_batch(std::vector<std::unique_ptr<job>>&& jobs) -> common::VoidResult
override {
108 for (
auto& j : jobs) {
117 [[nodiscard]]
auto dequeue() -> common::Result<std::unique_ptr<job>>
override {
121 [[nodiscard]]
auto try_dequeue() -> common::Result<std::unique_ptr<job>>
override {
122 return queue_->try_dequeue();
125 [[nodiscard]]
auto empty() const ->
bool override {
129 [[nodiscard]]
auto size() const ->
std::
size_t override {
142 return queue_->is_stopped();
146 return queue_->get_capabilities();
151 "policy_queue[size={}, stopped={}]",
224template<
typename PolicyQueueType>
226 -> std::unique_ptr<pool_queue_adapter_interface>
229 typename PolicyQueueType::sync_policy_type,
230 typename PolicyQueueType::bound_policy_type,
231 typename PolicyQueueType::overflow_policy_type
233 return std::make_unique<adapter_type>();
242template<
typename PolicyQueueType>
244 typename PolicyQueueType::bound_policy_type bound_policy)
245 -> std::unique_ptr<pool_queue_adapter_interface>
248 typename PolicyQueueType::sync_policy_type,
249 typename PolicyQueueType::bound_policy_type,
250 typename PolicyQueueType::overflow_policy_type
252 return std::make_unique<adapter_type>(std::move(bound_policy));
260 -> std::unique_ptr<pool_queue_adapter_interface>
262 return std::make_unique<standard_queue_adapter>();
270 -> std::unique_ptr<pool_queue_adapter_interface>
272 return std::make_unique<lockfree_queue_adapter>();
A thread-safe job queue for managing and dispatching work items.
Lock-free synchronization policy using Michael-Scott algorithm.
Synchronization policy using mutex and condition variable.
Policy that rejects new items when queue is full.
Policy that allows unlimited queue size.
Adapter for policy_queue to pool_queue_adapter_interface.
auto enqueue(std::unique_ptr< job > &&j) -> common::VoidResult override
Enqueue a job.
policy_queue_adapter(BoundPolicy bound_policy)
Construct adapter with bound policy.
auto get_policy_queue() const -> const queue_type &
Get direct access to the underlying policy_queue (const)
auto get_scheduler() const -> const scheduler_interface &override
Get the underlying scheduler interface (const)
auto get_policy_queue() -> queue_type &
Get direct access to the underlying policy_queue.
auto dequeue() -> common::Result< std::unique_ptr< job > > override
Dequeue a job (blocking)
policy_queue_adapter(std::unique_ptr< queue_type > queue)
Construct adapter with existing policy_queue.
auto enqueue_batch(std::vector< std::unique_ptr< job > > &&jobs) -> common::VoidResult override
Enqueue a batch of jobs.
~policy_queue_adapter() override=default
auto get_job_queue() const -> std::shared_ptr< job_queue > override
Get the underlying job_queue if this adapter wraps one.
policy_queue_adapter(SyncPolicy sync_policy, BoundPolicy bound_policy, OverflowPolicy overflow_policy)
Construct adapter with all policies.
policy_queue_adapter & operator=(const policy_queue_adapter &)=delete
auto clear() -> void override
Clear all jobs from queue.
std::unique_ptr< queue_type > queue_
auto empty() const -> bool override
Check if queue is empty.
auto size() const -> std::size_t override
Get queue size.
auto to_string() const -> std::string override
Get string representation.
auto stop() -> void override
Stop the queue.
policy_queue_adapter()
Construct adapter with new policy_queue using default policies.
auto is_stopped() const -> bool override
Check if queue is stopped.
policy_queue_adapter(policy_queue_adapter &&)=default
policy_queue_adapter & operator=(policy_queue_adapter &&)=default
auto get_capabilities() const -> queue_capabilities override
Get queue capabilities.
auto try_dequeue() -> common::Result< std::unique_ptr< job > > override
Try to dequeue a job (non-blocking)
auto get_scheduler() -> scheduler_interface &override
Get the underlying scheduler interface.
policy_queue_adapter(const policy_queue_adapter &)=delete
Policy-based queue template.
Abstract interface for queue adapters used by thread_pool.
A template class representing either a value or an error.
Scheduler interface for queuing and retrieving jobs.
Core threading foundation of the thread system library.
auto make_lockfree_queue_adapter() -> std::unique_ptr< pool_queue_adapter_interface >
Create a lock-free queue adapter.
auto make_standard_queue_adapter() -> std::unique_ptr< pool_queue_adapter_interface >
Create a standard_queue adapter.
auto make_policy_queue_adapter() -> std::unique_ptr< pool_queue_adapter_interface >
Create a pool_queue_adapter from a policy_queue type.
Policy-based job queue template with customizable sync, bound, and overflow.
Abstract interface for queue adapters used by thread_pool.
Runtime-queryable queue capabilities descriptor.