Thread System 0.3.1
High-performance C++20 thread pool with work stealing and DAG scheduling
Loading...
Searching...
No Matches
kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy > Class Template Reference

Adapter for policy_queue to pool_queue_adapter_interface. More...

#include <policy_queue_adapter.h>

Inheritance diagram for kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >:
Inheritance graph
Collaboration diagram for kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >:
Collaboration graph

Public Types

using queue_type = policy_queue<SyncPolicy, BoundPolicy, OverflowPolicy>
 

Public Member Functions

 policy_queue_adapter ()
 Construct adapter with new policy_queue using default policies.
 
 policy_queue_adapter (BoundPolicy bound_policy)
 Construct adapter with bound policy.
 
 policy_queue_adapter (SyncPolicy sync_policy, BoundPolicy bound_policy, OverflowPolicy overflow_policy)
 Construct adapter with all policies.
 
 policy_queue_adapter (std::unique_ptr< queue_type > queue)
 Construct adapter with existing policy_queue.
 
 ~policy_queue_adapter () override=default
 
 policy_queue_adapter (const policy_queue_adapter &)=delete
 
policy_queue_adapteroperator= (const policy_queue_adapter &)=delete
 
 policy_queue_adapter (policy_queue_adapter &&)=default
 
policy_queue_adapteroperator= (policy_queue_adapter &&)=default
 
auto enqueue (std::unique_ptr< job > &&j) -> common::VoidResult override
 Enqueue a job.
 
auto enqueue_batch (std::vector< std::unique_ptr< job > > &&jobs) -> common::VoidResult override
 Enqueue a batch of jobs.
 
auto dequeue () -> common::Result< std::unique_ptr< job > > override
 Dequeue a job (blocking)
 
auto try_dequeue () -> common::Result< std::unique_ptr< job > > override
 Try to dequeue a job (non-blocking)
 
auto empty () const -> bool override
 Check if queue is empty.
 
auto size () const -> std::size_t override
 Get queue size.
 
auto clear () -> void override
 Clear all jobs from queue.
 
auto stop () -> void override
 Stop the queue.
 
auto is_stopped () const -> bool override
 Check if queue is stopped.
 
auto get_capabilities () const -> queue_capabilities override
 Get queue capabilities.
 
auto to_string () const -> std::string override
 Get string representation.
 
auto get_job_queue () const -> std::shared_ptr< job_queue > override
 Get the underlying job_queue if this adapter wraps one.
 
auto get_scheduler () -> scheduler_interface &override
 Get the underlying scheduler interface.
 
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 get_policy_queue () const -> const queue_type &
 Get direct access to the underlying policy_queue (const)
 
- Public Member Functions inherited from kcenon::thread::pool_queue_adapter_interface
virtual ~pool_queue_adapter_interface ()=default
 

Private Attributes

std::unique_ptr< queue_typequeue_
 

Detailed Description

template<typename SyncPolicy, typename BoundPolicy = policies::unbounded_policy, typename OverflowPolicy = policies::overflow_reject_policy>
class kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >

Adapter for policy_queue to pool_queue_adapter_interface.

This template adapter wraps any policy_queue instantiation and provides the unified interface expected by thread_pool. It enables thread_pool to work with the new policy-based queue system.

Template Parameters

  • SyncPolicy: Controls thread synchronization
  • BoundPolicy: Controls queue size limits
  • OverflowPolicy: Controls behavior when queue is full

Usage

// Using standard_queue (mutex-based, unbounded)
auto adapter = std::make_unique<policy_queue_adapter<
// Or using type alias
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 make_policy_queue_adapter() -> std::unique_ptr< pool_queue_adapter_interface >
Create a pool_queue_adapter from a policy_queue type.
Template Parameters
SyncPolicySynchronization policy type
BoundPolicyBounding policy type
OverflowPolicyOverflow handling policy type

Definition at line 54 of file policy_queue_adapter.h.

Member Typedef Documentation

◆ queue_type

template<typename SyncPolicy , typename BoundPolicy = policies::unbounded_policy, typename OverflowPolicy = policies::overflow_reject_policy>
using kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::queue_type = policy_queue<SyncPolicy, BoundPolicy, OverflowPolicy>

Definition at line 56 of file policy_queue_adapter.h.

