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"
64 [[nodiscard]]
static inline std::chrono::nanoseconds
65 delta(std::chrono::high_resolution_clock::time_point
const& t) {
68 return duration_cast<std::chrono::nanoseconds>(high_resolution_clock::now()
95 using time_point = std::chrono::high_resolution_clock::time_point;
186 _report_time_interval = val;
208 template <
typename Time>
223 return _report_time_interval;
252 _start_time = _last_report;
329 [[nodiscard]]
std::string const& report_divider() const noexcept {
333 void emit_divider() {
334 if (!_divider.empty()) {
396 detail::FunctionRef<bool(
void)> _stopper;
500 template <
typename Time>
524 template <
typename Func>
531 run_until(detail::FunctionRef<
bool(
void)>(func));
626 [[nodiscard]]
bool dead() const noexcept {
664 LIBSEMIGROUPS_ASSERT(_stopper.valid());
726 virtual void run_impl() = 0;
727 [[nodiscard]]
virtual bool finished_impl()
const = 0;
728 [[nodiscard]]
virtual bool success_impl()
const {
732 void set_state(
state stt)
const noexcept {
Collection of values related to reporting.
Definition runner.hpp:92
Reporter(Reporter &&that)
Default move constructor.
time_point last_report() const noexcept
Get the time point of the last report.
Definition runner.hpp:269
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:222
Reporter const & reset_start_time() const
Reset the start time (and last report) to now.
Definition runner.hpp:250
Reporter & report_every(Time t) noexcept
Set the minimum elapsed time between reports in a unit of time other than nanoseconds.
Definition runner.hpp:209
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:286
std::chrono::high_resolution_clock::time_point time_point
Alias for std::chrono::high_resolution_clock::time_point.
Definition runner.hpp:95
std::string const & report_prefix() const noexcept
Get the current prefix string for reporting.
Definition runner.hpp:320
Reporter & report_prefix(std::string const &val)
Set the prefix string for reporting.
Definition runner.hpp:303
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:65
Reporter()
Default constructor.
Reporter(Reporter const &that)
Default copy constructor.
std::chrono::nanoseconds nanoseconds
Alias for std::chrono::nanoseconds.
Definition runner.hpp:97
Reporter & report_every(nanoseconds val) noexcept
Set the minimum elapsed time between reports in nanoseconds.
Definition runner.hpp:184
time_point start_time() const noexcept
Get the start time.
Definition runner.hpp:238
void run()
Run until finished.
bool started() const noexcept
Check if run has been called at least once before.
Definition runner.hpp:578
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:530
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:640
bool dead() const noexcept
Check if the runner is dead.
Definition runner.hpp:626
void run_for(Time t)
Run for a specified amount of time.
Definition runner.hpp:501
Runner()
Default constructor.
bool running_until() const noexcept
Check if the runner is currently running until a nullary predicate returns true.
Definition runner.hpp:705
Runner & operator=(Runner const &other)
Copy assignment operator.
virtual bool success() const
Check if run has been run to completion successfully.
Definition runner.hpp:562
Runner(Runner &&other)
Move constructor.
Runner & init()
Initialize an existing Runner object.
bool running() const noexcept
Check if currently running.
Definition runner.hpp:594
bool timed_out() const
Check if the amount of time passed to run_for has elapsed.
Definition runner.hpp:513
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:362
@ running_for
Definition runner.hpp:371
@ not_running
Definition runner.hpp:384
@ timed_out
Definition runner.hpp:377
@ stopped_by_predicate
Definition runner.hpp:380
@ running_to_finish
Definition runner.hpp:368
@ never_run
Definition runner.hpp:365
@ running_until
Definition runner.hpp:374
@ dead
Indicates that the Runner was killed (by another thread).
Definition runner.hpp:386
state current_state() const noexcept
Return the current state.
Definition runner.hpp:721
bool running_for() const noexcept
Check if the runner is currently running for a particular length of time.
Definition runner.hpp:686
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:662
void kill() noexcept
Stop run from running (thread-safe).
Definition runner.hpp:610
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:79
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:146