\r
public static bool ValueEQ (XPathAtomicValue lvalue, XPathAtomicValue rvalue)\r
{\r
- switch (lvalue.XmlType.TypeCode) {\r
- case XmlTypeCode.Decimal:\r
- if (rvalue.XmlType.TypeCode == XmlTypeCode.Decimal)\r
- return lvalue.ValueAsDecimal == rvalue.ValueAsDecimal;\r
- goto case XmlTypeCode.Integer;\r
-\r
- // numerics\r
- case XmlTypeCode.Integer:\r
- case XmlTypeCode.Float:\r
- case XmlTypeCode.Double:\r
- switch (rvalue.XmlType.TypeCode) {\r
- case XmlTypeCode.Integer:\r
- case XmlTypeCode.Decimal:\r
- case XmlTypeCode.Float:\r
- case XmlTypeCode.Double:\r
- return lvalue.ValueAsDouble == rvalue.ValueAsDouble;\r
- }\r
- break;\r
-\r
- // FIXME: handle Gregorian (gXXX) types\r
+ if (lvalue.XmlType.TypeCode == XmlTypeCode.Decimal &&\r
+ rvalue.XmlType.TypeCode == XmlTypeCode.Decimal)\r
+ return lvalue.ValueAsDecimal == rvalue.ValueAsDecimal;\r
+ if (SequenceType.IsNumeric (lvalue.XmlType.TypeCode) &&\r
+ SequenceType.IsNumeric (lvalue.XmlType.TypeCode))\r
+ return lvalue.ValueAsDouble == rvalue.ValueAsDouble;\r
+ if (lvalue.XmlType.TypeCode == rvalue.XmlType.TypeCode)\r
+ return CompareEquality (lvalue, rvalue);\r
\r
- // other types\r
- default:\r
- if (lvalue.XmlType.TypeCode != rvalue.XmlType.TypeCode)\r
- return CompareEquality (lvalue, rvalue);\r
- break;\r
- }\r
throw new XmlQueryException (String.Format ("Not allowed value comparison between {0} and {1}.", lvalue.XmlType.QualifiedName, rvalue.XmlType.QualifiedName));\r
}\r
\r
public static bool ValueNE (XPathAtomicValue lvalue, XPathAtomicValue rvalue)\r
{\r
- switch (lvalue.XmlType.TypeCode) {\r
- case XmlTypeCode.Decimal:\r
- if (rvalue.XmlType.TypeCode == XmlTypeCode.Decimal)\r
- return lvalue.ValueAsDecimal != rvalue.ValueAsDecimal;\r
- goto case XmlTypeCode.Integer;\r
+ if (lvalue.XmlType.TypeCode == XmlTypeCode.Decimal &&\r
+ rvalue.XmlType.TypeCode == XmlTypeCode.Decimal)\r
+ return lvalue.ValueAsDecimal != rvalue.ValueAsDecimal;\r
+ if (SequenceType.IsNumeric (lvalue.XmlType.TypeCode) &&\r
+ SequenceType.IsNumeric (lvalue.XmlType.TypeCode))\r
+ return lvalue.ValueAsDouble != rvalue.ValueAsDouble;\r
+ if (lvalue.XmlType.TypeCode == rvalue.XmlType.TypeCode)\r
+ return !CompareEquality (lvalue, rvalue);\r
\r
- // numerics\r
- case XmlTypeCode.Integer:\r
- case XmlTypeCode.Float:\r
- case XmlTypeCode.Double:\r
- switch (rvalue.XmlType.TypeCode) {\r
- case XmlTypeCode.Integer:\r
- case XmlTypeCode.Decimal:\r
- case XmlTypeCode.Float:\r
- case XmlTypeCode.Double:\r
- return lvalue.ValueAsDouble != rvalue.ValueAsDouble;\r
- }\r
- break;\r
-\r
- // FIXME: handle Gregorian (gXXX) types\r
-\r
- // other types\r
- default:\r
- if (lvalue.XmlType.TypeCode != rvalue.XmlType.TypeCode)\r
- return !CompareEquality (lvalue, rvalue);\r
- break;\r
- }\r
throw new XmlQueryException (String.Format ("Not allowed value comparison between {0} and {1}.", lvalue.XmlType.QualifiedName, rvalue.XmlType.QualifiedName));\r
}\r
\r
\r
public static bool ValueLT (XPathAtomicValue lvalue, XPathAtomicValue rvalue)\r
{\r
- switch (lvalue.XmlType.TypeCode) {\r
- case XmlTypeCode.Decimal:\r
- if (rvalue.XmlType.TypeCode == XmlTypeCode.Decimal)\r
- return lvalue.ValueAsDecimal < rvalue.ValueAsDecimal;\r
- goto case XmlTypeCode.Integer;\r
-\r
- // numerics\r
- case XmlTypeCode.Integer:\r
- case XmlTypeCode.Float:\r
- case XmlTypeCode.Double:\r
- switch (rvalue.XmlType.TypeCode) {\r
- case XmlTypeCode.Integer:\r
- case XmlTypeCode.Decimal:\r
- case XmlTypeCode.Float:\r
- case XmlTypeCode.Double:\r
- return lvalue.ValueAsDouble < rvalue.ValueAsDouble;\r
- }\r
- break;\r
+ if (lvalue.XmlType.TypeCode == XmlTypeCode.Decimal &&\r
+ rvalue.XmlType.TypeCode == XmlTypeCode.Decimal)\r
+ return lvalue.ValueAsDecimal < rvalue.ValueAsDecimal;\r
+ if (SequenceType.IsNumeric (lvalue.XmlType.TypeCode) &&\r
+ SequenceType.IsNumeric (lvalue.XmlType.TypeCode))\r
+ return lvalue.ValueAsDouble < rvalue.ValueAsDouble;\r
+ if (lvalue.XmlType.TypeCode == rvalue.XmlType.TypeCode)\r
+ return CompareLT (lvalue, rvalue);\r
\r
- default:\r
- if (lvalue.XmlType.TypeCode != rvalue.XmlType.TypeCode)\r
- return CompareLT (lvalue, rvalue);\r
- break;\r
- }\r
throw new XmlQueryException (String.Format ("Not allowed value comparison between {0} and {1}.", lvalue.XmlType.QualifiedName, rvalue.XmlType.QualifiedName));\r
}\r
\r
\r
public static bool ValueLE (XPathAtomicValue lvalue, XPathAtomicValue rvalue)\r
{\r
- switch (lvalue.XmlType.TypeCode) {\r
- case XmlTypeCode.Decimal:\r
- if (rvalue.XmlType.TypeCode == XmlTypeCode.Decimal)\r
- return lvalue.ValueAsDecimal <= rvalue.ValueAsDecimal;\r
- goto case XmlTypeCode.Integer;\r
-\r
- // numerics\r
- case XmlTypeCode.Integer:\r
- case XmlTypeCode.Float:\r
- case XmlTypeCode.Double:\r
- switch (rvalue.XmlType.TypeCode) {\r
- case XmlTypeCode.Integer:\r
- case XmlTypeCode.Decimal:\r
- case XmlTypeCode.Float:\r
- case XmlTypeCode.Double:\r
- return lvalue.ValueAsDouble <= rvalue.ValueAsDouble;\r
- }\r
- break;\r
+ if (lvalue.XmlType.TypeCode == XmlTypeCode.Decimal &&\r
+ rvalue.XmlType.TypeCode == XmlTypeCode.Decimal)\r
+ return lvalue.ValueAsDecimal <= rvalue.ValueAsDecimal;\r
+ if (SequenceType.IsNumeric (lvalue.XmlType.TypeCode) &&\r
+ SequenceType.IsNumeric (lvalue.XmlType.TypeCode))\r
+ return lvalue.ValueAsDouble <= rvalue.ValueAsDouble;\r
+ if (lvalue.XmlType.TypeCode == rvalue.XmlType.TypeCode)\r
+ return CompareLE (lvalue, rvalue);\r
\r
- default:\r
- if (lvalue.XmlType.TypeCode != rvalue.XmlType.TypeCode)\r
- return CompareLE (lvalue, rvalue);\r
- break;\r
- }\r
throw new XmlQueryException (String.Format ("Not allowed value comparison between {0} and {1}.", lvalue.XmlType.QualifiedName, rvalue.XmlType.QualifiedName));\r
}\r
\r
\r
public static bool ValueGT (XPathAtomicValue lvalue, XPathAtomicValue rvalue)\r
{\r
- switch (lvalue.XmlType.TypeCode) {\r
- case XmlTypeCode.Decimal:\r
- if (rvalue.XmlType.TypeCode == XmlTypeCode.Decimal)\r
- return lvalue.ValueAsDecimal > rvalue.ValueAsDecimal;\r
- goto case XmlTypeCode.Integer;\r
+ if (lvalue.XmlType.TypeCode == XmlTypeCode.Decimal &&\r
+ rvalue.XmlType.TypeCode == XmlTypeCode.Decimal)\r
+ return lvalue.ValueAsDecimal > rvalue.ValueAsDecimal;\r
+ if (SequenceType.IsNumeric (lvalue.XmlType.TypeCode) &&\r
+ SequenceType.IsNumeric (lvalue.XmlType.TypeCode))\r
+ return lvalue.ValueAsDouble > rvalue.ValueAsDouble;\r
+ if (lvalue.XmlType.TypeCode == rvalue.XmlType.TypeCode)\r
+ return CompareGT (lvalue, rvalue);\r
\r
- // numerics\r
- case XmlTypeCode.Integer:\r
- case XmlTypeCode.Float:\r
- case XmlTypeCode.Double:\r
- switch (rvalue.XmlType.TypeCode) {\r
- case XmlTypeCode.Integer:\r
- case XmlTypeCode.Decimal:\r
- case XmlTypeCode.Float:\r
- case XmlTypeCode.Double:\r
- return lvalue.ValueAsDouble > rvalue.ValueAsDouble;\r
- }\r
- break;\r
-\r
- default:\r
- if (lvalue.XmlType.TypeCode != rvalue.XmlType.TypeCode)\r
- return CompareGT (lvalue, rvalue);\r
- break;\r
- }\r
throw new XmlQueryException (String.Format ("Not allowed value comparison between {0} and {1}.", lvalue.XmlType.QualifiedName, rvalue.XmlType.QualifiedName));\r
}\r
\r
\r
public static bool ValueGE (XPathAtomicValue lvalue, XPathAtomicValue rvalue)\r
{\r
- switch (lvalue.XmlType.TypeCode) {\r
- case XmlTypeCode.Decimal:\r
- if (rvalue.XmlType.TypeCode == XmlTypeCode.Decimal)\r
- return lvalue.ValueAsDecimal >= rvalue.ValueAsDecimal;\r
- goto case XmlTypeCode.Integer;\r
+ if (lvalue.XmlType.TypeCode == XmlTypeCode.Decimal &&\r
+ rvalue.XmlType.TypeCode == XmlTypeCode.Decimal)\r
+ return lvalue.ValueAsDecimal >= rvalue.ValueAsDecimal;\r
+ if (SequenceType.IsNumeric (lvalue.XmlType.TypeCode) &&\r
+ SequenceType.IsNumeric (lvalue.XmlType.TypeCode))\r
+ return lvalue.ValueAsDouble >= rvalue.ValueAsDouble;\r
+ if (lvalue.XmlType.TypeCode == rvalue.XmlType.TypeCode)\r
+ return CompareGE (lvalue, rvalue);\r
\r
- // numerics\r
- case XmlTypeCode.Integer:\r
- case XmlTypeCode.Float:\r
- case XmlTypeCode.Double:\r
- switch (rvalue.XmlType.TypeCode) {\r
- case XmlTypeCode.Integer:\r
- case XmlTypeCode.Decimal:\r
- case XmlTypeCode.Float:\r
- case XmlTypeCode.Double:\r
- return lvalue.ValueAsDouble >= rvalue.ValueAsDouble;\r
- }\r
- break;\r
-\r
- default:\r
- if (lvalue.XmlType.TypeCode != rvalue.XmlType.TypeCode)\r
- return CompareGE (lvalue, rvalue);\r
- break;\r
- }\r
throw new XmlQueryException (String.Format ("Not allowed value comparison between {0} and {1}.", lvalue.XmlType.QualifiedName, rvalue.XmlType.QualifiedName));\r
}\r
}\r