private static IEnumerable <XmlNode> GetMemberNodes(XmlNode node) { return(node.SelectNodes(Xml.MemberDefinitionSelector).OfType <XmlNode>().Where(childNode => childNode.Attributes[Xml.Protection].Value == Xml.Public && (Xml.GetKind(childNode) == Xml.Function || Xml.GetKind(childNode) == Xml.Variable))); }
private static Element GetElement(XmlNode node) { string fullType = Xml.GetType(node); List <string> tokens = new List <string>(fullType.Split(' ')); bool isConstant = false; int index = tokens.IndexOf("const"); if (index != -1) { isConstant = true; tokens.RemoveAt(index); } bool isReference = false; index = tokens.IndexOf("&"); if (index != -1) { isReference = true; tokens.RemoveAt(index); } bool isRawPointer = false; index = tokens.IndexOf("*"); if (index != -1) { isRawPointer = true; tokens.RemoveAt(index); } bool isSharedPointer = false; bool isUniquePointer = false; string typeString = ""; foreach (string token in tokens.Where(token => !token.IsNullOrEmpty())) { if (c_ignoredQualifiers.Contains(token)) { continue; } if (token == "std::unique_ptr<") { isUniquePointer = true; continue; } if (token == "std::shared_ptr<") { isSharedPointer = true; continue; } typeString = token; break; } Type type = GetType(typeString); string unresolvedTypeInfo = type == Type.Unresolved ? typeString : string.Empty; return(new Element(type, unresolvedTypeInfo, isConstant, isRawPointer, isReference, isSharedPointer, isUniquePointer)); }
private static void ProcessFunction(ApiContainer apiContainer, XmlNode memberNode, string namespaceName, bool isClassMember) { List <NamedElement> parameters = new List <NamedElement>(); foreach (XmlNode parameterNode in memberNode.SelectNodes(Xml.Param)) { parameters.Add(GetNamedElement(parameterNode)); } Element returnType = GetElement(memberNode); string name = Xml.GetName(memberNode); bool isConstructor = apiContainer is Class classDefinition && classDefinition.Name == name; apiContainer.Functions.Add(new Function(Xml.GetId(memberNode), namespaceName, name, returnType, Xml.GetIsConstant(memberNode), isConstructor, Xml.GetIsStatic(memberNode), isClassMember, parameters.AsReadOnly())); }