public bool Compare(byte[] data, int index, IntegerScanResult previous, out ScanResult result) { return(CompareInternal( data, index, value => { switch (CompareType) { case ScanCompareType.Equal: return value == Value1; case ScanCompareType.NotEqual: return value != Value1; case ScanCompareType.GreaterThan: return value > Value1; case ScanCompareType.GreaterThanOrEqual: return value >= Value1; case ScanCompareType.LessThan: return value < Value1; case ScanCompareType.LessThanOrEqual: return value <= Value1; case ScanCompareType.Between: return Value1 < value && value < Value2; case ScanCompareType.BetweenOrEqual: return Value1 <= value && value <= Value2; case ScanCompareType.Changed: return value != previous.Value; case ScanCompareType.NotChanged: return value == previous.Value; case ScanCompareType.Increased: return value > previous.Value; case ScanCompareType.IncreasedOrEqual: return value >= previous.Value; case ScanCompareType.Decreased: return value < previous.Value; case ScanCompareType.DecreasedOrEqual: return value <= previous.Value; default: throw new InvalidCompareTypeException(CompareType); } }, out result )); }
public bool Compare(byte[] data, int index, out ScanResult result) { result = null; var value = BitConverter.ToInt32(data, index); bool IsMatch() { switch (CompareType) { case ScanCompareType.Equal: return(value == Value1); case ScanCompareType.NotEqual: return(value != Value1); case ScanCompareType.GreaterThan: return(value > Value1); case ScanCompareType.GreaterThanOrEqual: return(value >= Value1); case ScanCompareType.LessThan: return(value < Value1); case ScanCompareType.LessThanOrEqual: return(value <= Value1); case ScanCompareType.Between: return(Value1 < value && value < Value2); case ScanCompareType.BetweenOrEqual: return(Value1 <= value && value <= Value2); case ScanCompareType.Unknown: return(true); default: throw new InvalidCompareTypeException(CompareType); } } if (!IsMatch()) { return(false); } result = new IntegerScanResult(value); return(true); }
private static bool CompareInternal(byte[] data, int index, Func <int, bool> matcher, out ScanResult result) { result = null; var value = BitConverter.ToInt32(data, index); if (!matcher(value)) { return(false); } result = new IntegerScanResult(value); return(true); }