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