Constructor & Destructor Documentation

◆ policy_queue_adapter() [1/6]

template<typename SyncPolicy , typename BoundPolicy = policies::unbounded_policy, typename OverflowPolicy = policies::overflow_reject_policy>
kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::policy_queue_adapter ( )
inline

Construct adapter with new policy_queue using default policies.

Definition at line 61 of file policy_queue_adapter.h.

62 : queue_(std::make_unique<queue_type>()) {}
std::unique_ptr< queue_type > queue_

◆ policy_queue_adapter() [2/6]

template<typename SyncPolicy , typename BoundPolicy = policies::unbounded_policy, typename OverflowPolicy = policies::overflow_reject_policy>
kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::policy_queue_adapter ( BoundPolicy bound_policy)
inlineexplicit

Construct adapter with bound policy.

Parameters
bound_policyBound policy configuration

Definition at line 68 of file policy_queue_adapter.h.

69 : queue_(std::make_unique<queue_type>(std::move(bound_policy))) {}

◆ policy_queue_adapter() [3/6]

template<typename SyncPolicy , typename BoundPolicy = policies::unbounded_policy, typename OverflowPolicy = policies::overflow_reject_policy>
kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::policy_queue_adapter ( SyncPolicy sync_policy,
BoundPolicy bound_policy,
OverflowPolicy overflow_policy )
inline

Construct adapter with all policies.

Parameters
sync_policySync policy configuration
bound_policyBound policy configuration
overflow_policyOverflow policy configuration

Definition at line 77 of file policy_queue_adapter.h.

80 : queue_(std::make_unique<queue_type>(
81 std::move(sync_policy),
82 std::move(bound_policy),
83 std::move(overflow_policy))) {}

◆ policy_queue_adapter() [4/6]

template<typename SyncPolicy , typename BoundPolicy = policies::unbounded_policy, typename OverflowPolicy = policies::overflow_reject_policy>
kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::policy_queue_adapter ( std::unique_ptr< queue_type > queue)
inlineexplicit

Construct adapter with existing policy_queue.

Parameters
queueUnique pointer to policy_queue

Definition at line 89 of file policy_queue_adapter.h.

90 : queue_(std::move(queue)) {}

◆ ~policy_queue_adapter()

template<typename SyncPolicy , typename BoundPolicy = policies::unbounded_policy, typename OverflowPolicy = policies::overflow_reject_policy>
kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::~policy_queue_adapter ( )
overridedefault

◆ policy_queue_adapter() [5/6]

template<typename SyncPolicy , typename BoundPolicy = policies::unbounded_policy, typename OverflowPolicy = policies::overflow_reject_policy>
kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::policy_queue_adapter ( const policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy > & )
delete

◆ policy_queue_adapter() [6/6]

template<typename SyncPolicy , typename BoundPolicy = policies::unbounded_policy, typename OverflowPolicy = policies::overflow_reject_policy>
kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::policy_queue_adapter ( policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy > && )
default

Member Function Documentation

◆ clear()

template<typename SyncPolicy , typename BoundPolicy = policies::unbounded_policy, typename OverflowPolicy = policies::overflow_reject_policy>
auto kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::clear ( ) -> void
inlineoverridevirtual

Clear all jobs from queue.

Implements kcenon::thread::pool_queue_adapter_interface.

Definition at line 133 of file policy_queue_adapter.h.

133 {
134 queue_->clear();
135 }

References kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::queue_.

◆ dequeue()

template<typename SyncPolicy , typename BoundPolicy = policies::unbounded_policy, typename OverflowPolicy = policies::overflow_reject_policy>
auto kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::dequeue ( ) -> common::Result< std::unique_ptr< job > >
inlinenodiscardoverridevirtual

Dequeue a job (blocking)

Returns
Result containing the job or error

Implements kcenon::thread::pool_queue_adapter_interface.

Definition at line 117 of file policy_queue_adapter.h.

117 {
118 return queue_->dequeue();
119 }

References kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::queue_.

◆ empty()

template<typename SyncPolicy , typename BoundPolicy = policies::unbounded_policy, typename OverflowPolicy = policies::overflow_reject_policy>
auto kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::empty ( ) const -> bool
inlinenodiscardoverridevirtual

Check if queue is empty.

Returns
true if empty

