namespace NHSE.Core { /// /// Specifies the region that a validation hash is calculated over. /// public readonly struct FileHashRegion { /// /// Offset of the calculated hash. /// public readonly int HashOffset; /// /// Length of the hashed data. /// public readonly int Size; /// /// Offset where the data to be hashed starts at (calculated). /// public int BeginOffset => HashOffset + 4; /// /// Offset where the data to be hashed ends at (calculated). /// public int EndOffset => BeginOffset + Size; public override string ToString() => $"0x{HashOffset:X}: (0x{BeginOffset:X}-0x{EndOffset:X})"; public FileHashRegion(int hashOfs, int size) { HashOffset = hashOfs; Size = size; } #region Equality Comparison public override bool Equals(object obj) => obj is FileHashRegion r && r == this; // ReSharper disable once PossiblyImpureMethodCallOnReadonlyVariable public override int GetHashCode() => BeginOffset.GetHashCode(); public static bool operator !=(FileHashRegion left, FileHashRegion right) => !(left == right); public static bool operator ==(FileHashRegion left, FileHashRegion right) { if (left.HashOffset != right.HashOffset) return false; if (left.BeginOffset != right.BeginOffset) return false; if (left.Size != right.Size) return false; return true; } #endregion } }