Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
DataKey.cs
Go to the documentation of this file.
1namespace System.Data;
2
3internal readonly struct DataKey
4{
5 private readonly DataColumn[] _columns;
6
8
9 internal bool HasValue => _columns != null;
10
11 internal DataTable Table => _columns[0].Table;
12
13 internal DataKey(DataColumn[] columns, bool copyColumns)
14 {
15 if (columns == null)
16 {
17 throw ExceptionBuilder.ArgumentNull("columns");
18 }
19 if (columns.Length == 0)
20 {
22 }
23 if (columns.Length > 32)
24 {
26 }
27 for (int i = 0; i < columns.Length; i++)
28 {
29 if (columns[i] == null)
30 {
31 throw ExceptionBuilder.ArgumentNull("column");
32 }
33 }
34 for (int j = 0; j < columns.Length; j++)
35 {
36 for (int k = 0; k < j; k++)
37 {
38 if (columns[j] == columns[k])
39 {
40 throw ExceptionBuilder.KeyDuplicateColumns(columns[j].ColumnName);
41 }
42 }
43 }
44 if (copyColumns)
45 {
46 _columns = new DataColumn[columns.Length];
47 for (int l = 0; l < columns.Length; l++)
48 {
49 _columns[l] = columns[l];
50 }
51 }
52 else
53 {
54 _columns = columns;
55 }
56 CheckState();
57 }
58
59 internal void CheckState()
60 {
61 DataTable table = _columns[0].Table;
62 if (table == null)
63 {
65 }
66 for (int i = 1; i < _columns.Length; i++)
67 {
68 if (_columns[i].Table == null)
69 {
71 }
72 if (_columns[i].Table != table)
73 {
75 }
76 }
77 }
78
79 internal bool ColumnsEqual(DataKey key)
80 {
81 return ColumnsEqual(_columns, key._columns);
82 }
83
84 internal static bool ColumnsEqual(DataColumn[] column1, DataColumn[] column2)
85 {
86 if (column1 == column2)
87 {
88 return true;
89 }
90 if (column1 == null || column2 == null)
91 {
92 return false;
93 }
94 if (column1.Length != column2.Length)
95 {
96 return false;
97 }
98 for (int i = 0; i < column1.Length; i++)
99 {
100 bool flag = false;
101 for (int j = 0; j < column2.Length; j++)
102 {
103 if (column1[i].Equals(column2[j]))
104 {
105 flag = true;
106 break;
107 }
108 }
109 if (!flag)
110 {
111 return false;
112 }
113 }
114 return true;
115 }
116
117 internal bool ContainsColumn(DataColumn column)
118 {
119 for (int i = 0; i < _columns.Length; i++)
120 {
121 if (column == _columns[i])
122 {
123 return true;
124 }
125 }
126 return false;
127 }
128
129 public override int GetHashCode()
130 {
131 return base.GetHashCode();
132 }
133
134 public override bool Equals(object value)
135 {
136 return Equals((DataKey)value);
137 }
138
139 internal bool Equals(DataKey value)
140 {
141 DataColumn[] columns = _columns;
142 DataColumn[] columns2 = value._columns;
143 if (columns == columns2)
144 {
145 return true;
146 }
147 if (columns == null || columns2 == null)
148 {
149 return false;
150 }
151 return columns.AsSpan().SequenceEqual(columns2, null);
152 }
153
154 internal string[] GetColumnNames()
155 {
156 string[] array = new string[_columns.Length];
157 for (int i = 0; i < _columns.Length; i++)
158 {
159 array[i] = _columns[i].ColumnName;
160 }
161 return array;
162 }
163
165 {
166 IndexField[] array = new IndexField[_columns.Length];
167 for (int i = 0; i < _columns.Length; i++)
168 {
169 array[i] = new IndexField(_columns[i], isDescending: false);
170 }
171 return array;
172 }
173
174 internal object[] GetKeyValues(int record)
175 {
176 object[] array = new object[_columns.Length];
177 for (int i = 0; i < _columns.Length; i++)
178 {
179 array[i] = _columns[i][record];
180 }
181 return array;
182 }
183
185 {
186 return GetSortIndex(DataViewRowState.CurrentRows);
187 }
188
189 internal Index GetSortIndex(DataViewRowState recordStates)
190 {
191 IndexField[] indexDesc = GetIndexDesc();
192 return _columns[0].Table.GetIndex(indexDesc, recordStates, null);
193 }
194
195 internal bool RecordsEqual(int record1, int record2)
196 {
197 for (int i = 0; i < _columns.Length; i++)
198 {
199 if (_columns[i].Compare(record1, record2) != 0)
200 {
201 return false;
202 }
203 }
204 return true;
205 }
206
207 internal DataColumn[] ToArray()
208 {
209 DataColumn[] array = new DataColumn[_columns.Length];
210 for (int i = 0; i < _columns.Length; i++)
211 {
212 array[i] = _columns[i];
213 }
214 return array;
215 }
216}
Index GetIndex(IndexField[] indexDesc)
static Exception KeyTooManyColumns(int cols)
static Exception ColumnNotInAnyTable()
static Exception KeyDuplicateColumns(string columnName)
static Exception KeyTableMismatch()
static Exception ArgumentNull(string paramName)
readonly DataColumn[] _columns
Definition DataKey.cs:5
bool Equals(DataKey value)
Definition DataKey.cs:139
Index GetSortIndex()
Definition DataKey.cs:184
IndexField[] GetIndexDesc()
Definition DataKey.cs:164
bool RecordsEqual(int record1, int record2)
Definition DataKey.cs:195
string[] GetColumnNames()
Definition DataKey.cs:154
static bool ColumnsEqual(DataColumn[] column1, DataColumn[] column2)
Definition DataKey.cs:84
override int GetHashCode()
Definition DataKey.cs:129
override bool Equals(object value)
Definition DataKey.cs:134
bool ContainsColumn(DataColumn column)
Definition DataKey.cs:117
Index GetSortIndex(DataViewRowState recordStates)
Definition DataKey.cs:189
DataKey(DataColumn[] columns, bool copyColumns)
Definition DataKey.cs:13
DataColumn[] ColumnsReference
Definition DataKey.cs:7
bool ColumnsEqual(DataKey key)
Definition DataKey.cs:79
object[] GetKeyValues(int record)
Definition DataKey.cs:174
DataColumn[] ToArray()
Definition DataKey.cs:207
DataTable Table
Definition DataKey.cs:11