2
3
6
7
8
9
10
22
23
24
25
26
27
28
29template< std::size_t N >
82
83
84
85
86
87template<
typename Joiner >
95
96
97
98
99
100template<
typename Joiner,
typename... Tail >
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131template<
typename... Tail >
135 std::thread & first_thread,
virtual void unsubscribe_event_handler(const std::type_index &type_index, abstract_message_sink_t &subscriber) noexcept=0
Remove all message handlers.
virtual void subscribe_event_handler(const std::type_index &type_index, abstract_message_sink_t &subscriber)=0
Add the message handler.
virtual void drop_delivery_filter(const std::type_index &msg_type, abstract_message_sink_t &subscriber) noexcept=0
Removes delivery filter for message type and subscriber.
virtual void set_delivery_filter(const std::type_index &msg_type, const delivery_filter_t &filter, abstract_message_sink_t &subscriber)=0
Set a delivery filter for message type and subscriber.
virtual mbox_id_t id() const =0
Unique ID of this mbox.
virtual mchain_props::push_status_t push(const std::type_index &msg_type, const message_ref_t &message, mchain_props::select_case_t &select_case)=0
An attempt to push a new message into the mchain.
void close(Exceptions_Control, mchain_props::close_mode_t mode) noexcept(noexcept(details::should_terminate_if_throws_t< Exceptions_Control >::value))
Close the chain.
virtual void remove_from_select(mchain_props::select_case_t &select_case) noexcept=0
Removement of mchain from multi chain select.
virtual mchain_props::extraction_status_t extract(mchain_props::demand_t &dest, mchain_props::select_case_t &select_case)=0
An extraction attempt as a part of multi chain select.
virtual abstract_message_sink_t & sink() noexcept=0
Get a reference to the underlying message sink.
static demand_handler_pfn_t get_demand_handler_on_message_ptr() noexcept
const state_t & so_current_state() const
Access to the current agent state.
const mbox_t & so_direct_mbox() const
Get the agent's direct mbox.
static demand_handler_pfn_t get_demand_handler_on_enveloped_msg_ptr() noexcept
It's a kind of strong typedef for coop's deregistration reason.
Type of smart handle for a cooperation.
Template class for storing bunch of message handlers.
Helper class for calculating remaining time.
duration remaining() const
remaining_time_counter_t(duration remaining)
An interface of envelope with some message/signal inside.
virtual void access_hook(access_context_t context, handler_invoker_t &invoker) noexcept=0
An extended version of handling_context which can be used for calling event handler.
virtual void invoke(const payload_info_t &payload) noexcept=0
Call an actual handler for the enveloped message/signal.
An information about payload inside envelope.
message_ref_t & message() const noexcept
payload_info_t(message_ref_t message)
Initializing constructor.
Parameters for the SObjectizer Environment initialization.
void event_queue_hook(event_queue_hook_unique_ptr_t hook)
Set event_queue_hook object.
environment_params_t & add_layer(std::unique_ptr< SO_Layer > layer_ptr)
Add an additional layer to the SObjectizer Environment.
environment_params_t()
Constructor.
mchain_t create_mchain(const mchain_params_t ¶ms)
Create message chain.
void remove_stop_guard(stop_guard_shptr_t guard)
Remove stop_guard and complete the stop operation if necessary.
stop_guard_t::setup_result_t setup_stop_guard(stop_guard_shptr_t guard, stop_guard_t::what_if_stop_in_progress_t reaction_on_stop_in_progress=stop_guard_t::what_if_stop_in_progress_t::throw_exception)
Set up a new stop_guard.
Interface of event_queue_hook object.
static void noop_deleter(event_queue_hook_t *) noexcept
An implementation of no-op deleter.
An interface of event queue for agent.
virtual void push(execution_demand_t demand)=0
Enqueue new event to the queue.
trigger_t & trigger() const noexcept
Get a reference to activated trigger.
token_t(trigger_t *trigger) noexcept
trigger_t * m_trigger
Activated trigger.
bool valid() const noexcept
An interface of testing scenario step.
virtual void no_handler_hook(const scenario_in_progress_accessor_t &scenario_accessor, const incident_info_t &info, const message_ref_t &incoming_msg) noexcept=0
abstract_scenario_step_t & operator=(const abstract_scenario_step_t &)=delete
virtual ~abstract_scenario_step_t()=default
virtual void add_preactivate_action(preactivate_action_t action)=0
Add another preactivation action.
virtual void setup_triggers(trigger_container_t triggers, std::size_t triggers_to_activate) noexcept=0
Setup triggers for the step.
abstract_scenario_step_t(abstract_scenario_step_t &&)=delete
virtual void setup_constraints(constraint_container_t constraints) noexcept=0
Setup constraints for the step.
virtual const std::string & name() const noexcept=0
Get the name of the step.
virtual void post_handler_hook(const scenario_in_progress_accessor_t &scenario_accessor, token_t token) noexcept=0
Hook that should be called just after completion of event-handler.
abstract_scenario_step_t & operator=(abstract_scenario_step_t &&)=delete
virtual void preactivate() noexcept=0
Perform preactivation of the step.
virtual token_t pre_handler_hook(const scenario_in_progress_accessor_t &scenario_accessor, const incident_info_t &info, const message_ref_t &incoming_msg) noexcept=0
Hook that should be called before invocation of event-handler.
abstract_scenario_step_t(const abstract_scenario_step_t &)=delete
virtual status_t status() const noexcept=0
Get the current status of the step.
abstract_scenario_step_t()=default
abstract_scenario_step_t & activated_step() const noexcept
abstract_scenario_step_t::token_t m_step_token
abstract_scenario_step_t::token_t step_token() const noexcept
abstract_scenario_step_t * m_activated_step
token_t(abstract_scenario_step_t *activated_step, abstract_scenario_step_t::token_t step_token)
bool valid() const noexcept
An interface of testing scenario.
virtual void store_msg_inspection_result(const scenario_in_progress_accessor_t &, const abstract_scenario_step_t &step, const std::string &tag, const std::string &inspection_result)=0
Store msg inspection result in the scenario.
scenario_in_progress_accessor_t make_accessor() noexcept
Helper method for creation of scenario_in_progress_accessor instance.
abstract_scenario_t(abstract_scenario_t &&)=delete
virtual void run_for(std::chrono::steady_clock::duration run_time)=0
Run the scenario until completion or for specific amount of time.
virtual token_t pre_handler_hook(const incident_info_t &info, const message_ref_t &incoming_msg) noexcept=0
Hook that should be called before invocation of event-handler.
abstract_scenario_t()=default
virtual std::string stored_msg_inspection_result(const std::string &step_name, const std::string &tag) const =0
Get a value of stored msg inspection result.
virtual ~abstract_scenario_t()=default
virtual void post_handler_hook(token_t token) noexcept=0
Hook that should be called just after completion of event-handler.
virtual void no_handler_hook(const incident_info_t &info, const message_ref_t &incoming_msg) noexcept=0
abstract_scenario_t & operator=(const abstract_scenario_t &)=delete
virtual void store_state_name(const scenario_in_progress_accessor_t &, const abstract_scenario_step_t &step, const std::string &tag, const std::string &state_name)=0
Store a name of an agent state in the scenario.
virtual bool has_stored_state_name(const std::string &step_name, const std::string &tag) const =0
Check presence of the stored state name.
virtual std::string stored_state_name(const std::string &step_name, const std::string &tag) const =0
Get the stored state name.
abstract_scenario_t & operator=(abstract_scenario_t &&)=delete
virtual scenario_result_t result() const noexcept=0
Get the result of scenario execution.
virtual step_definition_proxy_t define_step(nonempty_name_t step_name)=0
Create a new step and return proxy for it.
abstract_scenario_t(const abstract_scenario_t &)=delete
virtual bool has_stored_msg_inspection_result(const std::string &step_name, const std::string &tag) const =0
Is there the inspection result?
An interface for object that will unfreeze all registered agents when testing scenario starts.
agent_unfreezer_t(const agent_unfreezer_t &)=delete
agent_unfreezer_t & operator=(const agent_unfreezer_t &)=delete
agent_unfreezer_t()=default
virtual void unfreeze() noexcept=0
Issue a command to unfreeze all frozen agents.
agent_unfreezer_t(agent_unfreezer_t &&)=delete
agent_unfreezer_t & operator=(agent_unfreezer_t &&)=delete
virtual ~agent_unfreezer_t()=default
An interface of step's constraints.
constraint_t & operator=(constraint_t &&)=delete
virtual void start() noexcept=0
Hook for step preactivation.
constraint_t & operator=(const constraint_t &)=delete
virtual ~constraint_t() noexcept=default
constraint_t(constraint_t &&)=delete
constraint_t(const constraint_t &)=delete
virtual bool check(const incident_status_t incident_status, const incident_info_t &info) const noexcept=0
Check for fulfillment of constraint.
virtual void finish() noexcept=0
Hook for step completion.
const mbox_t m_from
Source for a message.
void so_define_agent() override
Hook on define agent for SObjectizer.
void evt_msg_arrived(mhood_t< Msg >)
a_msg_catcher_t(context_t ctx, mbox_t from)
std::mutex m_lock
The lock for thread safety.
msg_catcher_map_layer_t()
~msg_catcher_map_layer_t() noexcept override
agents_map_t m_agents
The map of already created catcher agents.
const agent_t * register_new_catcher(const so_5::mbox_t &from) const
Helper for registration of a new agent.
catcher_info_t catcher_for_mbox(const so_5::mbox_t &from)
void start() noexcept override
Hook for step preactivation.
const std::chrono::steady_clock::duration m_pause
Value to be used.
void finish() noexcept override
Hook for step completion.
std::chrono::steady_clock::time_point m_started_at
Time point of step preactivation.
bool check(const incident_status_t, const incident_info_t &) const noexcept override
Check for fulfillment of constraint.
not_after_constraint_t(std::chrono::steady_clock::duration pause)
void start() noexcept override
Hook for step preactivation.
std::chrono::steady_clock::time_point m_started_at
Time point of step preactivation.
const std::chrono::steady_clock::duration m_pause
Value to be used.
void finish() noexcept override
Hook for step completion.
bool check(const incident_status_t, const incident_info_t &) const noexcept override
Check for fulfillment of constraint.
not_before_constraint_t(std::chrono::steady_clock::duration pause)
preactivate_actions_container_t m_preactivate_actions
All preactivation actions.
std::size_t m_triggers_activated
Count of triggers those are activated.
void no_handler_hook(const scenario_in_progress_accessor_t &scenario_accessor, const incident_info_t &info, const message_ref_t &incoming_msg) noexcept override
token_t pre_handler_hook(const scenario_in_progress_accessor_t &scenario_accessor, const incident_info_t &info, const message_ref_t &incoming_msg) noexcept override
Hook that should be called before invocation of event-handler.
bool try_pass_constraints(const incident_status_t incident_status, const incident_info_t &info) const noexcept
An attempt to check constraints for a new incident.
void setup_constraints(constraint_container_t constraints) noexcept override
Setup constraints for the step.
void preactivate() noexcept override
Perform preactivation of the step.
const std::string m_name
Name of a step.
std::size_t m_last_non_activated_trigger
Index of last trigger in the first part of trigger's container.
std::size_t m_triggers_to_activate
status_t status() const noexcept override
Get the current status of the step.
std::size_t m_triggers_to_completion
Count of activated triggers those are not completed yet.
status_t m_status
The current state of the step.
void post_handler_hook(const scenario_in_progress_accessor_t &scenario_accessor, token_t token) noexcept override
Hook that should be called just after completion of event-handler.
const std::string & name() const noexcept override
Get the name of the step.
token_t try_activate(const trigger_activation_context_t &context, const incident_status_t incident_status, const incident_info_t &info) noexcept
An attempt to activate the step when a new incident arrives.
constraint_container_t m_constraints
All constraints.
trigger_container_t m_triggers
All triggers.
real_scenario_step_t(std::string name)
void add_preactivate_action(preactivate_action_t action) override
Add another preactivation action.
void setup_triggers(trigger_container_t triggers, std::size_t triggers_to_activate) noexcept override
Setup triggers for the step.
void change_status(status_t status) noexcept
void no_handler_hook(const incident_info_t &info, const message_ref_t &incoming_msg) noexcept override
std::string stored_msg_inspection_result(const std::string &step_name, const std::string &tag) const override
Get a value of stored msg inspection result.
bool has_stored_state_name(const std::string &step_name, const std::string &tag) const override
Check presence of the stored state name.
void check_scenario_completion() noexcept
std::size_t m_waiting_step_index
Index of the current preactivated step.
void switch_to_next_step_if_possible()
std::set< abstract_scenario_step_t * > m_active_steps
Set of active step those are not completed yet.
scenario_result_t result() const noexcept override
Get the result of scenario execution.
void store_msg_inspection_result(const scenario_in_progress_accessor_t &, const abstract_scenario_step_t &step, const std::string &tag, const std::string &inspection_result) override
Store msg inspection result in the scenario.
std::string describe_current_state() const
bool has_stored_msg_inspection_result(const std::string &step_name, const std::string &tag) const override
Is there the inspection result?
std::string stored_state_name(const std::string &step_name, const std::string &tag) const override
Get the stored state name.
token_t react_on_pre_handler_hook(const incident_info_t &info, const message_ref_t &incoming_msg) noexcept
std::condition_variable m_completion_cv
Condition variable for waiting completion of the scenario.
void react_on_no_handler_hook(const incident_info_t &info, const message_ref_t &incoming_msg) noexcept
void preactivate_current_step()
void post_handler_hook(token_t token) noexcept override
Hook that should be called just after completion of event-handler.
void run_for(std::chrono::steady_clock::duration run_time) override
Run the scenario until completion or for specific amount of time.
agent_unfreezer_t * m_unfreezer
Unfreezer for registered agents.
real_scenario_t()=default
void setup_unfreezer(agent_unfreezer_t &unfreezer) noexcept
Set the unfreezer for registered agents.
inspection_result_map_t m_stored_inspection_results
Container for holding stored inspection results for messages.
void store_state_name(const scenario_in_progress_accessor_t &, const abstract_scenario_step_t &step, const std::string &tag, const std::string &state_name) override
Store a name of an agent state in the scenario.
token_t pre_handler_hook(const incident_info_t &info, const message_ref_t &incoming_msg) noexcept override
Hook that should be called before invocation of event-handler.
std::mutex m_lock
Object lock.
step_definition_proxy_t define_step(nonempty_name_t step_name) override
Create a new step and return proxy for it.
state_name_map_t m_stored_states
Container for holding stored state names.
scenario_status_t m_status
The current state of the scenario.
std::vector< step_unique_ptr_t > m_steps
Scenario's steps.
scenario_in_progress_accessor_t & operator=(scenario_in_progress_accessor_t &&)=delete
scenario_in_progress_accessor_t(outliving_reference_t< abstract_scenario_t > scenario)
scenario_in_progress_accessor_t(scenario_in_progress_accessor_t &&)=delete
abstract_scenario_t & scenario() const noexcept
scenario_in_progress_accessor_t & operator=(const scenario_in_progress_accessor_t &)=delete
scenario_in_progress_accessor_t(const scenario_in_progress_accessor_t &)=delete
outliving_reference_t< abstract_scenario_t > m_scenario
trigger_holder_t(const trigger_holder_t &)=delete
trigger_holder_t & operator=(trigger_holder_t &&) noexcept=default
trigger_holder_t & operator=(const trigger_holder_t &)=delete
trigger_holder_t(trigger_holder_t &&) noexcept=default
trigger_holder_t(trigger_unique_ptr_t trigger) noexcept
trigger_unique_ptr_t m_trigger
trigger_unique_ptr_t giveout_trigger() noexcept
Get the trigger object from the holder.
activation_function_t m_activation
Optional function for activation of the trigger.
const std::type_index m_msg_type
Type of message/signal to activate the trigger.
completion_function_t m_completion
Optional function for completion of the trigger.
trigger_t(trigger_t &&)=delete
void set_completion(completion_function_t fn)
Setter for completion function.
void set_activation(activation_function_t fn)
Setter for activation function.
void activate(const trigger_activation_context_t &context) noexcept
Do activation of the trigger.
bool check(const incident_status_t incident_status, const incident_info_t &info) const noexcept
Check for activation of the trigger.
const mbox_id_t m_src_mbox_id
ID of source mbox of message/signal to activate the trigger.
trigger_t(incident_status_t incident_status, const agent_t &target, std::type_index msg_type, mbox_id_t src_mbox_id)
Initializing constructor.
const agent_t & target_agent() const noexcept
Get the reference of the target agent.
const incident_status_t m_incident_status
What should happen with initial message/signal.
bool requires_completion() const noexcept
Does this trigger require separate completion action?
const mbox_id_t m_target_id
The unique ID of target's direct mbox.
void complete(const trigger_completion_context_t &context) noexcept
Do completion of a trigger.
trigger_t(const trigger_t &)=delete
const agent_t & m_target_agent
A reference to the target agent.
void invoke(const payload_info_t &payload) noexcept override
Call an actual handler for the enveloped message/signal.
no_handler_invoker_t(outliving_reference_t< special_envelope_t > owner)
Initializing constructor.
outliving_reference_t< special_envelope_t > m_owner
Owner of this invoker.
outliving_reference_t< handler_invoker_t > m_actual_invoker
Invoker to be used to call the actual event handler.
void invoke(const payload_info_t &payload) noexcept override
Call an actual handler for the enveloped message/signal.
pre_handler_hook_invoker_t(outliving_reference_t< special_envelope_t > owner, outliving_reference_t< handler_invoker_t > actual_invoker)
Intializing constructor.
outliving_reference_t< special_envelope_t > m_owner
Owner of this invoker.
outliving_reference_t< details::abstract_scenario_t > m_scenario
A testing scenario for that envelope.
~special_envelope_t() noexcept override
@ delivered
Message delivered to the destination agent.
@ suppressed_by_envelope
Message suppressed by a nested envelope.
@ ignored
Message ignored by the destination agent.
special_envelope_t(outliving_reference_t< details::abstract_scenario_t > scenario, const execution_demand_t &demand)
Initializing constructor.
message_ref_t m_message
Enveloped message.
details::incident_info_t m_demand_info
Information about enveloped message.
void access_hook(access_context_t context, handler_invoker_t &invoker) noexcept override
delivery_result_t m_delivery_result
Was this message handled by a receiver?
void unfreeze() noexcept override
Issue a command to unfreeze all frozen agents.
std::mutex m_lock
Lock for this object.
outliving_reference_t< details::abstract_scenario_t > m_scenario
Testing scenario for that this object is created.
void on_unbind(agent_t *, event_queue_t *queue) noexcept override
A reaction to unbinding of an agent from some event_queue.
queue_mode_t m_mode
Mode of operation for new queues.
std::vector< special_event_queue_t * > m_created_queues
List of all queues created before unfreeze was called.
special_event_queue_hook_t(outliving_reference_t< details::abstract_scenario_t > scenario)
event_queue_t * on_bind(agent_t *, event_queue_t *original_queue) noexcept override
A reaction to binding of an agent to some event_queue.
std::vector< execution_demand_t > m_buffer
Local storage for demands to be used in buffered mode.
static bool is_ordinary_demand(const execution_demand_t &demand) noexcept
special_event_queue_t(outliving_reference_t< details::abstract_scenario_t > scenario, outliving_reference_t< event_queue_t > original_queue, queue_mode_t queue_mode)
void push_to_queue(execution_demand_t demand)
void push_evt_finish(execution_demand_t demand) noexcept override
Enqueue a demand for evt_finish event.
queue_mode_t m_mode
The current mode of operation.
std::mutex m_lock
Object lock.
void push_evt_start(execution_demand_t demand) override
Enqueue a demand for evt_start event.
outliving_reference_t< event_queue_t > m_original_queue
Original event_queue.
void switch_to_direct_mode()
void push(execution_demand_t demand) override
Enqueue new event to the queue.
outliving_reference_t< details::abstract_scenario_t > m_scenario
Testing scenario for that this queue was created.
stop_guard_for_unfreezer_t(outliving_reference_t< details::agent_unfreezer_t > unfreezer, outliving_reference_t< environment_t > env)
outliving_reference_t< details::agent_unfreezer_t > m_unfreezer
outliving_reference_t< environment_t > m_env
void stop() noexcept override
Perform stop-related actions.
step_definition_proxy_t define_step(nonempty_name_t step_name)
Start definition of a new scenario's step.
std::string stored_state_name(const std::string &step_name, const std::string &tag) const
Try to get stored name of an agent's state.
std::string stored_msg_inspection_result(const std::string &step_name, const std::string &tag) const
Try to get stored msg inspection result.
outliving_reference_t< details::abstract_scenario_t > m_scenario
bool has_stored_state_name(const std::string &step_name, const std::string &tag) const
Is there the inspection result?
bool has_stored_msg_inspection_result(const std::string &step_name, const std::string &tag) const
Is there the inspection result?
void run_for(std::chrono::steady_clock::duration run_time)
Runs the scenario for specified amount of time.
scenario_proxy_t(outliving_reference_t< details::abstract_scenario_t > scenario)
scenario_result_t result() const
Get the result of scenario execution.
The result of run of testing scenario.
scenario_result_t(scenario_status_t status)
The constructor for a case when there is only status of scenario.
scenario_result_t(scenario_status_t status, std::string description)
scenario_status_t m_status
optional< std::string > m_description
bool operator!=(const scenario_result_t &o) const noexcept
Check for inequality.
bool operator==(const scenario_result_t &o) const noexcept
Check for equality.
A special object that should be used for definition of a step of a testing scenario.
details::abstract_scenario_step_t * m_step
step_definition_proxy_t(details::abstract_scenario_step_t *step)
Initializing constructor.
step_definition_proxy_t & impact(Lambda &&lambda)
Add preactivation action in form of lambda-object.
step_definition_proxy_t & when_all(details::trigger_holder_t< Status > event, Args &&...args)
Add a list of tiggers for activation of that step.
void append_constraint_to(details::constraint_container_t &)
void append_trigger_to(details::trigger_container_t &to, details::trigger_holder_t< Status > event, Args &&...args)
void append_constraint_to(details::constraint_container_t &to, details::constraint_unique_ptr_t head, Args &&...tail)
step_definition_proxy_t & impact(Target &&target, Args &&...args)
Define a preactivation action in form of sending a message/signal to the specified target.
void append_trigger_to(details::trigger_container_t &)
step_definition_proxy_t & constraints(details::constraint_unique_ptr_t head, Args &&...tail)
Add a list of constraints for that step.
step_definition_proxy_t & when_any(details::trigger_holder_t< Status > event, Args &&...args)
Add a list of tiggers for activation of that step.
step_definition_proxy_t & when(details::trigger_holder_t< Status > event)
Add a tigger for activation of that step.
A special testing environment that should be used for testing of agents.
void stop()
Send stop signal to environment.
environment_t & environment() const
Access to wrapped environment.
testing_env_t()
Default constructor.
testing_env_t(environment_params_t &&env_params)
void wait_init_completion()
scenario_proxy_t scenario() noexcept
Access to the associated scenario.
void join()
Wait for complete finish of environment's work.
wrapped_env_t m_sobjectizer
std::unique_ptr< internals_t > m_internals
void tune_environment_on_start(environment_t &env)
void stop_then_join()
Send stop signal and wait for complete finish of environment's work.
testing_env_t(so_5::generic_simple_so_env_params_tuner_t env_params_tuner)
A constructor that allows to tune environment's parameters.
Special container for holding select parameters and select cases.
extensible_select_t & operator=(extensible_select_t &&other) noexcept
Move operator.
extensible_select_t()=default
Default constructor.
extensible_select_t(extensible_select_t &&other) noexcept
Move constructor.
friend void swap(extensible_select_t &a, extensible_select_t &b) noexcept
Swap operation.
bool empty() const noexcept
Is this handle empty?
std::unique_ptr< mchain_props::details::extensible_select_data_t > m_data
Actual data for that extensible-select.
auto & data() const noexcept
extensible_select_t & operator=(const extensible_select_t &)=delete
extensible_select_t(const extensible_select_t &)=delete
extensible_select_t(std::unique_ptr< mchain_props::details::extensible_select_data_t > data)
Actual initializing constructor.
friend extensible_select_t make_extensible_select(mchain_select_params_t< Msg_Count_Status > params, Cases &&... cases)
Creation of extensible-select instance.
Auxiliary class for the SObjectizer launching.
Init m_init
Initialization routine.
void init() override
Initialization hook.
so_quick_environment_t(Init init, so_5::environment_params_t &&env_params)
intrusive_ptr_t(intrusive_ptr_t &&o) noexcept
Move constructor.
T * operator->() const noexcept
intrusive_ptr_t(const intrusive_ptr_t &o) noexcept
Copy constructor.
intrusive_ptr_t & operator=(intrusive_ptr_t &&o) noexcept
Move operator.
friend void swap(intrusive_ptr_t &a, intrusive_ptr_t &b) noexcept
Swap values.
An interface of the additional SObjectizer Environment layer.
Main class for auto close operation.
auto_closer_t & operator=(const auto_closer_t &)=delete
so_5::mchain_props::close_mode_t m_close_mode
auto_closer_t(auto_closer_t &&o) noexcept
auto_closer_t(so_5::mchain_props::close_mode_t close_mode)
auto_closer_t(const auto_closer_t &)=delete
void set_mchain(std::size_t index, mchain_t ch)
std::array< mchain_t, N > m_chains
auto_closer_t & operator=(auto_closer_t &&o) noexcept
friend void swap(auto_closer_t &a, auto_closer_t &b) noexcept
Basic parameters for advanced receive from mchain and for multi chain select.
Helper class for automatic close of a mchain at the destruction of master handle instance.
const mchain_t & get() const noexcept
Get the mchain.
mchain_master_handle_t(mchain_master_handle_t &&handle) noexcept
Move constructor.
mchain_master_handle_t(mchain_t chain, mchain_props::close_mode_t close_mode) noexcept
Initializing constructor.
const mchain_t & operator*() const noexcept
Get the mchain.
static mchain_master_handle_t make(mchain_t chain, mchain_props::close_mode_t close_mode) noexcept
static mchain_master_handle_t with_retain_content(mchain_t chain) noexcept
mchain_master_handle_t & operator=(const mchain_master_handle_t &)=delete
friend void swap(mchain_master_handle_t &a, mchain_master_handle_t &b) noexcept
Swap operation.
~mchain_master_handle_t()
Destructor closes the chain.
mchain_props::close_mode_t m_close_mode
Close mode for mchain.
mchain_t m_chain
Chain to be hold.
mchain_master_handle_t(const mchain_master_handle_t &)=delete
static mchain_master_handle_t with_drop_content(mchain_t chain) noexcept
mchain_master_handle_t & operator=(mchain_master_handle_t &&handle) noexcept
Move operator.
Actual implementation of one multi chain select case.
actual_receive_select_case_t(mchain_t chain, Handlers &&... handlers)
Initializing constructor.
so_5::details::handlers_bunch_t< N > m_handlers
mchain_receive_result_t try_handle_extracted_message(demand_t &demand) override
Attempt to handle extracted message.
Actual implementation of notificator for multi chain select.
select_case_t * m_tail
Queue of already notified select_cases.
actual_select_notificator_t(Fwd_it b, Fwd_it e)
Initializing constructor.
void push_to_notified_chain(select_case_t &what) noexcept
select_case_t * wait(duration_t wait_time)
Wait for any notified select_case.
std::condition_variable m_condition
void return_to_ready_chain(select_case_t &what) noexcept
Return specifed select_case object to the chain of 'notified select_cases'.
void notify(select_case_t &what) noexcept override
The actual implementation of select_case for the case of sending a message.
void on_successful_push() override
Hook for handling successful push attempt.
actual_send_select_case_t(mchain_t chain, std::type_index msg_type, message_ref_t message, const On_Success_Handler &success_handler)
Initializing constructor for the case when success_handler is a const lvalue.
On_Success_Handler m_success_handler
Actual handler of successful send attempt.
actual_send_select_case_t(mchain_t chain, std::type_index msg_type, message_ref_t message, On_Success_Handler &&success_handler)
Initializing constructor for the case when success_handler is a rvalue.
Iterator class for accessing select_cases.
bool operator!=(const const_iterator &o) const noexcept
const_iterator & operator++() noexcept
select_case_t & operator*() const noexcept
bool operator==(const const_iterator &o) const noexcept
select_case_t * operator->() const noexcept
const_iterator(actual_it_t it) noexcept
const_iterator operator++(int) noexcept
A holder for serie of select_cases for the case of extensible select.
array_type_t m_cases
Storage for select_cases.
extensible_select_cases_holder_t(const extensible_select_cases_holder_t &)=delete
extensible_select_cases_holder_t & operator=(extensible_select_cases_holder_t &&o) noexcept
Move operator.
extensible_select_cases_holder_t & operator=(const extensible_select_cases_holder_t &)=delete
extensible_select_cases_holder_t(extensible_select_cases_holder_t &&o) noexcept
Move constructor.
extensible_select_cases_holder_t()
Default constructor.
friend void swap(extensible_select_cases_holder_t &a, extensible_select_cases_holder_t &b) noexcept
Swap operation.
extensible_select_cases_holder_t(std::size_t initial_capacity)
Constructor with initial capacity.
const_iterator end() const noexcept
Get iterator for the item just behind the last item in select_cases_holder.
std::size_t size() const noexcept
Get count of select_cases in holder.
const_iterator begin() const noexcept
Get iterator for the first item in select_cases_holder.
void add_case(select_case_unique_ptr_t c)
Helper method for setting up specific select_case.
Special class for locking extensible-select instance for activation inside select() call.
activation_locker_t(activation_locker_t &&)=delete
activation_locker_t(const activation_locker_t &)=delete
outliving_reference_t< extensible_select_data_t > m_data
Special class for locking extensible-select instance for modification.
outliving_reference_t< extensible_select_data_t > m_data
modification_locker_t(modification_locker_t &&)=delete
modification_locker_t(const modification_locker_t &)=delete
std::lock_guard< std::mutex > m_lock
A data for extensible-select instance.
std::mutex m_lock
The object's lock.
const mchain_select_params_t< mchain_props::msg_count_status_t::defined > m_params
Parameters for select.
extensible_select_status_t m_status
The current status of extensible-select object.
extensible_select_cases_holder_t m_cases
A list of cases for extensible-select operation.
extensible_select_data_t(const extensible_select_data_t &)=delete
extensible_select_data_t(extensible_select_data_t &&)=delete
extensible_select_data_t(mchain_select_params_t< msg_count_status_t::defined > &¶ms, extensible_select_cases_holder_t &&cases) noexcept
Initializing constructor.
std::size_t to_handle() const noexcept
Get limit for count of message to be handled.
const mchain_props::duration_t & total_time() const noexcept
Get total time for the whole receive operation.
const stop_predicate_t & stop_on() const noexcept
Get user condition for stopping receive operation.
std::size_t to_extract() const noexcept
Get limit for count of messages to be extracted.
const chain_closed_handler_t & closed_handler() const noexcept
Get handler for chain-closed event.
const mchain_props::duration_t & empty_timeout() const noexcept
Get timeout for waiting on empty chain.
Special class for locking prepared-select instance for activation inside select() call.
activation_locker_t(activation_locker_t &&)=delete
outliving_reference_t< prepared_select_data_t > m_data
activation_locker_t(const activation_locker_t &)=delete
A data for prepared-select instance.
prepared_select_data_t(mchain_select_params_t< msg_count_status_t::defined > &¶ms, Cases &&...cases) noexcept
Initializing constructor.
prepared_select_data_t(prepared_select_data_t &&)=delete
select_cases_holder_t< Cases_Count > m_cases
A list of cases for extensible-select operation.
std::mutex m_lock
The object's lock.
prepared_select_data_t(const prepared_select_data_t &)=delete
prepared_select_status_t m_status
The current status of extensible-select object.
const mchain_select_params_t< mchain_props::msg_count_status_t::defined > m_params
Parameters for select.
A base class for implementations of select_case for the case of receiving messages.
virtual mchain_receive_result_t try_handle_extracted_message(demand_t &demand)=0
Attempt to handle extracted message.
handling_result_t try_handle(select_notificator_t ¬ificator) override
An attempt to handle this case.
Iterator class for accessing select_cases.
select_case_t & operator*() const noexcept
bool operator!=(const const_iterator &o) const noexcept
const_iterator(actual_it_t it) noexcept
select_case_t * operator->() const noexcept
bool operator==(const const_iterator &o) const noexcept
const_iterator & operator++() noexcept
const_iterator operator++(int) noexcept
A holder for serie of select_cases.
select_cases_holder_t & operator=(select_cases_holder_t &&o) noexcept
Move operator.
void set_case(std::size_t index, select_case_unique_ptr_t c) noexcept
Helper method for setting up specific select_case.
const_iterator end() const noexcept
Get iterator for the item just behind the last item in select_cases_holder.
select_cases_holder_t(const select_cases_holder_t &)=delete
select_cases_holder_t()
Default constructor.
friend void swap(select_cases_holder_t &a, select_cases_holder_t &b) noexcept
Swap operation.
const_iterator begin() const noexcept
Get iterator for the first item in select_cases_holder.
select_cases_holder_t(select_cases_holder_t &&o) noexcept
Move constructor.
array_type_t m_cases
Storage for select_cases.
select_cases_holder_t & operator=(const select_cases_holder_t &)=delete
std::size_t size() const noexcept
Get count of select_cases in holder.
A base class for implementations of select_case for the case of sending messages.
std::type_index m_msg_type
Type of message to be sent.
virtual void on_successful_push()=0
Hook for handling successful push attempt.
send_select_case_t(mchain_t chain, std::type_index msg_type, message_ref_t message)
Initializing constructor.
message_ref_t m_message
Message to be sent.
handling_result_t try_handle(select_notificator_t ¬ificator) override
An attempt to handle this case.
Base class for representation of one case in multi chain select.
const mchain_t & chain() const noexcept
Get the underlying mchain.
auto push(const std::type_index &msg_type, const message_ref_t &message)
Helper method for calling push method of the target mchain.
select_case_t * query_next() const noexcept
auto extract(demand_t &demand)
Helper method for calling extract method of the target mchain.
void set_next(select_case_t *next) noexcept
Set the next item in the current queue to which select_case belongs.
select_case_t(const select_case_t &)=delete
select_case_t(mchain_t chain)
Initialized constructor.
select_case_t * giveout_next() noexcept
virtual handling_result_t try_handle(select_notificator_t ¬ificator)=0
An attempt to handle this case.
select_notificator_t * m_notificator
Notificator to be used for notify sleeping thread.
void notify() noexcept
Notification for all waiting select_cases.
select_case_t * m_next
Next select_case in queue.
mchain_t m_chain
Message chain to receive message from.
void on_select_finish() noexcept
Reaction to the end of select work.
select_case_t(select_case_t &&)=delete
An interface of select_case notificator.
virtual void notify(select_case_t &what) noexcept=0
A result of receive from mchain.
std::size_t extracted() const noexcept
Count of extracted messages.
mchain_props::extraction_status_t status() const noexcept
Extraction status (e.g. no messages, chain closed and so on).
std::size_t handled() const noexcept
Count of handled messages.
mchain_receive_result_t(std::size_t extracted, std::size_t handled, mchain_props::extraction_status_t status) noexcept
Initializing constructor.
mchain_select_params_t(typename base_type::data_type data)
Initializing constructor for the case of cloning.
mchain_select_params_t()=default
The default constructor.
decltype(auto) so5_clone_if_necessary() noexcept
A result of select from several mchains.
std::size_t m_closed
Count of closed chains.
std::size_t m_handled
Count of handled incoming messages.
std::size_t handled() const noexcept
Count of handled incoming messages.
bool was_extracted() const noexcept
mchain_select_result_t(std::size_t extracted, std::size_t handled, std::size_t sent, std::size_t closed) noexcept
Initializing constructor.
mchain_select_result_t() noexcept
Default constructor.
std::size_t m_sent
Count of messages sent.
bool was_sent_or_received() const noexcept
std::size_t closed() const noexcept
Count of closed chains.
std::size_t sent() const noexcept
Count of messages sent.
bool was_closed() const noexcept
std::size_t m_extracted
Count of extracted incoming messages.
std::size_t extracted() const noexcept
Count of extracted incoming messages.
bool was_sent() const noexcept
bool was_handled() const noexcept
A result of attempt of sending messages to a message chain.
mchain_props::push_status_t status() const noexcept
Status of send operation.
mchain_send_result_t(std::size_t sent, mchain_props::push_status_t status)
Initializing constructor.
std::size_t sent() const noexcept
Count of messages sent.
A class for holding an instance of a message.
A base class for agent messages.
friend message_kind_t message_kind(const so_5::intrusive_ptr_t< message_t > &what)
Helper method for quering kind of the message.
Class that actually holds multiple sinks bindings.
void do_actual_bind(const std::type_index &msg_type, const mbox_t &from, const msink_t &dest, Single_Sink_Modificator &&single_sink_modificator)
Implementation of bind procedure.
void do_bind(const mbox_t &from, const msink_t &dest)
void do_unbind(const mbox_t &from, const msink_t &dest) noexcept
bindings_map_t m_bindings
All bindings.
void do_bind(const mbox_t &from, const msink_t &dest, delivery_filter_unique_ptr_t delivery_filter)
void do_unbind_all_for(const mbox_t &from, const msink_t &dest) noexcept
iterator_type operator->() const
~insertion_it_with_auto_erase_if_not_committed_t() noexcept
insertion_it_with_auto_erase_if_not_committed_t(const insertion_it_with_auto_erase_if_not_committed_t &)=delete
insertion_it_with_auto_erase_if_not_committed_t(insertion_it_with_auto_erase_if_not_committed_t &&)=delete
bool modified() const noexcept
insertion_it_with_auto_erase_if_not_committed_t(Container &container, typename Container::key_type const &k)
Initializing constructor.
Helper class for managing multiple sink bindings.
multi_sink_binding_t & operator=(multi_sink_binding_t &&)=delete
void bind(const mbox_t &from, const msink_t &dest)
multi_sink_binding_t()=default
void bind(const mbox_t &from, const msink_t &dest, delivery_filter_unique_ptr_t delivery_filter)
void unbind(const mbox_t &from, const msink_t &dest) noexcept
void bind(const mbox_t &from, const msink_t &dest, Lambda &&filter)
multi_sink_binding_t & operator=(const multi_sink_binding_t &)=delete
multi_sink_binding_t(multi_sink_binding_t &&)=delete
void unbind_all_for(const mbox_t &from, const msink_t &dest) noexcept
multi_sink_binding_t(const multi_sink_binding_t &)=delete
A class for the name which cannot be empty.
std::string giveout_value() noexcept(noexcept(std::string{ std::move(m_nonempty_name) }))
Get the value away from the object.
Helper class for indication of long-lived reference via its type.
outliving_reference_t(outliving_reference_t const &o) noexcept
Special container for holding select parameters and select cases.
auto & data() const noexcept
friend prepared_select_t< sizeof...(Cases) > prepare_select(mchain_select_params_t< Msg_Count_Status > params, Cases &&... cases)
Create prepared select statement to be used later.
prepared_select_t & operator=(prepared_select_t &&other) noexcept
Move operator.
prepared_select_t(prepared_select_t &&other) noexcept
Move constructor.
prepared_select_t & operator=(const prepared_select_t &)=delete
std::unique_ptr< mchain_props::details::prepared_select_data_t< Cases_Count > > m_data
The actual prepared-select object.
prepared_select_t(mchain_select_params_t< mchain_props::msg_count_status_t::defined > params, Cases &&... cases)
Initializing constructor.
prepared_select_t(const prepared_select_t &)=delete
bool empty() const noexcept
Is this handle empty?
friend void swap(prepared_select_t &a, prepared_select_t &b) noexcept
Swap operation.
Helper class for managing single sink bindings.
void bind(const mbox_t &source, const msink_t &sink_owner)
single_sink_binding_t(single_sink_binding_t &&other) noexcept
single_sink_binding_t(const single_sink_binding_t &)=delete
single_sink_binding_t & operator=(single_sink_binding_t &&other) noexcept
std::optional< binding_info_t > m_info
void bind(const mbox_t &source, const msink_t &sink_owner, delivery_filter_unique_ptr_t delivery_filter)
single_sink_binding_t & operator=(const single_sink_binding_t &)=delete
void bind(const mbox_t &source, const msink_t &sink_owner, Lambda &&filter)
bool empty() const noexcept
bool has_value() const noexcept
void bind_for_msg_type(const std::type_index &msg_type, const mbox_t &source, const msink_t &sink_owner)
friend void swap(single_sink_binding_t &a, single_sink_binding_t &b) noexcept
single_sink_binding_t() noexcept=default
void bind_for_msg_type(const std::type_index &msg_type, const mbox_t &source, const msink_t &sink_owner, delivery_filter_unique_ptr_t delivery_filter)
~single_sink_binding_t() noexcept
std::string query_name() const
Get textual name of the state.
An interface of stop_guard entity.
Main class for auto join operation.
std::array< std::thread *, N > m_threads
friend void swap(auto_joiner_t &a, auto_joiner_t &b) noexcept
auto_joiner_t & operator=(const auto_joiner_t &)=delete
auto_joiner_t(auto_joiner_t &&o) noexcept
auto_joiner_t(const auto_joiner_t &)=delete
void set_thread(std::size_t index, std::thread &t)
auto_joiner_t & operator=(auto_joiner_t &&o) noexcept
void stop()
Send stop signal to environment.
wrapped_env_t(wait_init_completion_t wait_init_completion_indicator, so_5::generic_simple_init_t init_func, environment_params_t &¶ms)
A constructor for synchronous mode which receives initialization function and already prepared enviro...
void stop_then_join()
Send stop signal and wait for complete finish of environment's work.
wrapped_env_t(so_5::generic_simple_init_t init_func, environment_params_t &¶ms)
wrapped_env_t(const wrapped_env_t &)=delete
std::unique_ptr< details_t > m_impl
Implementation details.
wrapped_env_t(environment_params_t &¶ms)
A constructor which receives already prepared environment's params.
wrapped_env_t(so_5::generic_simple_init_t init_func)
A constructor which receives only initialization function.
wrapped_env_t(wrapped_env_t &&)=delete
wrapped_env_t()
Default constructor.
static constexpr wait_init_completion_t wait_init_completion
Special indicator that tells that synchronous mode has to be used for calling init-function.
~wrapped_env_t()
Destructor.
wrapped_env_t(wait_init_completion_t wait_init_completion_indicator, so_5::generic_simple_init_t init_func, so_5::generic_simple_so_env_params_tuner_t params_tuner)
A constructor for synchronous mode which receives initialization function and a function for environm...
wrapped_env_t(wait_init_completion_t wait_init_completion_indicator, so_5::generic_simple_init_t init_func)
A constructor for synchronous mode which receives only initialization function.
wrapped_env_t(so_5::generic_simple_init_t init_func, so_5::generic_simple_so_env_params_tuner_t params_tuner)
A constructor which receives initialization function and a function for environment's params tuning.
void join()
Wait for complete finish of environment's work.
environment_t & environment() const
Access to wrapped environment.
wrapped_env_t(so_5::generic_simple_init_t init_func, environment_params_t &¶ms, wrapped_env_details::init_style_t init_style)
The main initializing constructor.
wait_init_completion_t
Helper type to be used as indicator of synchronous mode.
#define SO_5_THROW_EXCEPTION(error_code, desc)
Helper templates for detection of lambda-type traits.
Some reusable and low-level classes/functions which can be used in public header files.
bool wait_for_big_interval(std::unique_lock< std::mutex > &lock, std::condition_variable &cv, std::chrono::steady_clock::duration timeout, Predicate pred)
Helper function for safe call of condition_variable::wait_for with possible big timeouts.
auto do_with_rollback_on_exception(Main_Action main_action, Rollback_Action rollback_action) -> decltype(main_action())
Helper function for do some action with rollback in the case of an exception.
auto invoke_noexcept_code(L lambda) noexcept -> decltype(lambda())
envelope_t & message_to_envelope(const message_ref_t &src_msg)
A helper function for casting message instance to envelope instance.
access_context_t
Information about context on that enveloped message is handled.
trigger_holder_t< incident_status_t::handled > operator&(trigger_holder_t< incident_status_t::handled > &&old_holder, wait_event_handler_completion_t)
A helper operator to create a tigger that requires the completion of an event handler.
trigger_holder_t< Status > operator&(trigger_holder_t< Status > &&old_holder, store_msg_inspection_result_t inspection_info)
A helper operator to create a tigger that inspects the incoming message and stores the result into th...
trigger_holder_t< incident_status_t::handled > operator&(const mbox_t &from, receives_indicator_t< Msg >)
A helper operator to create a tigger that receives a message/signal from specified mbox.
trigger_holder_t< Status > operator&(const so_5::agent_t &agent, const trigger_source_t< Status > &src)
A helper operator to create a trigger for the specified agent.
incident_status_t
What happened with source of an event.
@ handled
Message or signal has been handled.
@ ignored
Message or signal has been ignored.
trigger_holder_t< incident_status_t::handled > operator&(trigger_holder_t< incident_status_t::handled > &&old_holder, store_agent_state_name_t data_to_store)
A helper operator to create a tigger that stores the name of the current agent's state.
environment_params_t make_special_params(outliving_reference_t< testing_env_t::internals_t > internals, environment_params_t &¶ms)
void setup_special_queue_hook(outliving_reference_t< testing_env_t::internals_t > internals, environment_params_t &to)
environment_params_t make_tuned_params(so_5::generic_simple_so_env_params_tuner_t env_params_tuner)
queue_mode_t
A mode of work for special_event_queue.
@ direct
All messages should go to the original queue without buffering.
@ buffer
All messages must be stored locally.
scenario_result_t completed()
Create a value that means that scenario completed successfuly.
details::receives_indicator_t< Msg > receives()
Helper function to be used for a trigger that receives a message/singal from a mbox.
details::trigger_source_t< details::incident_status_t::ignored > ignores()
Define a trigger that activates when an agent rejects a message from the direct mbox.
scenario_status_t
Status of testing scenario.
@ completed
Testing scenario is successfuly completed.
details::constraint_unique_ptr_t not_after(std::chrono::steady_clock::duration pause)
Create a constraint not-after.
details::store_msg_inspection_result_t inspect_msg(std::string tag, Lambda &&inspector)
Create a special marker for a trigger for inspecting an incoming message and storing the inspection r...
details::store_agent_state_name_t store_state_name(std::string tag)
Create a special marker for a trigger for storing agent's state name inside scenario.
details::trigger_source_t< details::incident_status_t::handled > reacts_to()
Define a trigger that activates when an agent receives and handles a message from the direct mbox.
details::trigger_source_t< details::incident_status_t::handled > reacts_to(const so_5::mbox_t &mbox)
Define a trigger that activates when an agent receives and handles a message from the specific mbox.
details::constraint_unique_ptr_t not_before(std::chrono::steady_clock::duration pause)
Create a constraint not-before.
details::trigger_source_t< details::incident_status_t::ignored > ignores(const so_5::mbox_t &mbox)
Define a trigger that activates when an agent rejects a message from the direct mbox.
details::wait_event_handler_completion_t wait_event_handler_completion()
Create a special marker for a trigger that requires waiting for completion of an event handler.
Details of SObjectizer run-time implementations.
void ensure_not_null(const delivery_filter_unique_ptr_t &ptr)
Helper function that throws if a pointer to delivery_filter is null.
void add_to_closer(Closer &to, std::size_t index, mchain_t ch, Tail &&... tail)
Helper for filling auto_closer object.
void add_to_closer(Closer &to, std::size_t index, mchain_t ch)
Helper for filling auto_closer object.
bool is_infinite_wait_timevalue(duration_t v)
Is time value means 'infinite_wait'?
void fill_select_cases_holder(extensible_select_cases_holder_t &holder, select_case_unique_ptr_t c, Cases &&... other_cases)
mchain_select_result_t perform_select(const mchain_select_params_t< msg_count_status_t::defined > ¶ms, const Cases_Holder &cases_holder)
Helper function with implementation of main select action.
prepared_select_status_t
The current status of prepared-select instance.
@ passive
Prepared-select instance is not used in select() call.
@ active
Prepared-select instance is used in select() call now.
void fill_select_cases_holder(Holder &holder, std::size_t index, select_case_unique_ptr_t c, Cases &&... other_cases)
mchain_select_result_t do_adv_select_without_total_time(const mchain_select_params_t< msg_count_status_t::defined > ¶ms, const Holder &select_cases)
extensible_select_status_t
The current status of extensible-select instance.
@ passive
Extensible-select instance is not used in select() call.
@ active
Extensible-select instance is used in select() call now.
void fill_select_cases_holder(Holder &holder, std::size_t index, select_case_unique_ptr_t c)
mchain_select_result_t do_adv_select_with_total_time(const mchain_select_params_t< msg_count_status_t::defined > ¶ms, const Holder &select_cases)
void fill_select_cases_holder(extensible_select_cases_holder_t &)
Various properties and parameters of message chains.
close_mode_t
What to do with chain's content at close.
@ drop_content
All messages must be removed from chain.
overflow_reaction_t
What reaction must be performed on attempt to push new message to the full message chain.
msg_count_status_t
Status of limit for messages to be extracted/handled during a bulk operation on a mchain.
@ undefined
Message count limit is not set yet.
@ defined
Message count limit is set.
extraction_status_t
Result of extraction of message from a message chain.
@ msg_extracted
Message extracted successfully.
@ chain_closed
Message cannot be extracted because chain is closed.
@ no_messages
No available messages in the chain.
push_status_t
Result of attempt of pushing a message into a message chain.
@ not_stored
Message wasn't stored.
@ stored
Message stored into a message chain.
@ chain_closed
Message wasn't stored because chain is closed.
memory_usage_t
Memory allocation for storage for size-limited chains.
insertion_it_with_auto_erase_if_not_committed_t(C &, const K &) -> insertion_it_with_auto_erase_if_not_committed_t< C >
void ensure_valid_argument_for_delivery_filter()
Helper to have more information in compiler output if static_assert fails.
void add_to_joiner(Joiner &to, std::size_t index, std::thread &t)
Helper for filling auto_joiner object.
void add_to_joiner(Joiner &to, std::size_t index, std::thread &t, Tail &&... tail)
Helper for filling auto_joiner object.
init_style_t
Style of handling init-functor in the constructor of wrapped_env.
Private part of message limit implementation.
mchain_t create_mchain(environment_t &env, std::size_t max_size, mchain_props::memory_usage_t memory_usage, mchain_props::overflow_reaction_t overflow_reaction)
Create size-limited chain without waiting on overflow.
void launch(Init_Routine &&init_routine)
Launch a SObjectizer Environment with default parameters.
mchain_t create_mchain(wrapped_env_t &sobj)
Create size-unlimited chain.
thread_auto_join_details::auto_joiner_t< 1+sizeof...(Tail) > auto_join(std::thread &first_thread, Tail &&... tail)
Helper function for creation of automatic joiner of std::threads.
auto make_coop_reg_notificator(mbox_t target) noexcept
Create notificator about cooperation registration completion.
mchain_auto_close_details::auto_closer_t< sizeof...(Tail) > auto_close_drop_content(Tail &&... tail)
Helper function for automatic closing of mchains with dropping their content.
const int rc_scenario_must_be_completed
Testing scenario must be completed before an attempt to do the current operation.
const int rc_extensible_select_is_active_now
An attempt to modify or activate extensible-select when an operation on that extensible-select object...
mchain_t create_mchain(environment_t &env)
Create size-unlimited chain.
void add_select_cases(extensible_select_t &extensible_select, Cases &&... cases)
Add a portion of cases to extensible-select instance.
mchain_select_params_t< mchain_props::msg_count_status_t::undefined > from_all()
Helper function for creation of mchain_select_params instance with default values.
mchain_t create_mchain(environment_t &env, mchain_props::duration_t waiting_time, std::size_t max_size, mchain_props::memory_usage_t memory_usage, mchain_props::overflow_reaction_t overflow_reaction)
Create size-limited chain with waiting on overflow.
mchain_select_result_t select(const mchain_select_params_t< Msg_Count_Status > ¶ms, Cases &&... cases)
An advanced form of multi chain select.
mchain_params_t make_unlimited_mchain_params()
Create parameters for size-unlimited mchain.
const int rc_stored_msg_inspection_result_not_found
There is no stored msg inspection result in the testing scenario.
@ user_type_message
Message is an user type message.
@ enveloped_msg
Message is an envelope with some other message inside.
mchain_auto_close_details::auto_closer_t< sizeof...(Tail) > auto_close_retain_content(Tail &&... tail)
Helper function for automatic closing of mchains with retaining their content.
constexpr terminate_if_throws_t terminate_if_throws
Value that indicates that an exception leads to the termination of the whole application.
mchain_select_result_t select(const extensible_select_t &extensible_select)
A select operation to be done on previously prepared extensible-select object.
const int rc_stored_state_name_not_found
There is no stored state name in the testing scenario.
void send(Target &&to, Args &&... args)
A utility function for creating and delivering a message or a signal.
mchain_auto_close_details::auto_closer_t< sizeof...(Tail) > auto_close_mchains(mchain_props::close_mode_t close_mode, Tail &&... tail)
Helper function for creation of automatic closer of mchains.
const int rc_unable_to_define_new_step
New step can't be defined if testing scenario is already started or finished.
message_ownership_t
Type of ownership of a message instance inside message_holder.
mchain_props::select_case_unique_ptr_t receive_case(mchain_t chain, Handlers &&... handlers)
A helper for creation of select_case object for one multi chain select.
mchain_t create_mchain(wrapped_env_t &sobj, mchain_props::duration_t waiting_time, std::size_t max_size, mchain_props::memory_usage_t memory_usage, mchain_props::overflow_reaction_t overflow_reaction)
Create size-limited chain without waiting on overflow.
mchain_props::select_case_unique_ptr_t send_case(mchain_t chain, message_holder_t< Msg, Ownership > msg, On_Success_Handler &&handler)
A helper for creation of select_case object for one send-case of a multi chain select.
mchain_select_result_t select(const prepared_select_t< Cases_Count > &prepared)
A select operation to be done on previously prepared select params.
auto make_coop_dereg_notificator(mbox_t target) noexcept
Create notificator about cooperation deregistration completion.
mchain_t create_mchain(wrapped_env_t &sobj, std::size_t max_size, mchain_props::memory_usage_t memory_usage, mchain_props::overflow_reaction_t overflow_reaction)
Create size-limited chain without waiting on overflow.
outliving_reference_t< T > outliving_mutable(T &r)
Make outliving_reference wrapper for mutable reference.
void launch(Init_Routine &&init_routine, Params_Tuner &¶ms_tuner)
Launch a SObjectizer Environment with explicitely specified parameters.
mchain_params_t make_limited_without_waiting_mchain_params(std::size_t max_size, mchain_props::memory_usage_t memory_usage, mchain_props::overflow_reaction_t overflow_reaction)
Create parameters for size-limited mchain without waiting on overflow.
mchain_params_t make_limited_with_waiting_mchain_params(std::size_t max_size, mchain_props::memory_usage_t memory_usage, mchain_props::overflow_reaction_t overflow_reaction, mchain_props::duration_t wait_timeout)
Create parameters for size-limited mchain with waiting on overflow.
prepared_select_t< sizeof...(Cases) > prepare_select(mchain_select_params_t< Msg_Count_Status > params, Cases &&... cases)
Create prepared select statement to be used later.
A selector of actual lock_holder type in dependency of lock type.
A description of event execution demand.
mbox_id_t m_mbox_id
ID of mbox.
demand_handler_pfn_t m_demand_handler
Demand handler.
agent_t * m_receiver
Receiver of demand.
message_ref_t m_message_ref
Event incident.
std::type_index m_msg_type
Type of the message.
const agent_t * m_agent
Target of an event.
const std::type_index m_msg_type
Type of message or signal.
incident_info_t(const agent_t *agent, const std::type_index &msg_type, mbox_id_t src_mbox_id)
mbox_id_t m_src_mbox_id
ID of mbox from that message/signal was received.
catcher_info_t(const agent_t *target_agent)
Initializing constructor.
const agent_t * m_target_agent
Pointer to the agent.
Special indicator to be used in implementation of receives trigger.
A special data object for case of store-state-name completion action.
std::string m_tag
Name of tag for store-state-name action.
A special data object for case when a message inspector has to be used on an incoming message.
std::function< std::string(const message_ref_t &) > m_inspector
Inspector for a message.
std::string m_tag
Name of a tag for store-msg-inspection action.
Description of context on that an attempt to activate a trigger is performing.
const scenario_in_progress_accessor_t & m_scenario_accessor
Access to the running scenario.
abstract_scenario_step_t & m_step
The current step for that activation is being performed.
const message_ref_t & m_incoming_msg
Incoming message or signal.
Description of context on that a trigger is completed.
abstract_scenario_step_t & m_step
const scenario_in_progress_accessor_t & m_scenario_accessor
std::type_index m_msg_type
trigger_source_t(std::type_index msg_type)
optional< mbox_id_t > m_src_mbox_id
trigger_source_t(std::type_index msg_type, mbox_id_t src_mbox_id)
A special data object for case when a step should be completed only after returning from the event ha...
A helper object for synchronization between helper worker where testing environment is launched and u...
std::promise< void > m_completed
Internal data for testing environment.
impl::init_completed_data_t m_init_completed
impl::special_event_queue_hook_t m_special_hook
details::real_scenario_t m_scenario
static std::unique_ptr< internals_t > make()
Helper class to be used as a comparator for msinks.
Description of one demand in message chain.
A helper class for detection of payload type of message.
Message about cooperation deregistration completion.
msg_coop_deregistered(coop_handle_t coop, coop_dereg_reason_t reason) noexcept
msg_coop_deregistered & operator=(const msg_coop_deregistered &)=delete
msg_coop_deregistered(const msg_coop_deregistered &)=delete
msg_coop_deregistered & operator=(msg_coop_deregistered &&)=delete
msg_coop_deregistered(msg_coop_deregistered &&)=delete
const coop_handle_t m_coop
const coop_dereg_reason_t m_reason
Message about cooperation registration completion.
msg_coop_registered & operator=(msg_coop_registered &&)=delete
msg_coop_registered(const msg_coop_registered &)=delete
msg_coop_registered(coop_handle_t coop) noexcept
const coop_handle_t m_coop
msg_coop_registered & operator=(const msg_coop_registered &)=delete
msg_coop_registered(msg_coop_registered &&)=delete
binding_info_t(const mbox_t &source, const std::type_index &msg_type, const msink_t &sink_owner, delivery_filter_unique_ptr_t delivery_filter) noexcept
std::type_index m_msg_type
Type of message/signal.
msink_t m_sink_owner
The destination for messages/signals.
mbox_t m_source
The source mbox.
delivery_filter_unique_ptr_t m_delivery_filter
Optional delivery filter.
Helper metafunction to check delivery filter lambda.
Implementation details for wrapped_env.