@@ -27,10 +27,12 @@ public ScannerWorker(ScanSettings settings, IScanComparer comparer)
27
27
/// <param name="count">The length of the <paramref name="data"/> parameter.</param>
28
28
/// <param name="ct">The <see cref="CancellationToken"/> to stop the scan.</param>
29
29
/// <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 )
31
31
{
32
32
Contract . Requires ( data != null ) ;
33
33
34
+ var results = new List < ScanResult > ( ) ;
35
+
34
36
var endIndex = count - comparer . ValueSize ;
35
37
36
38
for ( var i = 0 ; i < endIndex ; i += settings . FastScanAlignment )
@@ -44,9 +46,11 @@ public IEnumerable<ScanResult> Search(byte[] data, int count, CancellationToken
44
46
{
45
47
result . Address = ( IntPtr ) i ;
46
48
47
- yield return result ;
49
+ results . Add ( result ) ;
48
50
}
49
51
}
52
+
53
+ return results ;
50
54
}
51
55
52
56
/// <summary>
@@ -55,34 +59,38 @@ public IEnumerable<ScanResult> Search(byte[] data, int count, CancellationToken
55
59
/// </summary>
56
60
/// <param name="data">The data to scan.</param>
57
61
/// <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>
59
63
/// <param name="ct">The <see cref="CancellationToken"/> to stop the scan.</param>
60
64
/// <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 )
62
66
{
63
67
Contract . Requires ( data != null ) ;
64
- Contract . Requires ( results != null ) ;
68
+ Contract . Requires ( previousResults != null ) ;
69
+
70
+ var results = new List < ScanResult > ( ) ;
65
71
66
72
var endIndex = count - comparer . ValueSize ;
67
73
68
- foreach ( var previous in results )
74
+ foreach ( var previousResult in previousResults )
69
75
{
70
76
if ( ct . IsCancellationRequested )
71
77
{
72
78
break ;
73
79
}
74
80
75
- var offset = previous . Address . ToInt32 ( ) ;
81
+ var offset = previousResult . Address . ToInt32 ( ) ;
76
82
if ( offset <= endIndex )
77
83
{
78
- if ( comparer . Compare ( data , offset , previous , out var result ) )
84
+ if ( comparer . Compare ( data , offset , previousResult , out var result ) )
79
85
{
80
- result . Address = previous . Address ;
86
+ result . Address = previousResult . Address ;
81
87
82
- yield return result ;
88
+ results . Add ( result ) ;
83
89
}
84
90
}
85
91
}
92
+
93
+ return results ;
86
94
}
87
95
}
88
96
}
0 commit comments