54class SIMO_PUBLIC Context {
56 enum struct State : uint8_t {
64 enum struct RunStatus : uint8_t {
85 std::expected<RunStatus, InitializationStatus>
run(
const Time& time_delta);
90 std::expected<RunStatus, InitializationStatus>
run_at(
const Time& final_time);
93 void schedule_at(
const Time& time_target,
const SimulationCallable& callable);
96 const std::function<
void()>& callable);
99 void schedule_in(
const Time& time_delta,
const SimulationCallable& callable);
102 const std::function<
void()>& callable);
107 template <
typename T>
111 return parameters.add<T>(name, value);
120 void remove(
const Module& module);
122 template <
typename Function>
123 void foreach_module(Function f)
const {
124 for (
const auto& module : modules | std::views::keys) {
129 [[nodiscard]] State get_state()
const;
130 [[nodiscard]] Time current_time()
const;
133 State state{State::INITIALIZATION};
134 Time currentTime = Time::zero;
135 std::unique_ptr<Internal::RadixHeap> nextTickHeap;
136 std::unordered_map<Time, std::vector<SimulationCallable>> scheduledTasks;
138 Parameter::ParameterTrie parameters;
140 std::vector<std::pair<Module*, Parameters*>> modules;
void schedule_at(const Time &time_target, const SimulationCallable &callable)
Schedule event at time_target time.
Definition Context.cc:76
std::expected< RunStatus, InitializationStatus > run(const Time &time_delta)
Definition Context.cc:41
InitializationStatus initialize()
Definition Context.cc:16
void schedule_in(const Time &time_delta, const SimulationCallable &callable)
Schedule an event for time current_time + time_delta.
Definition Context.cc:94
std::expected< RunStatus, InitializationStatus > run_at(const Time &final_time)
Definition Context.cc:47
Parameter::ParameterTyped< T > & add_parameter(const std::string &name, const T &value)
Add parameter of specific type. Return reference to parameter.
Definition Context.h:109