/// <summary> /// Maps all C++ types to C# /// </summary> /// <param name="cppModule">The C++ module to parse.</param> /// <param name="configFile">The config file to use to transform the C++ module into C# assemblies.</param> /// <param name="checkFilesPath">The path for the check files.</param> public (CsSolution solution, IEnumerable <DefineExtensionRule> consumerExtensions) Transform(CppModule cppModule, ConfigFile configFile, string checkFilesPath) { Init(configFile.ConfigFilesLoaded); var checkFileNodes = CheckIfUpdated(configFile.ConfigFilesLoaded, checkFilesPath); var moduleToTransform = MapModule(cppModule, configFile.ConfigFilesLoaded.Where(cfg => cfg.ProcessMappings)); var selectedCSharpType = new List <CsBase>(); // Prepare transform by defining/registering all types to process selectedCSharpType.AddRange(PrepareTransform(moduleToTransform, EnumTransform)); selectedCSharpType.AddRange(PrepareTransform(moduleToTransform, StructTransform)); selectedCSharpType.AddRange(PrepareTransform(moduleToTransform, InterfaceTransform)); selectedCSharpType.AddRange(PrepareTransform <CppFunction, CsFunction>(moduleToTransform, FunctionTransform)); // Transform all types Logger.Progress(65, "Transforming enums..."); ProcessTransform(EnumTransform, selectedCSharpType.OfType <CsEnum>()); Logger.Progress(70, "Transforming structs..."); ProcessTransform(StructTransform, selectedCSharpType.OfType <CsStruct>()); Logger.Progress(75, "Transforming interfaces..."); ProcessTransform(InterfaceTransform, selectedCSharpType.OfType <CsInterface>()); Logger.Progress(80, "Transforming functions..."); ProcessTransform(FunctionTransform, selectedCSharpType.OfType <CsFunction>()); var solution = new CsSolution(); foreach (CsAssembly cSharpAssembly in assemblyManager.Assemblies) { foreach (var ns in cSharpAssembly.Namespaces) { foreach (var cSharpFunctionGroup in ns.Classes) { constantManager.AttachConstants(cSharpFunctionGroup); } } solution.Add(cSharpAssembly); if (checkFileNodes.TryGetValue(cSharpAssembly.Name, out var node)) { cSharpAssembly.NeedsToBeUpdated = node.NeedsToBeUpdated; } } return(solution, configFile.ConfigFilesLoaded.SelectMany(file => file.Extension.OfType <DefineExtensionRule>())); }
/// <summary> /// Maps all C++ types to C# /// </summary> /// <param name="cppModule">The C++ module to parse.</param> /// <param name="configFile">The config file to use to transform the C++ module into C# assemblies.</param> /// <param name="checkFilesPath">The path for the check files.</param> public (CsAssembly assembly, IEnumerable <DefineExtensionRule> consumerExtensions) Transform(CppModule cppModule, ConfigFile configFile, string checkFilesPath) { Init(configFile.ConfigFilesLoaded); var checkFileNodes = CheckIfUpdated(configFile.ConfigFilesLoaded, checkFilesPath); var moduleToTransform = MapModule(cppModule, configFile.ConfigFilesLoaded.Where(cfg => cfg.ProcessMappings)); var selectedCSharpType = new List <CsBase>(); // Prepare transform by defining/registering all types to process selectedCSharpType.AddRange(PrepareTransform(moduleToTransform, EnumTransform)); selectedCSharpType.AddRange(PrepareTransform(moduleToTransform, StructTransform)); selectedCSharpType.AddRange(PrepareTransform(moduleToTransform, InterfaceTransform)); selectedCSharpType.AddRange(PrepareTransform <CppFunction, CsFunction>(moduleToTransform, FunctionTransform)); // Transform all types Logger.Progress(65, "Transforming enums..."); ProcessTransform(EnumTransform, selectedCSharpType.OfType <CsEnum>()); Logger.Progress(70, "Transforming structs..."); ProcessTransform(StructTransform, selectedCSharpType.OfType <CsStruct>()); Logger.Progress(75, "Transforming interfaces..."); ProcessTransform(InterfaceTransform, selectedCSharpType.OfType <CsInterface>()); Logger.Progress(80, "Transforming functions..."); ProcessTransform(FunctionTransform, selectedCSharpType.OfType <CsFunction>()); var asm = new CsAssembly { Interop = interopManager }; foreach (var ns in namespaceRegistry.Namespaces) { foreach (var group in ns.Classes) { constantManager.AttachConstants(group); } asm.Add(ns); } return(asm, configFile.ConfigFilesLoaded.SelectMany(file => file.Extension.OfType <DefineExtensionRule>())); }