Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
XPathComparerHelper.cs
Go to the documentation of this file.
1using System;
4using System.Xml;
6
8
9internal sealed class XPathComparerHelper : IComparer
10{
11 private readonly XmlSortOrder _order;
12
13 private readonly XmlCaseOrder _caseOrder;
14
15 private readonly CultureInfo _cinfo;
16
17 private readonly XmlDataType _dataType;
18
19 public XPathComparerHelper(XmlSortOrder order, XmlCaseOrder caseOrder, string lang, XmlDataType dataType)
20 {
21 if (lang == null)
22 {
24 }
25 else
26 {
27 try
28 {
29 _cinfo = new CultureInfo(lang);
30 }
31 catch (ArgumentException)
32 {
33 throw;
34 }
35 }
36 if (order == XmlSortOrder.Descending)
37 {
38 switch (caseOrder)
39 {
40 case XmlCaseOrder.LowerFirst:
41 caseOrder = XmlCaseOrder.UpperFirst;
42 break;
43 case XmlCaseOrder.UpperFirst:
44 caseOrder = XmlCaseOrder.LowerFirst;
45 break;
46 }
47 }
48 _order = order;
49 _caseOrder = caseOrder;
50 _dataType = dataType;
51 }
52
53 public int Compare(object x, object y)
54 {
55 switch (_dataType)
56 {
57 case XmlDataType.Text:
58 {
59 string @string = Convert.ToString(x, _cinfo);
60 string string2 = Convert.ToString(y, _cinfo);
61 int num2 = _cinfo.CompareInfo.Compare(@string, string2, (_caseOrder != 0) ? CompareOptions.IgnoreCase : CompareOptions.None);
62 if (num2 != 0 || _caseOrder == XmlCaseOrder.None)
63 {
64 if (_order != XmlSortOrder.Ascending)
65 {
66 return -num2;
67 }
68 return num2;
69 }
71 if (_caseOrder != XmlCaseOrder.LowerFirst)
72 {
73 return -num2;
74 }
75 return num2;
76 }
77 case XmlDataType.Number:
78 {
79 double num = XmlConvert.ToXPathDouble(x);
80 double value = XmlConvert.ToXPathDouble(y);
81 int num2 = num.CompareTo(value);
82 if (_order != XmlSortOrder.Ascending)
83 {
84 return -num2;
85 }
86 return num2;
87 }
88 default:
90 }
91 }
92}
XPathComparerHelper(XmlSortOrder order, XmlCaseOrder caseOrder, string lang, XmlDataType dataType)
static ? string ToString(object? value)
Definition Convert.cs:2321
int Compare(string? string1, string? string2)
virtual CompareInfo CompareInfo
static CultureInfo CurrentCulture
static string Xml_InvalidOperation
Definition SR.cs:18
Definition SR.cs:7
static double ToXPathDouble(object o)