/* Copyright (C) 2014-2019 de4dot@gmail.com This file is part of dnSpy dnSpy is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. dnSpy is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with dnSpy. If not, see . */ using System; namespace dnSpy.Contracts.Hex { /// /// A position within a cell /// public readonly struct HexCellPosition : IEquatable { /// /// true if this is a default instance that hasn't been initialized /// public bool IsDefault => BufferPosition.IsDefault; /// /// Gets the column /// public HexColumnType Column { get; } /// /// Gets the buffer position /// public HexBufferPoint BufferPosition { get; } /// /// Gets the position within the cell /// public int CellPosition { get; } /// /// Constructor /// /// Column /// Buffer position /// Position within the cell public HexCellPosition(HexColumnType column, HexBufferPoint bufferPosition, int cellPosition) { if (column != HexColumnType.Values && column != HexColumnType.Ascii) throw new ArgumentOutOfRangeException(nameof(column)); if (bufferPosition.IsDefault) throw new ArgumentException(); if (cellPosition < 0) throw new ArgumentOutOfRangeException(nameof(cellPosition)); Column = column; BufferPosition = bufferPosition; CellPosition = cellPosition; } /// /// operator ==() /// /// /// /// public static bool operator ==(HexCellPosition a, HexCellPosition b) => a.Equals(b); /// /// operator !=() /// /// /// /// public static bool operator !=(HexCellPosition a, HexCellPosition b) => !a.Equals(b); /// /// Equals() /// /// Other instance /// public bool Equals(HexCellPosition other) => Column == other.Column && BufferPosition == other.BufferPosition && CellPosition == other.CellPosition; /// /// Equals() /// /// Object /// public override bool Equals(object? obj) => obj is HexCellPosition && Equals((HexCellPosition)obj); /// /// GetHashCode() /// /// public override int GetHashCode() => (int)Column ^ BufferPosition.GetHashCode() ^ CellPosition.GetHashCode(); /// /// ToString() /// /// public override string ToString() => "[" + Column.ToString() + "," + BufferPosition.ToString() + "," + CellPosition.ToString() + "]"; } }