Skip to content

Commit dac1416

Browse files
committed
Added tests.
1 parent 55815f2 commit dac1416

File tree

7 files changed

+744
-228
lines changed

7 files changed

+744
-228
lines changed

ReClass.NET/MemoryScanner/Comparer/ByteMemoryComparer.cs

Lines changed: 91 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Diagnostics;
1+
using System;
2+
using System.Diagnostics;
23
using ReClassNET.Util;
34

45
namespace ReClassNET.MemoryScanner.Comparer
@@ -28,45 +29,37 @@ public ByteMemoryComparer(ScanCompareType compareType, byte value1, byte value2)
2829

2930
public bool Compare(byte[] data, int index, out ScanResult result)
3031
{
31-
result = null;
32-
33-
var value = data[index];
34-
35-
bool IsMatch()
36-
{
37-
switch (CompareType)
32+
return CompareInternal(
33+
data,
34+
index,
35+
value =>
3836
{
39-
case ScanCompareType.Equal:
40-
return value == Value1;
41-
case ScanCompareType.NotEqual:
42-
return value != Value1;
43-
case ScanCompareType.GreaterThan:
44-
return value > Value1;
45-
case ScanCompareType.GreaterThanOrEqual:
46-
return value >= Value1;
47-
case ScanCompareType.LessThan:
48-
return value < Value1;
49-
case ScanCompareType.LessThanOrEqual:
50-
return value <= Value1;
51-
case ScanCompareType.Between:
52-
return Value1 < value && value < Value2;
53-
case ScanCompareType.BetweenOrEqual:
54-
return Value1 <= value && value <= Value2;
55-
case ScanCompareType.Unknown:
56-
return true;
57-
default:
58-
throw new InvalidCompareTypeException(CompareType);
59-
}
60-
}
61-
62-
if (!IsMatch())
63-
{
64-
return false;
65-
}
66-
67-
result = new ByteScanResult(value);
68-
69-
return true;
37+
switch (CompareType)
38+
{
39+
case ScanCompareType.Equal:
40+
return value == Value1;
41+
case ScanCompareType.NotEqual:
42+
return value != Value1;
43+
case ScanCompareType.GreaterThan:
44+
return value > Value1;
45+
case ScanCompareType.GreaterThanOrEqual:
46+
return value >= Value1;
47+
case ScanCompareType.LessThan:
48+
return value < Value1;
49+
case ScanCompareType.LessThanOrEqual:
50+
return value <= Value1;
51+
case ScanCompareType.Between:
52+
return Value1 < value && value < Value2;
53+
case ScanCompareType.BetweenOrEqual:
54+
return Value1 <= value && value <= Value2;
55+
case ScanCompareType.Unknown:
56+
return true;
57+
default:
58+
throw new InvalidCompareTypeException(CompareType);
59+
}
60+
},
61+
out result
62+
);
7063
}
7164

