+
+void NetZoneImpl::seal()
+{
+ /* already sealed netzone */
+ if (sealed_)
+ return;
+ do_seal(); // derived class' specific sealing procedure
+
+ /* seals sub-netzones and hosts */
+ for (auto* host : get_all_hosts()) {
+ host->seal();
+ }
+ for (auto* sub_net : get_children()) {
+ sub_net->seal();
+ }
+ sealed_ = true;
+}
+
+void NetZoneImpl::set_parent(NetZoneImpl* parent)
+{
+ xbt_assert(not sealed_, "Impossible to set parent to an already sealed NetZone(%s)", this->get_cname());
+ parent_ = parent;
+ netpoint_->set_englobing_zone(parent_);
+ if (parent) {
+ /* adding this class as child */
+ parent->add_child(this);
+ /* copying models from parent host, to be reviewed when we allow multi-models */
+ set_network_model(parent->get_network_model());
+ set_cpu_pm_model(parent->get_cpu_pm_model());
+ set_cpu_vm_model(parent->get_cpu_vm_model());
+ set_disk_model(parent->get_disk_model());
+ set_host_model(parent->get_host_model());
+ }
+}
+
+void NetZoneImpl::set_network_model(std::shared_ptr<resource::NetworkModel> netmodel)
+{
+ xbt_assert(not sealed_, "Impossible to set network model to an already sealed NetZone(%s)", this->get_cname());
+ network_model_ = std::move(netmodel);
+}
+
+void NetZoneImpl::set_cpu_vm_model(std::shared_ptr<resource::CpuModel> cpu_model)
+{
+ xbt_assert(not sealed_, "Impossible to set CPU model to an already sealed NetZone(%s)", this->get_cname());
+ cpu_model_vm_ = std::move(cpu_model);
+}
+
+void NetZoneImpl::set_cpu_pm_model(std::shared_ptr<resource::CpuModel> cpu_model)
+{
+ xbt_assert(not sealed_, "Impossible to set CPU model to an already sealed NetZone(%s)", this->get_cname());
+ cpu_model_pm_ = std::move(cpu_model);
+}
+
+void NetZoneImpl::set_disk_model(std::shared_ptr<resource::DiskModel> disk_model)
+{
+ xbt_assert(not sealed_, "Impossible to set disk model to an already sealed NetZone(%s)", this->get_cname());
+ disk_model_ = std::move(disk_model);