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; /// /// Offset where the data to be hashed starts at. /// public readonly int BeginOffset; /// /// Length of the hashed data. /// public readonly int Size; /// /// 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 begOfs, int size) { HashOffset = hashOfs; BeginOffset = begOfs; 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 } }