public InterfaceTransform( NamingRulesManager namingRules, Logger logger, GlobalNamespaceProvider globalNamespace, ITransformPreparer <CppMethod, CsMethod> methodPreparer, ITransformer <CsMethod> methodTransformer, TypeRegistry typeRegistry, NamespaceRegistry namespaceRegistry) : base(namingRules, logger) { MethodPreparer = methodPreparer; MethodTransformer = methodTransformer; this.typeRegistry = typeRegistry; this.namespaceRegistry = namespaceRegistry; propertyBuilder = new PropertyBuilder(globalNamespace); methodOverloadBuilder = new MethodOverloadBuilder(globalNamespace, typeRegistry); CppObjectType = new CsInterface { Name = globalNamespace.GetTypeName(WellKnownName.CppObject) }; DefaultCallbackable = new CsInterface { Name = globalNamespace.GetTypeName(WellKnownName.ICallbackable), ShadowName = globalNamespace.GetTypeName(WellKnownName.CppObjectShadow), VtblName = globalNamespace.GetTypeName(WellKnownName.CppObjectVtbl) }; }
/// <summary> /// Prepares a transformer from C++ to C# model. /// </summary> /// <typeparam name="TCppElement">The C++ type of data to process</typeparam> /// <param name="transform">The transform.</param> /// <param name="typeToProcess">The type to process.</param> private IEnumerable <TCsElement> PrepareTransform <TCppElement, TCsElement>(CppModule cppModule, ITransformPreparer <TCppElement, TCsElement> transform) where TCppElement : CppElement where TCsElement : CsBase { var csElements = new List <TCsElement>(); // Predefine all structs, typedefs and interfaces foreach (var cppInclude in cppModule.Includes) { foreach (var cppItem in cppInclude.Iterate <TCppElement>()) { Logger.RunInContext( cppItem.ToString(), () => { // If already mapped, it means that there is already a predefined mapping if (typeRegistry.FindBoundType(cppItem.Name) == null) { var csElement = transform.Prepare(cppItem); if (csElement != null) { csElements.Add(csElement); } } }); } } return(csElements); }