public bool HasConflict(PatchedByteArray patchedByteArray) { if (patchedByteArray == null) { return(false); } if (Sector != patchedByteArray.Sector) { return(false); } byte[] compareBytes = patchedByteArray.GetBytes(); if ((bytes == null) || (compareBytes == null)) { return(false); } if ((bytes.Length == 0) || (compareBytes.Length == 0)) { return(false); } PatchRange range = new PatchRange(this); PatchRange inputRange = new PatchRange(patchedByteArray); if (!range.HasOverlap(inputRange)) { return(false); } uint greaterStartOffset = Math.Max(range.StartOffset, inputRange.StartOffset); uint lesserEndOffset = Math.Min(range.EndOffset, inputRange.EndOffset); uint length = lesserEndOffset - greaterStartOffset + 1; System.Collections.Generic.IList <byte> overlapBytes = GetBytes().SubLength(greaterStartOffset - range.StartOffset, length); System.Collections.Generic.IList <byte> inputOverlapBytes = patchedByteArray.GetBytes().SubLength(greaterStartOffset - inputRange.StartOffset, length); for (int index = 0; index < length; index++) { if (overlapBytes[index] != inputOverlapBytes[index]) { return(true); } } return(false); }
public MovePatchRange(PatchRange range, long moveOffset) : base(range) { this.MoveOffset = moveOffset; }
public bool HasOverlap(PatchRange range) { return((Sector == range.Sector) && (EndOffset >= range.StartOffset) && (StartOffset <= range.EndOffset)); }
public bool IsContainedWithin(PatchRange range) { return((Sector == range.Sector) && (StartOffset >= range.StartOffset) && (EndOffset <= range.EndOffset)); }
public PatchRange(PatchRange range) : this(range.Sector, range.StartOffset, range.EndOffset) { }