- ret = new s_type (name, name, nullptr, TYPE_STATE, father);
- XBT_DEBUG("StateType %s(%s), child of %s(%s)", ret->name, ret->id, father->name, father->id);
- LogStateTypeDefinition(ret);
- return ret;
+LinkType* Type::by_name_or_create(const std::string& name, Type* source, Type* dest)
+{
+ std::string alias = name + "-" + std::to_string(source->id_) + "-" + std::to_string(dest->id_);
+ auto it = children_.find(alias);
+ if (it == children_.end()) {
+ LinkType* ret = new LinkType(name, alias, this);
+ XBT_DEBUG("LinkType %s(%lld), child of %s(%lld) %s(%lld)->%s(%lld)", ret->get_cname(), ret->get_id(), get_cname(),
+ get_id(), source->get_cname(), source->get_id(), dest->get_cname(), dest->get_id());
+ ret->log_definition(source, dest);
+ return ret;
+ } else
+ return static_cast<LinkType*>(it->second.get());
+}
+}