/// <summary> /// Deep-Equal boolean operation for inputs of any atomic type. /// </summary> /// <param name="one"> /// input1 xpath expression/variable. </param> /// <param name="two"> /// input2 xpath expression/variable. </param> /// <returns> Result of fn:deep-equal operation. </returns> public static bool deep_equal_atomic(AnyAtomicType one, AnyAtomicType two, DynamicContext context, string collationURI) { if (!(one is CmpEq)) { return(false); } if (!(two is CmpEq)) { return(false); } CmpEq a = (CmpEq)one; try { if (isNumeric(one, two)) { NumericType numeric = (NumericType)one; if (numeric.eq(two, context)) { return(true); } else { XSString value1 = new XSString(one.StringValue); if (value1.eq(two, context)) { return(true); } } } if (a.eq(two, context)) { return(true); } if (needsStringComparison(one, two)) { XSString xstr1 = new XSString(one.StringValue); XSString xstr2 = new XSString(two.StringValue); if (FnCompare.compare_string(collationURI, xstr1, xstr2, context).Equals(System.Numerics.BigInteger.Zero)) { return(true); } } return(false); } catch (DynamicError) { return(false); // XXX ??? } }
/// <summary> /// A fast Equality operation, no conversion for the inputs performed. /// </summary> /// <param name="one"> /// input1 of any type. </param> /// <param name="two"> /// input2 of any type. </param> /// <exception cref="DynamicError"> /// Dynamic error. </exception> /// <returns> Result of Equality operation. </returns> public static bool fs_eq_fast(AnyType one, AnyType two, DynamicContext context) { one = FnData.atomize((Item)one); two = FnData.atomize((Item)two); if (one is XSUntypedAtomic) { one = new XSString(one.StringValue); } if (two is XSUntypedAtomic) { two = new XSString(two.StringValue); } if (!(one is CmpEq)) { DynamicError.throw_type_error(); } CmpEq cmpone = (CmpEq)one; return(cmpone.eq(two, context)); }