23#ifndef LIBSEMIGROUPS_RUNNER_HPP_
24#define LIBSEMIGROUPS_RUNNER_HPP_
43#include "detail/function-ref.hpp"
44#include "detail/report.hpp"
45#include "detail/string.hpp"
69 [[nodiscard]]
static inline std::chrono::nanoseconds
70 delta(std::chrono::high_resolution_clock::time_point
const& t) {
73 return duration_cast<std::chrono::nanoseconds>(high_resolution_clock::now()
100 using time_point = std::chrono::high_resolution_clock::time_point;
193 _report_time_interval = val;
217 template <
typename Time>
219#pragma GCC diagnostic push
220#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
222#pragma GCC diagnostic pop
237 return _report_time_interval;
266 _start_time = _last_report;
379 if (!_divider.empty()) {
441 detail::FunctionRef<bool(
void)> _stopper;
545 template <
typename Time>
569 template <
typename Func>
576 run_until(detail::FunctionRef<
bool(
void)>(func));
674 [[nodiscard]]
bool dead() const noexcept {
712 LIBSEMIGROUPS_ASSERT(_stopper.valid());
792 virtual void run_impl() = 0;
793 [[nodiscard]]
virtual bool finished_impl()
const = 0;
795 void set_state(
state stt)
const noexcept {
Reporter(Reporter &&that)
Default move constructor.
time_point last_report() const noexcept
Get the time point of the last report.
Definition runner.hpp:283
std::string const & report_divider() const noexcept
Get the current divider string for reporting.
Definition runner.hpp:367
bool report() const
Check if it is time to report.
Reporter & operator=(Reporter &&that)
Default move assignment operator.
nanoseconds report_every() const noexcept
Get the minimum elapsed time between reports.
Definition runner.hpp:236
Reporter const & reset_start_time() const
Reset the start time (and last report) to now.
Definition runner.hpp:264
Reporter & report_every(Time t) noexcept
Set the minimum elapsed time between reports in a unit of time other than nanoseconds.
Definition runner.hpp:218
Reporter & init()
Initialize an existing Reporter object.
Reporter & operator=(Reporter const &that)
Default copy assignment operator.
Reporter const & reset_last_report() const
Set the last report time point to now.
Definition runner.hpp:300
std::chrono::high_resolution_clock::time_point time_point
Alias for std::chrono::high_resolution_clock::time_point.
Definition runner.hpp:100
std::string const & report_prefix() const noexcept
Get the current prefix string for reporting.
Definition runner.hpp:334
Reporter & report_prefix(std::string const &val)
Set the prefix string for reporting.
Definition runner.hpp:317
static std::chrono::nanoseconds delta(std::chrono::high_resolution_clock::time_point const &t)
The time between a given point and now.
Definition runner.hpp:70
void emit_divider()
Emits the current divider string for reporting.
Definition runner.hpp:378
Reporter()
Default constructor.
Reporter(Reporter const &that)
Default copy constructor.
std::chrono::nanoseconds nanoseconds
Alias for std::chrono::nanoseconds.
Definition runner.hpp:102
Reporter & report_every(nanoseconds val) noexcept
Set the minimum elapsed time between reports in nanoseconds.
Definition runner.hpp:191
time_point start_time() const noexcept
Get the start time.
Definition runner.hpp:252
Reporter & report_divider(std::string const &val)
Set the divider string for reporting.
Definition runner.hpp:350
void run()
Run until finished.
bool started() const noexcept
Check if run has been called at least once before.
Definition runner.hpp:626
void run_until(Func &&func)
Run until a nullary predicate returns true or finished.
void run_until(bool(*func)())
Run until a nullary predicate returns true or finished.
Definition runner.hpp:575
Runner & operator=(Runner &&other)
Move assignment operator.
void report_why_we_stopped() const
Report why run stopped.
bool stopped() const
Check if the runner is stopped.
Definition runner.hpp:688
bool dead() const noexcept
Check if the runner is dead.
Definition runner.hpp:674
void run_for(Time t)
Run for a specified amount of time.
Definition runner.hpp:546
Runner()
Default constructor.
bool running_until() const noexcept
Check if the runner is currently running until a nullary predicate returns true.
Definition runner.hpp:771
Runner & operator=(Runner const &other)
Copy assignment operator.
virtual bool success() const
Check if run has been run to completion successfully.
Definition runner.hpp:610
Runner(Runner &&other)
Move constructor.
std::chrono::nanoseconds running_for_how_long() const noexcept
Return the last value passed to run_for.
Definition runner.hpp:752
Runner & init()
Initialize an existing Runner object.
bool running() const noexcept
Check if currently running.
Definition runner.hpp:642
bool timed_out() const
Check if the amount of time passed to run_for has elapsed.
Definition runner.hpp:558
void run_for(std::chrono::nanoseconds t)
Run for a specified amount of time.
state
Enum class for the state of the Runner.
Definition runner.hpp:407
@ running_for
Definition runner.hpp:416
@ not_running
Definition runner.hpp:429
@ timed_out
Definition runner.hpp:422
@ stopped_by_predicate
Definition runner.hpp:425
@ running_to_finish
Definition runner.hpp:413
@ never_run
Definition runner.hpp:410
@ running_until
Definition runner.hpp:419
@ dead
Indicates that the Runner was killed (by another thread).
Definition runner.hpp:431
state current_state() const noexcept
Return the current state.
Definition runner.hpp:787
bool running_for() const noexcept
Check if the runner is currently running for a particular length of time.
Definition runner.hpp:734
bool finished() const
Check if run has been run to completion or not.
bool stopped_by_predicate() const
Check if the runner was stopped, or should stop, because of the argument last passed to run_until.
Definition runner.hpp:710
void kill() noexcept
Stop run from running (thread-safe).
Definition runner.hpp:658
Runner(Runner const &other)
Copy constructor.
T duration_cast(T... args)
constexpr std::chrono::nanoseconds FOREVER
Value indicating forever (system dependent but possibly approx. 292 years).
Definition runner.hpp:84
Namespace for everything in the libsemigroups library.
Definition action.hpp:44
void report_no_prefix(std::string_view sv, Args &&... args)
No doc.
Definition report.hpp:181