示例#1
0
        public SchemaTypeBuilder(SchemaDocument document,
                                 ModuleBuilder moduleBuilder,
                                 SchemaBasicReaderBuilder basicBuilder)
        {
            Document = document;
            BasicTypeDescriptions = basicBuilder;

            CompoundTypes = document.Compounds
                            .ToDictionary(kvp => kvp.Value, kvp => BuildCompoundType(moduleBuilder, kvp.Value));
            NiObjectTypes = document.NiObjects
                            .ToDictionary(kvp => kvp.Value, kvp => BuildNiObjectType(moduleBuilder, kvp.Value));
            EnumTypes = document.Enums
                        .ToDictionary(kvp => kvp.Value, kvp => BuildEnumType(moduleBuilder, kvp.Value, document));
            BitFieldTypes = document.Bitfields
                            .ToDictionary(kvp => kvp.Value, kvp => BuildBitfieldType(moduleBuilder, kvp.Value));
            BitflagsTypes = document.Bitflags
                            .ToDictionary(kvp => kvp.Value, kvp => BuildBitflagType(moduleBuilder, kvp.Value, document));

            BuiltTypesByName = new List <(string, TypeBuilder)>()
                               .Concat(CompoundTypes.Select(kvp => (kvp.Key.Name, kvp.Value)))
                               .Concat(NiObjectTypes.Select(kvp => (kvp.Key.Name, kvp.Value)))
                               .Concat(BitFieldTypes.Select(kvp => (kvp.Key.Name, kvp.Value)))
                               .ToDictionary(pair => pair.Item1, pair => pair.Item2);
            BuiltEnumsByName = new List <(string, EnumBuilder)>()
                               .Concat(EnumTypes.Select(kvp => (kvp.Key.Name, kvp.Value)))
                               .Concat(BitflagsTypes.Select(kvp => (kvp.Key.Name, kvp.Value)))
                               .ToDictionary(pair => pair.Item1, pair => pair.Item2);

            SchemaTypesByName = new List <(string, Type)>()
                                .Concat(BasicTypeDescriptions.BasicDescriptions.Select(kvp => (kvp.Key.Name, kvp.Value.UnderlyingType)))
                                .Concat(BuiltTypesByName.Select(kvp => (kvp.Key, kvp.Value as Type)))
                                .Concat(BuiltEnumsByName.Select(kvp => (kvp.Key, kvp.Value as Type)))
                                .ToDictionary(pair => pair.Item1, pair => pair.Item2);
            TemplateTypeByName = CompoundTypes
                                 .ToDictionary(c => c.Key.Name, c => BuildTemplateType(c.Value, c.Key));
        }