Implements kcenon::thread::pool_queue_adapter_interface.

Definition at line 125 of file policy_queue_adapter.h.

125 {
126 return queue_->empty();
127 }

References kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::queue_.

◆ enqueue()

template<typename SyncPolicy , typename BoundPolicy = policies::unbounded_policy, typename OverflowPolicy = policies::overflow_reject_policy>
auto kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::enqueue ( std::unique_ptr< job > && job) -> common::VoidResult
inlinenodiscardoverridevirtual

Enqueue a job.

Parameters
jobJob to enqueue
Returns
VoidResult indicating success or error

Implements kcenon::thread::pool_queue_adapter_interface.

Definition at line 102 of file policy_queue_adapter.h.

102 {
103 return queue_->enqueue(std::move(j));
104 }

References kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::queue_.

◆ enqueue_batch()

template<typename SyncPolicy , typename BoundPolicy = policies::unbounded_policy, typename OverflowPolicy = policies::overflow_reject_policy>
auto kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::enqueue_batch ( std::vector< std::unique_ptr< job > > && jobs) -> common::VoidResult
inlinenodiscardoverridevirtual

Enqueue a batch of jobs.

Parameters
jobsJobs to enqueue
Returns
VoidResult indicating success or error

Implements kcenon::thread::pool_queue_adapter_interface.

Definition at line 106 of file policy_queue_adapter.h.

106 {
107 // policy_queue doesn't have enqueue_batch, so we implement it as a loop
108 for (auto& j : jobs) {
109 auto result = queue_->enqueue(std::move(j));
110 if (result.is_err()) {
111 return result;
112 }
113 }
114 return common::ok();
115 }

References kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::queue_.

◆ get_capabilities()

template<typename SyncPolicy , typename BoundPolicy = policies::unbounded_policy, typename OverflowPolicy = policies::overflow_reject_policy>
auto kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::get_capabilities ( ) const -> queue_capabilities
inlinenodiscardoverridevirtual

Get queue capabilities.

Returns
Capabilities structure

Implements kcenon::thread::pool_queue_adapter_interface.

Definition at line 145 of file policy_queue_adapter.h.

145 {
146 return queue_->get_capabilities();
147 }

References kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::queue_.

◆ get_job_queue()

template<typename SyncPolicy , typename BoundPolicy = policies::unbounded_policy, typename OverflowPolicy = policies::overflow_reject_policy>
auto kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::get_job_queue ( ) const -> std::shared_ptr< job_queue >
inlinenodiscardoverridevirtual

Get the underlying job_queue if this adapter wraps one.

Returns
Shared pointer to job_queue, or nullptr if not applicable

This method is provided for backward compatibility with code that needs direct access to job_queue. Returns nullptr for policy_queue adapters.

Implements kcenon::thread::pool_queue_adapter_interface.

Definition at line 156 of file policy_queue_adapter.h.

156 {
157 // policy_queue is not a job_queue, return nullptr
158 return nullptr;
159 }

◆ get_policy_queue() [1/2]

template<typename SyncPolicy , typename BoundPolicy = policies::unbounded_policy, typename OverflowPolicy = policies::overflow_reject_policy>
auto kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::get_policy_queue ( ) -> queue_type&
inlinenodiscard

Get direct access to the underlying policy_queue.

Returns
Reference to the policy_queue

Definition at line 173 of file policy_queue_adapter.h.

173 {
174 return *queue_;
175 }

References kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::queue_.

◆ get_policy_queue() [2/2]

template<typename SyncPolicy , typename BoundPolicy = policies::unbounded_policy, typename OverflowPolicy = policies::overflow_reject_policy>
auto kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::get_policy_queue ( ) const -> const queue_type&
inlinenodiscard

Get direct access to the underlying policy_queue (const)

Returns
Const reference to the policy_queue

Definition at line 181 of file policy_queue_adapter.h.

181 {
182 return *queue_;
183 }

References kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::queue_.

◆ get_scheduler() [1/2]

template<typename SyncPolicy , typename BoundPolicy = policies::unbounded_policy, typename OverflowPolicy = policies::overflow_reject_policy>
auto kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::get_scheduler ( ) -> scheduler_interface &override
inlinenodiscardoverridevirtual

Get the underlying scheduler interface.

