+const NetZoneImpl* NetZoneImpl::get_netzone_recursive(const NetPoint* netpoint) const
+{
+ xbt_assert(netpoint && netpoint->is_netzone(), "Netpoint %s must be of the type NetZone",
+ netpoint ? netpoint->get_cname() : "nullptr");
+
+ if (netpoint == netpoint_)
+ return this;
+
+ for (const auto* children : children_) {
+ const NetZoneImpl* netzone = children->get_netzone_recursive(netpoint);
+ if (netzone)
+ return netzone;
+ }
+ return nullptr;
+}
+
+bool NetZoneImpl::is_component_recursive(const NetPoint* netpoint) const
+{
+ /* check direct components */
+ if (std::any_of(begin(vertices_), end(vertices_), [netpoint](const auto* elem) { return elem == netpoint; }))
+ return true;
+
+ /* check childrens */
+ return std::any_of(begin(children_), end(children_),
+ [netpoint](const auto* child) { return child->is_component_recursive(netpoint); });
+}