return res;
}
+std::vector<Host*> Engine::get_filtered_hosts(std::function<bool(Host*)> filter)
+{
+ std::vector<Host*> hosts;
+ for (auto const& kv : pimpl->hosts_) {
+ if (filter(kv.second))
+ hosts.push_back(kv.second);
+ }
+
+ return hosts;
+}
+
void Engine::host_register(std::string name, simgrid::s4u::Host* host)
{
pimpl->hosts_[name] = host;
{
return pimpl->netzone_root_;
}
+/** @brief Set the root netzone, containing all others. Once set, it cannot be changed. */
+void Engine::set_netzone_root(s4u::NetZone* netzone)
+{
+ xbt_assert(pimpl->netzone_root_ == nullptr, "The root NetZone cannot be changed once set");
+ pimpl->netzone_root_ = static_cast<kernel::routing::NetZoneImpl*>(netzone);
+}
static s4u::NetZone* netzone_by_name_recursive(s4u::NetZone* current, const char* name)
{
/** @brief Register a new netpoint to the system */
void Engine::netpoint_register(simgrid::kernel::routing::NetPoint* point)
{
- // simgrid::simix::kernelImmediate([&]{ FIXME: this segfaults in set_thread
+ // simgrid::simix::simcall([&]{ FIXME: this segfaults in set_thread
pimpl->netpoints_[point->get_name()] = point;
// });
}
/** @brief Unregister a given netpoint */
void Engine::netpoint_unregister(simgrid::kernel::routing::NetPoint* point)
{
- simgrid::simix::kernelImmediate([this, point] {
+ simgrid::simix::simcall([this, point] {
pimpl->netpoints_.erase(point->get_name());
delete point;
});