Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
RelatedView.cs
Go to the documentation of this file.
2
3namespace System.Data;
4
5internal sealed class RelatedView : DataView, IFilter
6{
7 private readonly DataKey? _parentKey;
8
9 private readonly DataKey _childKey;
10
11 private readonly DataRowView _parentRowView;
12
13 private readonly object[] _filterValues;
14
15 public RelatedView(DataColumn[] columns, object[] values)
16 : base(columns[0].Table, locked: false)
17 {
18 if (values == null)
19 {
20 throw ExceptionBuilder.ArgumentNull("values");
21 }
22 _parentRowView = null;
23 _parentKey = null;
24 _childKey = new DataKey(columns, copyColumns: true);
27 }
28
29 public RelatedView(DataRowView parentRowView, DataKey parentKey, DataColumn[] childKeyColumns)
30 : base(childKeyColumns[0].Table, locked: false)
31 {
32 _filterValues = null;
33 _parentRowView = parentRowView;
34 _parentKey = parentKey;
35 _childKey = new DataKey(childKeyColumns, copyColumns: true);
37 }
38
39 private object[] GetParentValues()
40 {
41 if (_filterValues != null)
42 {
43 return _filterValues;
44 }
46 {
47 return null;
48 }
50 }
51
52 public bool Invoke(DataRow row, DataRowVersion version)
53 {
54 object[] parentValues = GetParentValues();
55 if (parentValues == null)
56 {
57 return false;
58 }
59 object[] keyValues = row.GetKeyValues(_childKey, version);
60 bool flag = keyValues.AsSpan().SequenceEqual(parentValues, null);
61 IFilter filter = base.GetFilter();
62 if (filter != null)
63 {
64 flag &= filter.Invoke(row, version);
65 }
66 return flag;
67 }
68
69 internal override IFilter GetFilter()
70 {
71 return this;
72 }
73
74 public override DataRowView AddNew()
75 {
76 DataRowView dataRowView = base.AddNew();
78 return dataRowView;
79 }
80
81 internal override void SetIndex(string newSort, DataViewRowState newRowStates, IFilter newRowFilter)
82 {
83 SetIndex2(newSort, newRowStates, newRowFilter, fireEvent: false);
84 Reset();
85 }
86
87 public override bool Equals([NotNullWhen(true)] DataView dv)
88 {
89 if (!(dv is RelatedView relatedView))
90 {
91 return false;
92 }
93 if (!base.Equals(dv))
94 {
95 return false;
96 }
97 object[] columnsReference;
98 if (_filterValues != null)
99 {
100 columnsReference = _childKey.ColumnsReference;
101 object[] value = columnsReference;
102 columnsReference = relatedView._childKey.ColumnsReference;
103 if (CompareArray(value, columnsReference))
104 {
105 return CompareArray(_filterValues, relatedView._filterValues);
106 }
107 return false;
108 }
109 if (relatedView._filterValues != null)
110 {
111 return false;
112 }
113 columnsReference = _childKey.ColumnsReference;
114 object[] value2 = columnsReference;
115 columnsReference = relatedView._childKey.ColumnsReference;
116 if (CompareArray(value2, columnsReference))
117 {
118 columnsReference = _parentKey.Value.ColumnsReference;
119 object[] value3 = columnsReference;
120 columnsReference = _parentKey.Value.ColumnsReference;
121 if (CompareArray(value3, columnsReference))
122 {
123 return _parentRowView.Equals(relatedView._parentRowView);
124 }
125 }
126 return false;
127 }
128
129 private bool CompareArray(object[] value1, object[] value2)
130 {
131 if (value1 == null || value2 == null)
132 {
133 return value1 == value2;
134 }
135 if (value1.Length != value2.Length)
136 {
137 return false;
138 }
139 for (int i = 0; i < value1.Length; i++)
140 {
141 if (value1[i] != value2[i])
142 {
143 return false;
144 }
145 }
146 return true;
147 }
148}
override bool Equals(object? other)
object[] GetKeyValues(DataKey key)
Definition DataRow.cs:811
void SetKeyValues(DataKey key, object[] keyValues)
Definition DataRow.cs:1064
void SetIndex2(string newSort, DataViewRowState newRowStates, IFilter newRowFilter, bool fireEvent)
Definition DataView.cs:1347
static Exception ArgumentNull(string paramName)
RelatedView(DataRowView parentRowView, DataKey parentKey, DataColumn[] childKeyColumns)
readonly? DataKey _parentKey
Definition RelatedView.cs:7
override DataRowView AddNew()
readonly DataRowView _parentRowView
bool CompareArray(object[] value1, object[] value2)
override IFilter GetFilter()
readonly object[] _filterValues
RelatedView(DataColumn[] columns, object[] values)
readonly DataKey _childKey
Definition RelatedView.cs:9
override void SetIndex(string newSort, DataViewRowState newRowStates, IFilter newRowFilter)
override bool Equals([NotNullWhen(true)] DataView dv)
bool Invoke(DataRow row, DataRowVersion version)
bool Invoke(DataRow row, DataRowVersion version)
DataColumn[] ColumnsReference
Definition DataKey.cs:7
object[] GetKeyValues(int record)
Definition DataKey.cs:174