# `Harlock.Render.Buffer`
[🔗](https://github.com/thatsme/harlock/blob/v0.2.0/lib/harlock/render/buffer.ex#L1)

A 2D grid of cells of fixed dimensions, returned by `Harlock.Test.cells/1`.

Cells are stored in a map keyed by `{row, col}`; missing keys behave
as blanks. The map representation keeps construction cheap (no need
to pre-fill every cell) and survives sparse frames where most cells
are blank.

In tests you'll typically pull this from `Harlock.Test.cells/1` to
inspect individual cell contents and styles after a render.

# `t`

```elixir
@type t() :: %Harlock.Render.Buffer{
  cells: %{
    required({non_neg_integer(), non_neg_integer()}) =&gt; Harlock.Render.Cell.t()
  },
  cols: non_neg_integer(),
  rows: non_neg_integer()
}
```

# `each`

```elixir
@spec each(t(), ({non_neg_integer(), non_neg_integer(), Harlock.Render.Cell.t()} -&gt;
             any())) :: :ok
```

Enumerate every cell in render order (row-major, top-left to bottom-right),
yielding `{row, col, cell}` tuples. Missing entries are surfaced as blanks
so the diff renderer can compare positions without checking presence.

# `get`

```elixir
@spec get(t(), non_neg_integer(), non_neg_integer()) :: Harlock.Render.Cell.t()
```

# `new`

```elixir
@spec new(non_neg_integer(), non_neg_integer()) :: t()
```

# `put`

```elixir
@spec put(t(), non_neg_integer(), non_neg_integer(), Harlock.Render.Cell.t()) :: t()
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