7265
public bool Compare(byte[] data, int index, ScanResult previous, out ScanResult result)
@@ -80,48 +73,70 @@ public bool Compare(byte[] data, int index, ScanResult previous, out ScanResult
8073

8174
public bool Compare(byte[] data, int index, ByteScanResult previous, out ScanResult result)
8275
{
83-
result = null;
76+
return CompareInternal(
77+
data,
78+
index,
79+
value =>
80+
{
81+
switch (CompareType)
82+
{
83+
case ScanCompareType.Equal:
84+
return value == Value1;
85+
case ScanCompareType.NotEqual:
86+
return value != Value1;
87+
case ScanCompareType.GreaterThan:
88+
return value > Value1;
89+
case ScanCompareType.GreaterThanOrEqual:
90+
return value >= Value1;
91+
case ScanCompareType.LessThan:
92+
return value < Value1;
93+
case ScanCompareType.LessThanOrEqual:
94+
return value <= Value1;
95+
case ScanCompareType.Between:
96+
return Value1 < value && value < Value2;
97+
case ScanCompareType.BetweenOrEqual:
98+
return Value1 <= value && value <= Value2;
99+
100+
case ScanCompareType.Changed:
101+
return value != previous.Value;
102+
case ScanCompareType.NotChanged:
103+
return value == previous.Value;
104+
case ScanCompareType.Increased:
105+
return value > previous.Value;
106+
case ScanCompareType.IncreasedOrEqual:
107+
return value >= previous.Value;
108+
case ScanCompareType.Decreased:
109+
return value < previous.Value;
110+
case ScanCompareType.DecreasedOrEqual:
111+
return value <= previous.Value;
112+
default:
113+
throw new InvalidCompareTypeException(CompareType);
114+
}
115+
},
116+
out result
117+
);
118+
}
84119

85-
var value = data[index];
120+
private static bool CompareInternal(byte[] data, int index, Func<short, bool> matcher, out ScanResult result)
121+
{
122+
result = null;
86123

87-
bool IsMatch()
124+
if (data == null)
88125
{
89-
switch (CompareType)
90-
{
91-
case ScanCompareType.Equal:
92-
return value == Value1;
93-
case ScanCompareType.NotEqual:
94-
return value != Value1;
95-
case ScanCompareType.Changed:
96-
return value != previous.Value;
97-
case ScanCompareType.NotChanged:
98-
return value == previous.Value;
99-
case ScanCompareType.GreaterThan:
100-
return value > Value1;
101-
case ScanCompareType.GreaterThanOrEqual:
102-
return value >= Value1;
103-
case ScanCompareType.Increased:
104-
return value > previous.Value;
105-
case ScanCompareType.IncreasedOrEqual:
106-
return value >= previous.Value;
107-
case ScanCompareType.LessThan:
108-
return value < Value1;
109-
case ScanCompareType.LessThanOrEqual:
110-
return value <= Value1;
111-
case ScanCompareType.Decreased:
112-
return value < previous.Value;
113-
case ScanCompareType.DecreasedOrEqual:
114-
return value <= previous.Value;
115-
case ScanCompareType.Between:
116-
return Value1 < value && value < Value2;
117-
case ScanCompareType.BetweenOrEqual:
118-
return Value1 <= value && value <= Value2;
119-
default:
120-
throw new InvalidCompareTypeException(CompareType);
121-
}
126+
throw new ArgumentNullException(nameof(data));
127+
}
128+
if ((uint)index >= data.Length)
129+
{
130+
throw new ArgumentOutOfRangeException(nameof(index));
122131
}
132+
if (index > data.Length - 1)
133+
{
134+
throw new ArgumentException();
135+
}
136+
137+
var value = data[index];
123138

124-
if (!IsMatch())
139+
if (!matcher(value))
125140
{
126141
return false;
127142
}

ReClass.NET/MemoryScanner/Comparer/LongMemoryComparer.cs

Lines changed: 77 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -29,45 +29,37 @@ public LongMemoryComparer(ScanCompareType compareType, long value1, long value2)
2929

3030
public bool Compare(byte[] data, int index, out ScanResult result)
3131
{
32-
result = null;
33-
34-
var value = BitConverter.ToInt64(data, index);
35-
36-
bool IsMatch()
37-
{
38-
switch (CompareType)
32+
return CompareInternal(
33+
data,
34+
index,
35+
value =>
3936
{
40-
case ScanCompareType.Equal:
41-
return value == Value1;
42-
case ScanCompareType.NotEqual:
43-
return value != Value1;
44-
case ScanCompareType.GreaterThan:
45-
return value > Value1;
46-
case ScanCompareType.GreaterThanOrEqual:
47-
return value >= Value1;
48-
case ScanCompareType.LessThan:
49-
return value < Value1;
50-
case ScanCompareType.LessThanOrEqual:
51-
return value <= Value1;
52-
case ScanCompareType.Between:
53-
return Value1 < value && value < Value2;
54-
case ScanCompareType.BetweenOrEqual:
55-
return Value1 <= value && value <= Value2;
56-
case ScanCompareType.Unknown:
57-
return true;
58-
default:
59-
throw new InvalidCompareTypeException(CompareType);
60-
}
61-
}
62-
63-
if (!IsMatch())
64-
{
65-
return false;
66-
}
67-
68-
result = new LongScanResult(value);
69-
70-
return true;
37+
switch (CompareType)
38+
{
39+
case ScanCompareType.Equal:
40+
return value == Value1;
41+
case ScanCompareType.NotEqual:
42+
return value != Value1;
43+
case ScanCompareType.GreaterThan:
44+
return value > Value1;
45+
case ScanCompareType.GreaterThanOrEqual:
46+
return value >= Value1;
47+
case ScanCompareType.LessThan:
48+
return value < Value1;
49+
case ScanCompareType.LessThanOrEqual:
50+
return value <= Value1;
51+
case ScanCompareType.Between:
52+
return Value1 < value && value < Value2;
53+
case ScanCompareType.BetweenOrEqual:
54+
return Value1 <= value && value <= Value2;
55+
case ScanCompareType.Unknown:
56+
return true;
57+
default:
58+
throw new InvalidCompareTypeException(CompareType);
59+
}
60+
},
61+
out result
62+
);
7163
}
7264

7365
public bool Compare(byte[] data, int index, ScanResult previous, out ScanResult result)
@@ -80,49 +72,58 @@ public bool Compare(byte[] data, int index, ScanResult previous, out ScanResult
8072
}
8173

8274
public bool Compare(byte[] data, int index, LongScanResult previous, out ScanResult result)
75+
{
76+
return CompareInternal(
77+
data,
78+
index,
79+
value =>
80+
{
81+
switch (CompareType)
82+
{
83+
case ScanCompareType.Equal:
84+
return value == Value1;
85+
case ScanCompareType.NotEqual:
86+
return value != Value1;
87+
case ScanCompareType.GreaterThan:
88+
return value > Value1;
89+
case ScanCompareType.GreaterThanOrEqual:
90+
return value >= Value1;
91+
case ScanCompareType.LessThan:
92+
return value < Value1;
93+
case ScanCompareType.LessThanOrEqual:
94+
return value <= Value1;
95+
case ScanCompareType.Between:
96+
return Value1 < value && value < Value2;
97+
case ScanCompareType.BetweenOrEqual:
98+
return Value1 <= value && value <= Value2;
99+
100+
case ScanCompareType.Changed:
101+
return value != previous.Value;
102+
case ScanCompareType.NotChanged:
103+
return value == previous.Value;
104+
case ScanCompareType.Increased:
105+
return value > previous.Value;
106+
case ScanCompareType.IncreasedOrEqual:
107+
return value >= previous.Value;
108+
case ScanCompareType.Decreased:
109+
return value < previous.Value;
110+
case ScanCompareType.DecreasedOrEqual:
111+
return value <= previous.Value;
112+
default:
113+
throw new InvalidCompareTypeException(CompareType);
114+
}
115+
},
116+
out result
117+
);
118+
}
119+
120+
private static bool CompareInternal(byte[] data, int index, Func<long, bool> matcher, out ScanResult result)
83121
{
84122
result = null;
85123

86124
var value = BitConverter.ToInt64(data, index);
87125

88-
bool IsMatch()
89-
{
90-
switch (CompareType)
91-
{
92-
case ScanCompareType.Equal:
93-
return value == Value1;
94-
case ScanCompareType.NotEqual:
95-
return value != Value1;
96-
case ScanCompareType.Changed:
97-
return value != previous.Value;
98-
case ScanCompareType.NotChanged:
99-
return value == previous.Value;
100-
case ScanCompareType.GreaterThan:
101-
return value > Value1;
102-
case ScanCompareType.GreaterThanOrEqual:
103-
return value >= Value1;
104-
case ScanCompareType.Increased:
105-
return value > previous.Value;
106-
case ScanCompareType.IncreasedOrEqual:
107-
return value >= previous.Value;
108-
case ScanCompareType.LessThan:
109-
return value < Value1;
110-
case ScanCompareType.LessThanOrEqual:
111-
return value <= Value1;
112-
case ScanCompareType.Decreased:
113-
return value < previous.Value;
114-
case ScanCompareType.DecreasedOrEqual:
115-
return value <= previous.Value;
116-
case ScanCompareType.Between:
117-
return Value1 < value && value < Value2;
118-
case ScanCompareType.BetweenOrEqual:
119-
return Value1 <= value && value <= Value2;
120-
default:
121-
throw new InvalidCompareTypeException(CompareType);
122-
}
123-
}
124-
125-
if (!IsMatch())
126+
if (!matcher(value))
126127
{
127128
return false;
128129
}

0 commit comments

Comments
 (0)