Returns
Reference to scheduler_interface

Implements kcenon::thread::pool_queue_adapter_interface.

Definition at line 161 of file policy_queue_adapter.h.

161 {
162 return *queue_;
163 }

References kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::queue_.

◆ get_scheduler() [2/2]

template<typename SyncPolicy , typename BoundPolicy = policies::unbounded_policy, typename OverflowPolicy = policies::overflow_reject_policy>
auto kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::get_scheduler ( ) const -> const scheduler_interface &override
inlinenodiscardoverridevirtual

Get the underlying scheduler interface (const)

Returns
Const reference to scheduler_interface

Implements kcenon::thread::pool_queue_adapter_interface.

Definition at line 165 of file policy_queue_adapter.h.

165 {
166 return *queue_;
167 }

References kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::queue_.

◆ is_stopped()

template<typename SyncPolicy , typename BoundPolicy = policies::unbounded_policy, typename OverflowPolicy = policies::overflow_reject_policy>
auto kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::is_stopped ( ) const -> bool
inlinenodiscardoverridevirtual

Check if queue is stopped.

Returns
true if stopped

Implements kcenon::thread::pool_queue_adapter_interface.

Definition at line 141 of file policy_queue_adapter.h.

141 {
142 return queue_->is_stopped();
143 }

References kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::queue_.

◆ operator=() [1/2]

template<typename SyncPolicy , typename BoundPolicy = policies::unbounded_policy, typename OverflowPolicy = policies::overflow_reject_policy>
policy_queue_adapter & kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::operator= ( const policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy > & )
delete

◆ operator=() [2/2]

template<typename SyncPolicy , typename BoundPolicy = policies::unbounded_policy, typename OverflowPolicy = policies::overflow_reject_policy>
policy_queue_adapter & kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::operator= ( policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy > && )
default

◆ size()

template<typename SyncPolicy , typename BoundPolicy = policies::unbounded_policy, typename OverflowPolicy = policies::overflow_reject_policy>
auto kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::size ( ) const -> std::size_t
inlinenodiscardoverridevirtual

Get queue size.

Returns
Number of jobs in queue

Implements kcenon::thread::pool_queue_adapter_interface.

Definition at line 129 of file policy_queue_adapter.h.

129 {
130 return queue_->size();
131 }

References kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::queue_.

◆ stop()

template<typename SyncPolicy , typename BoundPolicy = policies::unbounded_policy, typename OverflowPolicy = policies::overflow_reject_policy>
auto kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::stop ( ) -> void
inlineoverridevirtual

◆ to_string()

template<typename SyncPolicy , typename BoundPolicy = policies::unbounded_policy, typename OverflowPolicy = policies::overflow_reject_policy>
auto kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::to_string ( ) const -> std::string
inlinenodiscardoverridevirtual

Get string representation.

Returns
String describing the queue

Implements kcenon::thread::pool_queue_adapter_interface.

Definition at line 149 of file policy_queue_adapter.h.

149 {
151 "policy_queue[size={}, stopped={}]",
152 queue_->size(),
153 queue_->is_stopped());
154 }
static auto format(const char *formats, const FormatArgs &... args) -> std::string
Formats a narrow-character string with the given arguments.
Definition formatter.h:129

References utility_module::formatter::format(), and kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::queue_.

Here is the call graph for this function:

◆ try_dequeue()

template<typename SyncPolicy , typename BoundPolicy = policies::unbounded_policy, typename OverflowPolicy = policies::overflow_reject_policy>
auto kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::try_dequeue ( ) -> common::Result< std::unique_ptr< job > >
inlinenodiscardoverridevirtual

Try to dequeue a job (non-blocking)

Returns
Result containing the job or error

Implements kcenon::thread::pool_queue_adapter_interface.

Definition at line 121 of file policy_queue_adapter.h.

121 {
122 return queue_->try_dequeue();
123 }

References kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::queue_.

Member Data Documentation

◆ queue_

template<typename SyncPolicy , typename BoundPolicy = policies::unbounded_policy, typename OverflowPolicy = policies::overflow_reject_policy>
std::unique_ptr<queue_type> kcenon::thread::policy_queue_adapter< SyncPolicy, BoundPolicy, OverflowPolicy >::queue_
private

The documentation for this class was generated from the following file: