55class SIMO_PUBLIC Context {
57 enum struct State : uint8_t {
65 enum struct RunStatus : uint8_t {
86 std::expected<RunStatus, InitializationStatus>
run(
const Time& time_delta);
91 std::expected<RunStatus, InitializationStatus>
run_at(
const Time& final_time);
94 void schedule_at(
const Time& time_target,
const SimulationCallable& callable);
97 const std::function<
void()>& callable);
100 void schedule_in(
const Time& time_delta,
const SimulationCallable& callable);
103 const std::function<
void()>& callable);
108 template <
typename T>
112 return parameters.add<T>(name, value);
121 void remove(
const Module& module);
123 template <
typename Function>
124 void foreach_module(Function f)
const {
125 for (
const auto& module : modules | std::views::keys) {
130 [[nodiscard]] State get_state()
const;
131 [[nodiscard]] Time current_time()
const;
134 State state{State::INITIALIZATION};
135 Time currentTime = Time::zero;
136 std::unique_ptr<Internal::RadixHeap> nextTickHeap;
137 std::unordered_map<Time, std::vector<SimulationCallable>> scheduledTasks;
139 Parameter::ParameterTrie parameters;
141 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:110