- /* Physical models MUST be resolved first */
- XBT_DEBUG("Looking for next event in physical models");
- double next_event_phy = surf_host_model->next_occurring_event(NOW);
- if ((time_delta < 0.0 || next_event_phy < time_delta) && next_event_phy >= 0.0) {
- time_delta = next_event_phy;
- }
- if (surf_vm_model != nullptr) {
- XBT_DEBUG("Looking for next event in virtual models");
- double next_event_virt = surf_vm_model->next_occurring_event(NOW);
- if ((time_delta < 0.0 || next_event_virt < time_delta) && next_event_virt >= 0.0)
- time_delta = next_event_virt;
- }
-
- for (auto const& model : all_existing_models) {
- if (model != surf_host_model && model != surf_vm_model && model != surf_network_model &&
- model != surf_storage_model && model != surf_disk_model) {
- double next_event_model = model->next_occurring_event(NOW);
- if ((time_delta < 0.0 || next_event_model < time_delta) && next_event_model >= 0.0)
- time_delta = next_event_model;
+ XBT_DEBUG("Looking for next event in all models");
+ auto engine = simgrid::kernel::EngineImpl::get_instance();
+ for (auto model : engine->get_all_models()) {
+ if (not model->next_occurring_event_is_idempotent()) {
+ continue;
+ }
+ double next_event = model->next_occurring_event(NOW);
+ if ((time_delta < 0.0 || next_event < time_delta) && next_event >= 0.0) {
+ time_delta = next_event;