1- using System . Diagnostics ;
1+ using System ;
2+ using System . Diagnostics ;
23using ReClassNET . Util ;
34
45namespace 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 }
0 commit comments