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; } } } } }
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)); }