namespace XFESystem.Console; /// An immutable copy for a renderer; no live buffer storage is exposed. public sealed class TerminalSnapshot { internal TerminalSnapshot(int columns, int rows, int cursorColumn, int cursorRow, bool cursorVisible, TerminalCell[] cells) { Columns = columns; Rows = rows; CursorColumn = cursorColumn; CursorRow = cursorRow; CursorVisible = cursorVisible; Cells = Array.AsReadOnly(cells); } public int Columns { get; } public int Rows { get; } public int CursorColumn { get; } public int CursorRow { get; } public bool CursorVisible { get; } public IReadOnlyList Cells { get; } public TerminalCell GetCell(int column, int row) { ArgumentOutOfRangeException.ThrowIfNegative(column); ArgumentOutOfRangeException.ThrowIfGreaterThanOrEqual(column, Columns); ArgumentOutOfRangeException.ThrowIfNegative(row); ArgumentOutOfRangeException.ThrowIfGreaterThanOrEqual(row, Rows); return Cells[row * Columns + column]; } }