2
3
6
7
8
9
10
11
13#include <so_5/wrapped_env.hpp>
15#include <so_5/details/invoke_noexcept_code.hpp>
17#include <condition_variable>
30
31
32
33
34
41 so_5::generic_simple_init_t init,
59 std::lock_guard< std::mutex > lock{ m_status_lock };
61 m_status_cond.notify_all();
78 bool should_stop =
false;
81 std::lock_guard< std::mutex > lock{ m_status_lock };
85 should_stop =
static_cast<
bool>( m_exception_from_init_functor );
88 m_status_cond.notify_all();
101
102
103
104
105
106
107
108
109
110
111
112
113
118
119
120
121
122 std::unique_lock< std::mutex > lock{ m_status_lock };
125 m_status_cond.wait( lock,
126 [
this]{
return status_t::not_started != m_status; } );
135 m_status_cond.wait( lock, [
this]{
136 return status_t::init_functor_completed == m_status;
142 if( m_exception_from_init_functor )
144 std::rethrow_exception(
145 std::move( m_exception_from_init_functor ) );
156
157
180
181
182
183
184
185
186
187
188
189
190
191
192
196
197
198
199
200
201
209
210
211
212
213
214
225 std::lock_guard< std::mutex > lock{ m_status_lock };
226 m_exception_from_init_functor = std::current_exception();
234
235
236
237
238
249 so_5::generic_simple_init_t init_func,
266 m_env_thread = std::thread{ [
this]{ m_env.run(); } };
270 m_env.ensure_started();
282 if( m_env_thread.joinable() ) m_env_thread.join();
295 return std::unique_ptr< wrapped_env_t::details_t >(
296 new wrapped_env_t::details_t{
297 std::move( init_func ),
307 return std::move( params );
321 so_5::generic_simple_init_t init_func,
339 so_5::generic_simple_init_t init_func )
346 so_5::generic_simple_init_t init_func,
347 so_5::generic_simple_so_env_params_tuner_t params_tuner )
354 so_5::generic_simple_init_t init_func,
364 so_5::generic_simple_init_t init_func )
373 so_5::generic_simple_init_t init_func,
383 so_5::generic_simple_init_t init_func,
384 so_5::generic_simple_so_env_params_tuner_t params_tuner )
406 return m_impl->m_env;
Implementation of environment to be used inside wrapped_env.
status_t m_status
Status of environment.
const init_style_t m_init_style
Style of initialization (asynchronous or synchronous).
void ensure_started()
Wait for change of the status.
actual_environment_t(so_5::generic_simple_init_t init, environment_params_t &&env_params, init_style_t init_style)
Initializing constructor.
std::exception_ptr m_exception_from_init_functor
Exception from init-functor.
void call_init_functor_sync_style() noexcept
Helper for calling init-functor in synchronous mode.
status_t
Status of environment.
@ started
init() is called and is about to call init-functor.
@ init_functor_completed
init-functor completed its work.
@ not_started
init() is not called yet.
void init() override
Initialization hook.
std::condition_variable m_status_cond
Condition for waiting on status.
so_5::generic_simple_init_t m_init
Initialization routine.
void call_init_functor_async_style()
Helper for calling init-functor in asynchronous mode.
std::mutex m_status_lock
Lock object for defending status.
Parameters for the SObjectizer Environment initialization.
environment_params_t & disable_autoshutdown()
Do not shutdown SO Environment when it is becomes empty.
void stop() noexcept
Send a shutdown signal to the Run-Time.
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(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()
Default constructor.
~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.
environment_params_t make_params_via_tuner(so_5::generic_simple_so_env_params_tuner_t tuner)
environment_params_t make_necessary_tuning(environment_params_t &¶ms)
std::unique_ptr< wrapped_env_t::details_t > make_details_object(so_5::generic_simple_init_t init_func, environment_params_t &¶ms, init_style_t init_style)
Some reusable and low-level classes/functions which can be used in public header files.
init_style_t
Style of handling init-functor in the constructor of wrapped_env.
Private part of message limit implementation.
Implementation details for wrapped_env.
std::thread m_env_thread
Helper thread for calling run method.
details_t(so_5::generic_simple_init_t init_func, environment_params_t &¶ms, init_style_t init_style)
Initializing constructor.
actual_environment_t m_env
Actual environment object.