Persistent indexed resident-row sequence.
Rows are held in an implicit chunk treap. Rank split/concatenation copy only
the search paths and the at-most-64-row boundary chunks; untouched prefix and
suffix subtrees are shared verbatim. Buffer positions are therefore not
stored eagerly in suffix payloads: payload_at/2 and payload_range/3
project positional metadata when a caller actually reads a row.
Summary
Functions
Materializes all entries. Reserved for hydration/debug/oracle paths.
Returns one immutable node projection for renderer-owned interaction indexes.
Returns the immutable root used by renderer-owned interaction indexes.
Locates a rank using the same traversal for local and published immutable trees.
Materializes all projected payloads. Reserved for explicit full hydration.
Applies resident positional projection to one stored payload.
Persistent rank splice. Only boundary/search chunks are copied.
Types
@type entry() :: %{id: term(), content_hash: non_neg_integer(), payload: term()}
@type node_ref() :: reference()
@type rank_header() :: {rank_node() | nil, non_neg_integer(), pos_integer(), rank_node() | nil}
@type rank_node() :: term()
@type t() :: %MingaEditor.RenderModel.Window.ResidentStore{ digest: Minga.RenderModel.Window.ContentDigest.t(), root: tree(), size: non_neg_integer(), work: work() }
@type tree() :: nil | {:chunk, node_ref(), non_neg_integer(), pos_integer(), tree(), tuple(), tree()}
@type work() :: %{ rows_visited: non_neg_integer(), rows_copied: non_neg_integer(), rows_emitted: non_neg_integer(), chunks_touched: non_neg_integer() }
Functions
@spec delete_at(t(), non_neg_integer()) :: t()
@spec digest(t()) :: Minga.RenderModel.Window.ContentDigest.t()
Materializes all entries. Reserved for hydration/debug/oracle paths.
@spec entry(term(), non_neg_integer(), term()) :: entry()
@spec entry_at(t(), non_neg_integer()) :: {:ok, entry()} | :error
@spec insert_at(t(), non_neg_integer(), entry()) :: t()
@spec interaction_node(tree()) :: {:ok, {node_ref(), non_neg_integer(), tree(), non_neg_integer(), tuple(), tree()}} | :error
Returns one immutable node projection for renderer-owned interaction indexes.
Returns the immutable root used by renderer-owned interaction indexes.
@spec locate_rank(rank_node() | nil, non_neg_integer(), (rank_node() -> {:ok, rank_header()} | :error)) :: {:ok, rank_node(), non_neg_integer()} | :error
Locates a rank using the same traversal for local and published immutable trees.
@spec new() :: t()
@spec payload_at(t(), non_neg_integer()) :: {:ok, term()} | :error
@spec payload_range(t(), non_neg_integer(), non_neg_integer()) :: [term()]
Materializes all projected payloads. Reserved for explicit full hydration.
@spec project_payload(term(), non_neg_integer()) :: term()
Applies resident positional projection to one stored payload.
@spec rebuild(t(), MapSet.t(non_neg_integer()), (non_neg_integer() -> entry())) :: t()
@spec replace_at(t(), non_neg_integer(), entry()) :: t()
@spec replace_range(t(), non_neg_integer(), non_neg_integer(), [entry()]) :: t()
Persistent rank splice. Only boundary/search chunks are copied.
@spec size(t()) :: non_neg_integer()