ObjectType Module::specifyLocally(const ObjectType& parent) const { auto it = _specializers.find(const_cast<ObjectTypeTemplate*>(&parent.typeTemplate())); if (it == _specializers.end()) { return ObjectType(); } ObjectType type = it->second.specialize(parent); if (!type.isNull()) { type.importParameters(parent); } return type; }
ObjectType Module::specifyLocally(const ObjectType& parent) const { ObjectType type; ObjectType rangeBegin(parent.typeTemplate()); for(SpecificationMap::const_iterator it = _automaticSpecifications.lower_bound(&rangeBegin); it != _automaticSpecifications.end() && it->first->typeTemplate() == parent.typeTemplate(); ++it) { if(parent.extendsDirectly(*(it->first))) { type = it->second; type.importParameters(parent); break; } } return type; }