+ return count;
+}
+
+simgrid::s4u::Host* NetZoneImpl::create_host(const char* name, const std::vector<double>& speed_per_pstate,
+ int coreAmount, const std::map<std::string, std::string>* props)
+{
+ simgrid::s4u::Host* res = new simgrid::s4u::Host(name);
+
+ if (hierarchy_ == RoutingMode::unset)
+ hierarchy_ = RoutingMode::base;
+
+ res->pimpl_netpoint = new NetPoint(name, NetPoint::Type::Host, this);
+
+ surf_cpu_model_pm->create_cpu(res, speed_per_pstate, coreAmount);
+
+ if (props != nullptr)
+ res->set_properties(*props);
+
+ simgrid::s4u::Host::on_creation(*res); // notify the signal
+
+ return res;
+}
+
+int NetZoneImpl::add_component(kernel::routing::NetPoint* elm)
+{
+ vertices_.push_back(elm);
+ return vertices_.size() - 1; // The rank of the newly created object
+}
+void NetZoneImpl::add_route(kernel::routing::NetPoint* /*src*/, kernel::routing::NetPoint* /*dst*/,
+ kernel::routing::NetPoint* /*gw_src*/, kernel::routing::NetPoint* /*gw_dst*/,
+ std::vector<kernel::resource::LinkImpl*>& /*link_list*/, bool /*symmetrical*/)
+{
+ xbt_die("NetZone '%s' does not accept new routes (wrong class).", get_cname());
+}
+
+void NetZoneImpl::add_bypass_route(NetPoint* src, NetPoint* dst, NetPoint* gw_src, NetPoint* gw_dst,
+ std::vector<resource::LinkImpl*>& link_list, bool /* symmetrical */)
+{
+ /* Argument validity checks */
+ if (gw_dst) {
+ XBT_DEBUG("Load bypassNetzoneRoute from %s@%s to %s@%s", src->get_cname(), gw_src->get_cname(), dst->get_cname(),
+ gw_dst->get_cname());
+ xbt_assert(not link_list.empty(), "Bypass route between %s@%s and %s@%s cannot be empty.", src->get_cname(),
+ gw_src->get_cname(), dst->get_cname(), gw_dst->get_cname());
+ xbt_assert(bypass_routes_.find({src, dst}) == bypass_routes_.end(),
+ "The bypass route between %s@%s and %s@%s already exists.", src->get_cname(), gw_src->get_cname(),
+ dst->get_cname(), gw_dst->get_cname());
+ } else {
+ XBT_DEBUG("Load bypassRoute from %s to %s", src->get_cname(), dst->get_cname());
+ xbt_assert(not link_list.empty(), "Bypass route between %s and %s cannot be empty.", src->get_cname(),
+ dst->get_cname());
+ xbt_assert(bypass_routes_.find({src, dst}) == bypass_routes_.end(),
+ "The bypass route between %s and %s already exists.", src->get_cname(), dst->get_cname());