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];
}
}