Skip to content

Commit 705ea3c

Browse files
committed
Use a simple list instead of a state machine.
1 parent 3de68bc commit 705ea3c

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

ReClass.NET/MemoryScanner/ScannerWorker.cs

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,12 @@ public ScannerWorker(ScanSettings settings, IScanComparer comparer)
2727
/// <param name="count">The length of the <paramref name="data"/> parameter.</param>
2828
/// <param name="ct">The <see cref="CancellationToken"/> to stop the scan.</param>
2929
/// <returns>An enumeration of all <see cref="ScanResult"/>s.</returns>
30-
public IEnumerable<ScanResult> Search(byte[] data, int count, CancellationToken ct)
30+
public IList<ScanResult> Search(byte[] data, int count, CancellationToken ct)
3131
{
3232
Contract.Requires(data != null);
3333

34+
var results = new List<ScanResult>();
35+
3436
var endIndex = count - comparer.ValueSize;
3537

3638
for (var i = 0; i < endIndex; i += settings.FastScanAlignment)
@@ -44,9 +46,11 @@ public IEnumerable<ScanResult> Search(byte[] data, int count, CancellationToken
4446
{
4547
result.Address = (IntPtr)i;
4648

47-
yield return result;
49+
results.Add(result);
4850
}
4951
}
52+
53+
return results;
5054
}
5155

5256
/// <summary>
@@ -55,34 +59,38 @@ public IEnumerable<ScanResult> Search(byte[] data, int count, CancellationToken
5559
/// </summary>
5660
/// <param name="data">The data to scan.</param>
5761
/// <param name="count">The length of the <paramref name="data"/> parameter.</param>
58-
/// <param name="results">The previous results to use.</param>
62+
/// <param name="previousResults">The previous results to use.</param>
5963
/// <param name="ct">The <see cref="CancellationToken"/> to stop the scan.</param>
6064
/// <returns>An enumeration of all <see cref="ScanResult"/>s.</returns>
61-
public IEnumerable<ScanResult> Search(byte[] data, int count, IEnumerable<ScanResult> results, CancellationToken ct)
65+
public IList<ScanResult> Search(byte[] data, int count, IEnumerable<ScanResult> previousResults, CancellationToken ct)
6266
{
6367
Contract.Requires(data != null);
64-
Contract.Requires(results != null);
68+
Contract.Requires(previousResults != null);
69+
70+
var results = new List<ScanResult>();
6571

6672
var endIndex = count - comparer.ValueSize;
6773

68-
foreach (var previous in results)
74+
foreach (var previousResult in previousResults)
6975
{
7076
if (ct.IsCancellationRequested)
7177
{
7278
break;
7379
}
7480

75-
var offset = previous.Address.ToInt32();
81+
var offset = previousResult.Address.ToInt32();
7682
if (offset <= endIndex)
7783
{
78-
if (comparer.Compare(data, offset, previous, out var result))
84+
if (comparer.Compare(data, offset, previousResult, out var result))
7985
{
80-
result.Address = previous.Address;
86+
result.Address = previousResult.Address;
8187

82-
yield return result;
88+
results.Add(result);
8389
}
8490
}
8591
}
92+
93+
return results;
8694
}
8795
}
8896
}

0 commit comments

Comments
 (0)