public bool FindTypeMap(string name, out TypeMap typeMap) { if (string.IsNullOrWhiteSpace(name)) { typeMap = null; return false; } System.Type type; TypeMaps.TryGetValue(name, out type); if (type == null) { typeMap = null; return false; } typeMap = (TypeMap)Activator.CreateInstance(type); typeMap.TypeMapDatabase = this; return true; }
public bool FindTypeMapRecursive(Type type, out TypeMap typeMap) { while (true) { if (FindTypeMap(type, out typeMap)) return true; var desugaredType = type.Desugar(); if (desugaredType == type) return false; type = desugaredType; } }
public bool FindTypeMap(Type type, out TypeMap typeMap) { var typePrinter = new CppTypePrinter(this); var template = type as TemplateSpecializationType; if (template != null) return FindTypeMap(template.Template.TemplatedDecl, type, out typeMap); if (FindTypeMap(type.Visit(typePrinter), out typeMap)) { typeMap.Type = type; return true; } typePrinter.PrintKind = CppTypePrintKind.Qualified; if (FindTypeMap(type.Visit(typePrinter), out typeMap)) { typeMap.Type = type; return true; } return false; }
public bool FindTypeMap(Declaration decl, out TypeMap typeMap) { return FindTypeMap(decl, null, out typeMap); }
private static bool FindTypeMap(ITypeMapDatabase typeMapDatabase, Class @class, out TypeMap typeMap) { return typeMapDatabase.FindTypeMap(@class, out typeMap) || (@class.HasBase && FindTypeMap(typeMapDatabase, @class.Bases[0].Class, out typeMap)); }
public bool FindTypeMap(Declaration decl, Type type, out TypeMap typeMap) { // We try to find type maps from the most qualified to less qualified // types. Example: '::std::vector', 'std::vector' and 'vector' var typePrinter = new CppTypePrinter(this) { PrintKind = CppTypePrintKind.GlobalQualified }; if (FindTypeMap(decl.Visit(typePrinter), out typeMap)) { typeMap.Type = type; return true; } typePrinter.PrintKind = CppTypePrintKind.Qualified; if (FindTypeMap(decl.Visit(typePrinter), out typeMap)) { typeMap.Type = type; return true; } typePrinter.PrintKind = CppTypePrintKind.Local; if (FindTypeMap(decl.Visit(typePrinter), out typeMap)) { typeMap.Type = type; return true; } return false; }
public bool FindTypeMap(Declaration decl, Type type, out TypeMap typeMap) { // We try to find type maps from the most qualified to less qualified // types. Example: '::std::vector', 'std::vector' and 'vector' var typePrinter = new CppTypePrinter { PrintLogicalNames = true }; if (FindTypeMap(decl.Visit(typePrinter), out typeMap)) { typeMap.Type = type; return true; } typePrinter.PrintScopeKind = CppTypePrintScopeKind.Qualified; if (FindTypeMap(decl.Visit(typePrinter), out typeMap)) { typeMap.Type = type; return true; } typePrinter.PrintScopeKind = CppTypePrintScopeKind.Local; if (FindTypeMap(decl.Visit(typePrinter), out typeMap)) { typeMap.Type = type; return true; } var specialization = decl as ClassTemplateSpecialization; if (specialization != null && FindTypeMap(specialization.TemplatedDecl.Visit(typePrinter), out typeMap)) { typeMap.Type = type; return true; } var typedef = decl as TypedefDecl; return typedef != null && FindTypeMap(typedef.Type, out typeMap); }
public bool FindTypeMap(Type type, out TypeMap typeMap) { var typePrinter = new CppTypePrinter { PrintTypeQualifiers = false, PrintTypeModifiers = false, PrintLogicalNames = true }; var template = type as TemplateSpecializationType; if (template != null) { var specialization = template.GetClassTemplateSpecialization(); if (specialization != null && FindTypeMap(specialization, type, out typeMap)) return true; if (template.Template.TemplatedDecl != null) return FindTypeMap(template.Template.TemplatedDecl, type, out typeMap); } if (FindTypeMap(type.Visit(typePrinter), out typeMap)) { typeMap.Type = type; return true; } if (FindTypeMap(type.Visit(typePrinter), out typeMap)) { typeMap.Type = type; return true; } typePrinter.PrintScopeKind = CppTypePrintScopeKind.Qualified; if (FindTypeMap(type.Visit(typePrinter), out typeMap)) { typeMap.Type = type; return true; } var typedef = type as TypedefType; return typedef != null && FindTypeMap(typedef.Declaration, type, out typeMap); }
public bool FindTypeMap(Declaration decl, out TypeMap typeMap) { return(FindTypeMap(decl, null, out typeMap)); }
public bool FindTypeMap(Type type, out TypeMap typeMap) { if (typeMaps.ContainsKey(type)) { typeMap = typeMaps[type]; return(typeMap.IsEnabled); } var template = type as TemplateSpecializationType; if (template != null) { var specialization = template.GetClassTemplateSpecialization(); if (specialization != null && FindTypeMap(specialization, out typeMap)) { return(true); } if (template.Template.TemplatedDecl != null) { if (FindTypeMap(template.Template.TemplatedDecl, out typeMap)) { typeMap.Type = type; return(true); } return(false); } } Type desugared = type.Desugar(); desugared = (desugared.GetFinalPointee() ?? desugared).Desugar(); bool printExtra = desugared.IsPrimitiveType() || (desugared.GetFinalPointee() ?? desugared).Desugar().IsPrimitiveType(); var typePrinter = new CppTypePrinter { PrintTypeQualifiers = printExtra, PrintTypeModifiers = printExtra, PrintLogicalNames = true }; foreach (var resolveTypeDefs in new[] { true, false }) { foreach (var typePrintScopeKind in new[] { TypePrintScopeKind.Local, TypePrintScopeKind.Qualified }) { typePrinter.ResolveTypedefs = resolveTypeDefs; typePrinter.ScopeKind = typePrintScopeKind; if (FindTypeMap(type.Visit(typePrinter), out typeMap)) { typeMap.Type = type; typeMaps[type] = typeMap; return(true); } } } typeMap = null; var typedef = type as TypedefType; return(typedef != null && FindTypeMap(typedef.Declaration.Type, out typeMap)); }
private bool FindTypeMap(string name, out TypeMap typeMap) => TypeMaps.TryGetValue(name, out typeMap) && typeMap.IsEnabled;
public bool FindTypeMap(Declaration declaration, out TypeMap typeMap) => FindTypeMap(new TagType(declaration), out typeMap);
public bool FindTypeMap(Declaration decl, out TypeMap typeMap) { return(FindTypeMap(decl.QualifiedOriginalName, out typeMap)); }