- if (name == nullptr){
- THROWF (tracing_error, 0, "can't create a link type with a nullptr name");
- }
-
- char key[INSTR_DEFAULT_STR_SIZE];
- snprintf(key, INSTR_DEFAULT_STR_SIZE, "%s-%s-%s", name, source->id_, dest->id_);
- Type* ret = new Type(name, key, nullptr, TYPE_LINK, father);
- XBT_DEBUG("LinkType %s(%s), child of %s(%s) %s(%s)->%s(%s)", ret->name_, ret->id_, father->name_, father->id_,
- source->name_, source->id_, dest->name_, dest->id_);
- LogLinkTypeDefinition(ret, source, dest);
- return ret;
+ std::string alias = name + "-" + source->id_ + "-" + dest->id_;
+ auto it = children_.find(alias);
+ if (it == children_.end()) {
+ Type* ret = new Type(name, alias, "", TYPE_LINK, this);
+ XBT_DEBUG("LinkType %s(%s), child of %s(%s) %s(%s)->%s(%s)", ret->getCname(), ret->getId(), getCname(), getId(),
+ source->getCname(), source->getId(), dest->getCname(), dest->getId());
+ ret->logLinkTypeDefinition(source, dest);
+ return ret;
+ } else
+ return it->second;