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