- ret = newType (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;
+VariableType* Type::getOrCreateVariableType(std::string name, std::string color)
+{
+ auto cont = children_.find(name);
+ std::string mycolor = color.empty() ? "1 1 1" : color;
+ return cont == children_.end() ? new VariableType(name, mycolor, this) : static_cast<VariableType*>(cont->second);
+}
+
+LinkType* Type::getOrCreateLinkType(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->getCname(), ret->getId(), getCname(),
+ getId(), source->getCname(), source->getId(), dest->getCname(), dest->getId());
+ ret->logDefinition(source, dest);
+ return ret;
+ } else
+ return static_cast<LinkType*>(it->second);
+}
+}