コード例 #1
0
        public void LoadPart(IGLSpecification context, XElement root)
        {
            var basicTypes = context.BasicTypes;
            var types      = root.Elements("types");

            foreach (var tps in types)
            {
                foreach (var t in tps.Elements("type"))
                {
                    var typeDef = t.GetXmlText();

                    var multiTypeDefs = PreprocessRegion(context, typeDef);
                    if (multiTypeDefs == null)
                    {
                        continue;
                    }
                    foreach (var(region, condition) in multiTypeDefs)
                    {
                        if (!ExtractTypeDef(region, out typeDef, out var typeName))
                        {
                            continue;
                        }
                        var basicType = new GLTypeDef(typeName, new GLTypeReference(context, typeDef));

                        switch (condition)
                        {
                        case "TRUE":
                            basicTypes.Add(typeName, basicType);
                            break;

                        case "FALSE":
                            break;

                        default:
                            AddConditionalTypeDef(context, basicType, condition);
                            break;
                        }
                    }
                }
            }
        }
コード例 #2
0
        private static void AddConditionalTypeDef(IGLSpecification context, GLTypeDef basicType, string condition)
        {
            var basicTypes = context.BasicTypes;
            GLConditionalTypeDef conditionalTypeDef;

            if (basicTypes.TryGetValue(basicType.Name, out var alreadyExisting))
            {
                conditionalTypeDef = alreadyExisting as GLConditionalTypeDef;
                if (conditionalTypeDef == null)
                {
                    throw new KeyNotFoundException();
                }
            }
            else
            {
                conditionalTypeDef = new GLConditionalTypeDef(basicType.Name);

                basicTypes.Add(basicType.Name, conditionalTypeDef);
            }

            conditionalTypeDef.TypeRefs.Add(new GLConditionalTypeDef.ConditionalTypeRef(basicType, condition));
        }