Beispiel #1
0
        /// <summary>
        /// Verify whether the FunctionElement instance is unique in a set of FunctionElement instance.
        /// </summary>
        /// <param name="functionElement">A FunctionElement instance.</param>
        /// <param name="functionElements">A set of FunctionElement instances.</param>
        /// <param name="type">The type of verified parameter type (Distinguish with an unordered set Of parameter names and an ordered set of parameter types.).</param>
        /// <returns>Returns the verification result.</returns>
        public static bool Unique(FunctionElement functionElement, IEnumerable <FunctionElement> functionElements, VerifiedParamType type)
        {
            int counter = 0;

            foreach (var functionElem in functionElements)
            {
                if (functionElement.name != functionElem.name)
                {
                    continue;
                }

                if (functionElement.isBound != functionElem.isBound)
                {
                    continue;
                }

                if (functionElement.bindingParamName != functionElem.bindingParamName)
                {
                    continue;
                }

                if (functionElement.parameters.Count != functionElem.parameters.Count)
                {
                    continue;
                }

                // Verify the unordered set of non-binding parameter names and the ordered set of parameter types.
                bool flag = true;
                for (int i = 0; i < functionElement.parameters.Count; i++)
                {
                    if (type == VerifiedParamType.UnorderedSetOfParamNames || type == VerifiedParamType.All)
                    {
                        if (!functionElem.parameters.Contains(functionElement.parameters[i]))
                        {
                            flag = false;
                            break;
                        }
                    }

                    if (type == VerifiedParamType.OrderedSetOfParamTypes || type == VerifiedParamType.All)
                    {
                        if (functionElement.parameters[i] != functionElem.parameters[i])
                        {
                            flag = false;
                            break;
                        }
                    }
                }

                if (!flag)
                {
                    continue;
                }

                if (functionElement.returnType != functionElem.returnType)
                {
                    continue;
                }

                counter++;
            }

            return(counter == 1);
        }
        /// <summary>
        /// Verify whether the FunctionElement instance is unique in a set of FunctionElement instance.
        /// </summary>
        /// <param name="functionElement">A FunctionElement instance.</param>
        /// <param name="functionElements">A set of FunctionElement instances.</param>
        /// <param name="type">The type of verified parameter type (Distinguish with an unordered set Of parameter names and an ordered set of parameter types.).</param>
        /// <returns>Returns the verification result.</returns>
        public static bool Unique(FunctionElement functionElement, IEnumerable<FunctionElement> functionElements, VerifiedParamType type)
        {
            int counter = 0;
            foreach (var functionElem in functionElements)
            {
                if (functionElement.name != functionElem.name)
                {
                    continue;
                }

                if (functionElement.isBound != functionElem.isBound)
                {
                    continue;
                }

                if (functionElement.bindingParamName != functionElem.bindingParamName)
                {
                    continue;
                }

                if (functionElement.parameters.Count != functionElem.parameters.Count)
                {
                    continue;
                }

                // Verify the unordered set of non-binding parameter names and the ordered set of parameter types.
                bool flag = true;
                for (int i = 0; i < functionElement.parameters.Count; i++)
                {
                    if (type == VerifiedParamType.UnorderedSetOfParamNames || type == VerifiedParamType.All)
                    {
                        if (!functionElem.parameters.Contains(functionElement.parameters[i]))
                        {
                            flag = false;
                            break;
                        }
                    }

                    if (type == VerifiedParamType.OrderedSetOfParamTypes || type == VerifiedParamType.All)
                    {
                        if (functionElement.parameters[i] != functionElem.parameters[i])
                        {
                            flag = false;
                            break;
                        }
                    }
                }

                if (!flag)
                {
                    continue;
                }

                if (functionElement.returnType != functionElem.returnType)
                {
                    continue;
                }

                counter++;
            }

            return counter == 1;
        }
