2
3
6
7
8
9
10
11
12
16#include <so_5/declspec.hpp>
18#include <so_5/disp_binder.hpp>
20#include <so_5/priority.hpp>
22#include <so_5/disp/prio_one_thread/quoted_round_robin/quotes.hpp>
24#include <so_5/disp/mpsc_queue_traits/pub.hpp>
26#include <so_5/disp/reuse/work_thread_activity_tracking.hpp>
27#include <so_5/disp/reuse/work_thread_factory_params.hpp>
40
41
42
43
44
51
52
53
54
55
73 static_cast< activity_tracking_mixin_t & >(a),
74 static_cast< activity_tracking_mixin_t & >(b) );
80 swap( a.m_queue_params, b.m_queue_params );
87 m_queue_params = std::move(p);
93
94
95
96
97
98
99
100
101
102
103
104
105 template<
typename L >
117 return m_queue_params;
137
138
139
140
141
155 empty()
const noexcept {
return !m_binder; }
177 reset()
noexcept { m_binder.reset(); }
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
212 const std::string_view data_sources_name_base,
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
246 const std::string_view data_sources_name_base,
250 return make_dispatcher(
252 data_sources_name_base,
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
286 return make_dispatcher( env, std::string_view{}, quotes );
Container for storing parameters for MPSC queue.
Alias for namespace with traits of event queue.
disp_params_t & set_queue_params(queue_traits::queue_params_t p)
Setter for queue parameters.
queue_traits::queue_params_t m_queue_params
Queue parameters.
const queue_traits::queue_params_t & queue_params() const
Getter for queue parameters.
disp_params_t & tune_queue_params(L tunner)
Tuner for queue parameters.
disp_params_t()
Default constructor.
friend void swap(disp_params_t &a, disp_params_t &b) noexcept
A handle for prio_one_thread::strictly_ordered dispatcher.
disp_binder_shptr_t m_binder
Binder for the dispatcher.
void reset() noexcept
Drop the content of handle.
bool empty() const noexcept
Is this handle empty?
bool operator!() const noexcept
Does this handle contain a reference to dispatcher?
dispatcher_handle_t(disp_binder_shptr_t binder) noexcept
operator bool() const noexcept
Is this handle empty?
disp_binder_shptr_t binder() const noexcept
Get a binder for that dispatcher.
dispatcher_handle_t() noexcept=default
A demand queue for dispatcher with one common working thread and round-robin processing of prioritise...
static dispatcher_handle_t make(disp_binder_shptr_t binder) noexcept
Data source for run-time monitoring of whole dispatcher.
stats::prefix_t m_base_prefix
Basic prefix for data sources.
disp_data_source_t(const std::string_view name_base, outliving_reference_t< dispatcher_template_t > disp)
outliving_reference_t< dispatcher_template_t > m_dispatcher
Dispatcher to work with.
void distribute_value_for_priority(const mbox_t &mbox, priority_t priority, std::size_t quote, std::size_t agents_count, std::size_t demands_count)
void distribute(const mbox_t &mbox) override
Send appropriate notification about the current value.
void undo_preallocation(agent_t &) noexcept override
Undo resources allocation.
dispatcher_template_t(outliving_reference_t< environment_t > env, const std::string_view name_base, disp_params_t params, const quotes_t "es)
void preallocate_resources(agent_t &) override
Allocate resources in dispatcher for new agent.
void unbind(agent_t &agent) noexcept override
Unbind agent from dispatcher.
void bind(agent_t &agent) noexcept override
Bind agent to dispatcher.
~dispatcher_template_t() noexcept override
stats::auto_registered_source_holder_t< disp_data_source_t > m_data_source
Data source for run-time monitoring.
Work_Thread m_work_thread
Working thread for the dispatcher.
demand_queue_t m_demand_queue
Demand queue for the dispatcher.
A storage of quotes for priorities.
Mixin with thread activity tracking flag.
Mixin that holds optional work thread factory.
Interface for dispatcher binders.
Helper class for indication of long-lived reference via its type.
A holder for data-souce that should be automatically registered and deregistered in registry.
A type for storing prefix of data_source name.
An interface of data source.
Various stuff related to MPSC event queue implementation and tuning.
void send_thread_activity_stats(const so_5::mbox_t &, const stats::prefix_t &, so_5::disp::prio_one_thread::reuse::work_thread_no_activity_tracking_t< demand_queue_t > &)
Implementation details for dispatcher with round-robin policy of handling prioritized events.
Dispatcher which handles events of different priorities in round-robin maner.
dispatcher_handle_t make_dispatcher(environment_t &env, const quotes_t "es)
Create an instance of quoted_round_robin dispatcher.
dispatcher_handle_t make_dispatcher(environment_t &env, const std::string_view data_sources_name_base, const quotes_t "es)
Create an instance of quoted_round_robin dispatcher.
SO_5_FUNC dispatcher_handle_t make_dispatcher(environment_t &env, const std::string_view data_sources_name_base, const quotes_t "es, disp_params_t params)
Create an instance of quoted_round_robin dispatcher.
Reusable code for dispatchers with one working thread for events of all priorities.
Dispatcher with one working thread for events of all priorities.
Reusable components for dispatchers.
All stuff related to run-time monitoring and statistics.
Private part of message limit implementation.
priority_t
Definition of supported priorities.