Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
DecimalStorage.cs
Go to the documentation of this file.
3using System.Xml;
4
5namespace System.Data.Common;
6
7internal sealed class DecimalStorage : DataStorage
8{
9 private decimal[] _values;
10
12 : base(column, typeof(decimal), 0m, StorageType.Decimal)
13 {
14 }
15
16 public override object Aggregate(int[] records, AggregateType kind)
17 {
18 bool flag = false;
19 try
20 {
21 switch (kind)
22 {
23 case AggregateType.Sum:
24 {
25 decimal num15 = default(decimal);
26 foreach (int num16 in records)
27 {
28 if (HasValue(num16))
29 {
31 flag = true;
32 }
33 }
34 if (flag)
35 {
36 return num15;
37 }
38 return _nullValue;
39 }
40 case AggregateType.Mean:
41 {
42 decimal num7 = default(decimal);
43 int num8 = 0;
44 foreach (int num9 in records)
45 {
46 if (HasValue(num9))
47 {
48 num7 += _values[num9];
49 num8++;
50 flag = true;
51 }
52 }
53 if (flag)
54 {
55 decimal num10 = num7 / (decimal)num8;
56 return num10;
57 }
58 return _nullValue;
59 }
60 case AggregateType.Var:
61 case AggregateType.StDev:
62 {
63 int num = 0;
64 double num2 = 0.0;
65 double num3 = 0.0;
66 double num4 = 0.0;
67 double num5 = 0.0;
68 foreach (int num6 in records)
69 {
70 if (HasValue(num6))
71 {
72 num4 += (double)_values[num6];
73 num5 += (double)_values[num6] * (double)_values[num6];
74 num++;
75 }
76 }
77 if (num > 1)
78 {
79 num2 = (double)num * num5 - num4 * num4;
80 num3 = num2 / (num4 * num4);
81 num2 = ((!(num3 < 1E-15) && !(num2 < 0.0)) ? (num2 / (double)(num * (num - 1))) : 0.0);
82 if (kind == AggregateType.StDev)
83 {
84 return Math.Sqrt(num2);
85 }
86 return num2;
87 }
88 return _nullValue;
89 }
90 case AggregateType.Min:
91 {
92 decimal num13 = decimal.MaxValue;
93 foreach (int num14 in records)
94 {
95 if (HasValue(num14))
96 {
98 flag = true;
99 }
100 }
101 if (flag)
102 {
103 return num13;
104 }
105 return _nullValue;
106 }
107 case AggregateType.Max:
108 {
109 decimal num11 = decimal.MinValue;
110 foreach (int num12 in records)
111 {
112 if (HasValue(num12))
113 {
115 flag = true;
116 }
117 }
118 if (flag)
119 {
120 return num11;
121 }
122 return _nullValue;
123 }
124 case AggregateType.First:
125 if (records.Length != 0)
126 {
127 return _values[records[0]];
128 }
129 return null;
130 case AggregateType.Count:
131 return base.Aggregate(records, kind);
132 }
133 }
134 catch (OverflowException)
135 {
136 throw ExprException.Overflow(typeof(decimal));
137 }
139 }
140
141 public override int Compare(int recordNo1, int recordNo2)
142 {
143 decimal num = _values[recordNo1];
144 decimal num2 = _values[recordNo2];
145 if (num == 0m || num2 == 0m)
146 {
148 if (num3 != 0)
149 {
150 return num3;
151 }
152 }
153 return decimal.Compare(num, num2);
154 }
155
156 public override int CompareValueTo(int recordNo, object value)
157 {
158 if (_nullValue == value)
159 {
160 if (!HasValue(recordNo))
161 {
162 return 0;
163 }
164 return 1;
165 }
166 decimal num = _values[recordNo];
167 if (0m == num && !HasValue(recordNo))
168 {
169 return -1;
170 }
171 return decimal.Compare(num, (decimal)value);
172 }
173
174 public override object ConvertValue(object value)
175 {
176 if (_nullValue != value)
177 {
178 value = ((value == null) ? _nullValue : ((object)((IConvertible)value).ToDecimal(base.FormatProvider)));
179 }
180 return value;
181 }
182
183 public override void Copy(int recordNo1, int recordNo2)
184 {
187 }
188
189 public override object Get(int record)
190 {
191 if (!HasValue(record))
192 {
193 return _nullValue;
194 }
195 return _values[record];
196 }
197
198 public override void Set(int record, object value)
199 {
200 if (_nullValue == value)
201 {
202 _values[record] = default(decimal);
203 SetNullBit(record, flag: true);
204 }
205 else
206 {
207 _values[record] = ((IConvertible)value).ToDecimal(base.FormatProvider);
208 SetNullBit(record, flag: false);
209 }
210 }
211
212 public override void SetCapacity(int capacity)
213 {
214 decimal[] array = new decimal[capacity];
215 if (_values != null)
216 {
218 }
219 _values = array;
220 base.SetCapacity(capacity);
221 }
222
223 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
224 public override object ConvertXmlToObject(string s)
225 {
226 return XmlConvert.ToDecimal(s);
227 }
228
229 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
230 public override string ConvertObjectToXml(object value)
231 {
232 return XmlConvert.ToString((decimal)value);
233 }
234
235 protected override object GetEmptyStorage(int recordCount)
236 {
237 return new decimal[recordCount];
238 }
239
240 protected override void CopyValue(int record, object store, BitArray nullbits, int storeIndex)
241 {
242 decimal[] array = (decimal[])store;
245 }
246
247 protected override void SetStorage(object store, BitArray nullbits)
248 {
249 _values = (decimal[])store;
251 }
252}
static unsafe void Copy(Array sourceArray, Array destinationArray, int length)
Definition Array.cs:624
void SetNullStorage(BitArray nullbits)
int CompareBits(int recordNo1, int recordNo2)
bool HasValue(int recordNo)
void SetNullBit(int recordNo, bool flag)
void CopyBits(int srcRecordNo, int dstRecordNo)
override object GetEmptyStorage(int recordCount)
override int Compare(int recordNo1, int recordNo2)
override string ConvertObjectToXml(object value)
override object Aggregate(int[] records, AggregateType kind)
override void Copy(int recordNo1, int recordNo2)
override void CopyValue(int record, object store, BitArray nullbits, int storeIndex)
override object ConvertXmlToObject(string s)
override void Set(int record, object value)
override void SetCapacity(int capacity)
override object Get(int record)
override void SetStorage(object store, BitArray nullbits)
override object ConvertValue(object value)
override int CompareValueTo(int recordNo, object value)
static Exception AggregateException(AggregateType aggregateType, Type type)
static Exception Overflow(Type type)
static byte Min(byte val1, byte val2)
Definition Math.cs:912
static double Sqrt(double d)
static byte Max(byte val1, byte val2)
Definition Math.cs:738
static string ToString(bool value)
static decimal ToDecimal(string s)