Beispiel #3
0
        /// <summary>
        /// Parse an element with XElement type to a FunctionElement instance.
        /// </summary>
        /// <param name="xElem">An element with XElement type.</param>
        /// <returns>Returns a FunctionElement instance.</returns>
        public static FunctionElement Parse(XElement xElem)
        {
            if (null == xElem && "Function" == xElem.Name.LocalName)
            {
                return(null);
            }

            string           name             = string.Empty;
            bool             isBound          = false;
            string           bindingParamName = string.Empty;
            List <Parameter> parameters       = new List <Parameter>();
            string           returnType       = string.Empty;

            if (null != xElem.Attribute("Name"))
            {
                name = xElem.GetAttributeValue("Name");
            }

            if (null != xElem.Attribute("IsBound"))
            {
                isBound = Convert.ToBoolean(xElem.GetAttributeValue("IsBound"));
            }

            string xPath      = "./*[local-name()='Parameter']";
            var    paramElems = xElem.XPathSelectElements(xPath, ODataNamespaceManager.Instance);

            if (null != paramElems && paramElems.Any())
            {
                bool once = true;
                foreach (var paramElem in paramElems)
                {
                    if (isBound && once)
                    {
                        once = false;
                        if (null != paramElem.Attribute("Name"))
                        {
                            bindingParamName = paramElem.GetAttributeValue("Name");
                        }

                        continue;
                    }

                    if (null != paramElem.Attribute("Name") && null != paramElem.Attribute("Type"))
                    {
                        var parameter = new Parameter(paramElem.GetAttributeValue("Name"), paramElem.GetAttributeValue("Type"));
                        parameters.Add(parameter);
                    }
                }
            }

            xPath = "./*[local-name()='ReturnType']";
            var returnTypeElem = xElem.XPathSelectElement(xPath, ODataNamespaceManager.Instance);

            if (null != returnTypeElem && null != returnTypeElem.Attribute("Type"))
            {
                returnType = returnTypeElem.GetAttributeValue("Type");
            }

            var functionElement = new FunctionElement(name, isBound, bindingParamName, parameters, returnType);

            return(functionElement);
        }
        /// <summary>
        /// Parse an element with XElement type to a FunctionElement instance.
        /// </summary>
        /// <param name="xElem">An element with XElement type.</param>
        /// <returns>Returns a FunctionElement instance.</returns>
        public static FunctionElement Parse(XElement xElem)
        {
            if (null == xElem && "Function" == xElem.Name.LocalName)
            {
                return null;
            }

            string name = string.Empty;
            bool isBound = false;
            string bindingParamName = string.Empty;
            List<Parameter> parameters = new List<Parameter>();
            string returnType = string.Empty;

            if (null != xElem.Attribute("Name"))
            {
                name = xElem.GetAttributeValue("Name");
            }

            if (null != xElem.Attribute("IsBound"))
            {
                isBound = Convert.ToBoolean(xElem.GetAttributeValue("IsBound"));
            }

            string xPath = "./*[local-name()='Parameter']";
            var paramElems = xElem.XPathSelectElements(xPath, ODataNamespaceManager.Instance);
            if (null != paramElems && paramElems.Any())
            {
                bool once = true;
                foreach (var paramElem in paramElems)
                {
                    if (isBound && once)
                    {
                        once = false;
                        if (null != paramElem.Attribute("Name"))
                        {
                            bindingParamName = paramElem.GetAttributeValue("Name");
                        }

                        continue;
                    }

                    if (null != paramElem.Attribute("Name") && null != paramElem.Attribute("Type"))
                    {
                        var parameter = new Parameter(paramElem.GetAttributeValue("Name"), paramElem.GetAttributeValue("Type"));
                        parameters.Add(parameter);
                    }
                }
            }

            xPath = "./*[local-name()='ReturnType']";
            var returnTypeElem = xElem.XPathSelectElement(xPath, ODataNamespaceManager.Instance);
            if (null != returnTypeElem && null != returnTypeElem.Attribute("Type"))
            {
                returnType = returnTypeElem.GetAttributeValue("Type");
            }

            var functionElement = new FunctionElement(name, isBound, bindingParamName, parameters, returnType);

            return functionElement;
        }