NetZoneImpl::NetZoneImpl(const std::string& name) : piface_(this), name_(name)
{
+ auto* engine = s4u::Engine::get_instance();
/* workaroud: first netzoneImpl will be the root netzone.
* Without globals and with current surf_*_model_description init functions, we need
* the root netzone to exist when creating the models.
* This was usually done at sg_platf.cpp, during XML parsing */
- if (not s4u::Engine::get_instance()->get_netzone_root()) {
- s4u::Engine::get_instance()->set_netzone_root(&piface_);
+ if (not engine->get_netzone_root()) {
+ engine->set_netzone_root(&piface_);
/* root netzone set, initialize models */
simgrid::s4u::Engine::on_platform_creation();
surf_config_models_setup();
}
- xbt_assert(nullptr == s4u::Engine::get_instance()->netpoint_by_name_or_null(get_name()),
+ xbt_assert(nullptr == engine->netpoint_by_name_or_null(get_name()),
"Refusing to create a second NetZone called '%s'.", get_cname());
netpoint_ = new NetPoint(name_, NetPoint::Type::NetZone);
- XBT_DEBUG("NetZone '%s' created with the id '%u'", get_cname(), netpoint_->id());
+ XBT_DEBUG("NetZone '%s' created with the id '%lu'", get_cname(), netpoint_->id());
_sg_cfg_init_status = 2; /* HACK: direct access to the global controlling the level of configuration to prevent
* any further config now that we created some real content */
simgrid::s4u::NetZone::on_creation(piface_); // notify the signal
void NetZoneImpl::add_child(NetZoneImpl* new_zone)
{
xbt_assert(not sealed_, "Cannot add a new child to the sealed zone %s", get_cname());
- /* set the father behavior */
+ /* set the parent behavior */
hierarchy_ = RoutingMode::recursive;
children_.push_back(new_zone);
}
return (new NetPoint(name, NetPoint::Type::Router))->set_englobing_zone(this);
}
-int NetZoneImpl::add_component(NetPoint* elm)
+
+unsigned long NetZoneImpl::add_component(NetPoint* elm)
{
vertices_.push_back(elm);
return vertices_.size() - 1; // The rank of the newly created object
std::vector<resource::LinkImpl*> links;
for (const auto& link : link_list) {
+ if (link.get_link()->get_sharing_policy() != s4u::Link::SharingPolicy::SPLITDUPLEX) {
+ links.push_back(link.get_link()->get_impl());
+ continue;
+ }
+ // split-duplex links
+ const auto* sd_link = dynamic_cast<const s4u::SplitDuplexLink*>(link.get_link());
+ xbt_assert(sd_link,
+ "Add_route: cast to SpliDuplexLink impossible. This should not happen, please contact SimGrid team");
resource::LinkImpl* link_impl;
- if (link.get_link()->get_sharing_policy() == s4u::Link::SharingPolicy::SPLITDUPLEX) {
- const auto* sd_link = dynamic_cast<const s4u::SplitDuplexLink*>(link.get_link());
- xbt_assert(sd_link,
- "Add_route: cast to SpliDuplexLink impossible. This should not happen, please contact SimGrid team");
- switch (link.get_direction()) {
- case s4u::LinkInRoute::Direction::UP:
- if (backroute)
- link_impl = sd_link->get_link_down()->get_impl();
- else
- link_impl = sd_link->get_link_up()->get_impl();
- break;
- case s4u::LinkInRoute::Direction::DOWN:
- if (backroute)
- link_impl = sd_link->get_link_up()->get_impl();
- else
- link_impl = sd_link->get_link_down()->get_impl();
- break;
- case s4u::LinkInRoute::Direction::NONE:
- default:
- throw std::invalid_argument("Invalid add_route. Split-Duplex link without a direction: " +
- link.get_link()->get_name());
- }
- } else {
- link_impl = link.get_link()->get_impl();
+ switch (link.get_direction()) {
+ case s4u::LinkInRoute::Direction::UP:
+ if (backroute)
+ link_impl = sd_link->get_link_down()->get_impl();
+ else
+ link_impl = sd_link->get_link_up()->get_impl();
+ break;
+ case s4u::LinkInRoute::Direction::DOWN:
+ if (backroute)
+ link_impl = sd_link->get_link_up()->get_impl();
+ else
+ link_impl = sd_link->get_link_down()->get_impl();
+ break;
+ default:
+ throw std::invalid_argument("Invalid add_route. Split-Duplex link without a direction: " +
+ link.get_link()->get_name());
}
links.push_back(link_impl);
}
current = current->get_parent();
}
- /* (3) find the common father.
+ /* (3) find the common parent.
* Before that, index_src and index_dst may be different, they both point to nullptr in path_src/path_dst
* So we move them down simultaneously as long as they point to the same content.
*
* This works because all SimGrid platform have a unique root element (that is the last element of both paths).
*/
- NetZoneImpl* father = nullptr; // the netzone we dropped on the previous loop iteration
+ NetZoneImpl* parent = nullptr; // the netzone we dropped on the previous loop iteration
while (path_src.size() > 1 && path_dst.size() > 1 && path_src.back() == path_dst.back()) {
- father = path_src.back();
+ parent = path_src.back();
path_src.pop_back();
path_dst.pop_back();
}
/* (4) we found the difference at least. Finalize the returned values */
- *src_ancestor = path_src.back(); /* the first different father of src */
- *dst_ancestor = path_dst.back(); /* the first different father of dst */
+ *src_ancestor = path_src.back(); /* the first different parent of src */
+ *dst_ancestor = path_dst.back(); /* the first different parent of dst */
if (*src_ancestor == *dst_ancestor) { // src is the ancestor of dst, or the contrary
*common_ancestor = *src_ancestor;
} else {
- xbt_assert(father != nullptr);
- *common_ancestor = father;
+ xbt_assert(parent != nullptr);
+ *common_ancestor = parent;
}
}
current = current->parent_;
}
- /* (2) find the common father */
+ /* (2) find the common parent */
while (path_src.size() > 1 && path_dst.size() > 1 && path_src.back() == path_dst.back()) {
path_src.pop_back();
path_dst.pop_back();
NetZoneImpl* src_ancestor;
NetZoneImpl* dst_ancestor;
find_common_ancestors(src, dst, &common_ancestor, &src_ancestor, &dst_ancestor);
- XBT_DEBUG("elements_father: common ancestor '%s' src ancestor '%s' dst ancestor '%s'", common_ancestor->get_cname(),
- src_ancestor->get_cname(), dst_ancestor->get_cname());
+ XBT_DEBUG("find_common_ancestors: common ancestor '%s' src ancestor '%s' dst ancestor '%s'",
+ common_ancestor->get_cname(), src_ancestor->get_cname(), dst_ancestor->get_cname());
netzones.insert(src->get_englobing_zone());
netzones.insert(dst->get_englobing_zone());