コード例 #1
0
        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)
            };
        }
コード例 #2
0
        /// <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);
        }