# `Minga.RenderModel.Window.RowSlotAllocator`
[🔗](https://github.com/jsmestad/minga/blob/main/lib/minga/render_model/window/row_slot_allocator.ex#L1)

Persistent producer-owned allocator for the 28-bit row slot field.

Slots are monotonic within `{content_epoch, source_id, identity_kind}` and a
key keeps its slot for the epoch. Allocation never reuses removed keys.

# `key`

```elixir
@type key() :: term()
```

# `scope`

```elixir
@type scope() :: {non_neg_integer(), non_neg_integer(), atom()}
```

# `slot`

```elixir
@type slot() :: 0..268_435_455
```

# `t`

```elixir
@type t() :: %Minga.RenderModel.Window.RowSlotAllocator{
  next: %{optional(scope()) =&gt; non_neg_integer()},
  slots: %{optional({scope(), key()}) =&gt; slot()}
}
```

# `allocate`

```elixir
@spec allocate(t(), scope(), key()) :: {:ok, slot(), t()} | :reset_required
```

Returns an existing slot or monotonically allocates one.

# `new`

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

Creates an empty allocator.

---

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