- Type* ret = new 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;
+VariableType* Type::by_name_or_create(const std::string& name, const 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.get());
+}
+
+LinkType* Type::by_name_or_create(const std::string& name, const Type* source, const 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()) {
+ return new LinkType(name, source, dest, alias, this);
+ } else
+ return static_cast<LinkType*>(it->second.get());