Minga.Parser.BufferRegistry (Minga v0.1.0)

Copy Markdown View Source

Pure identity and lifecycle registry owned by Minga.Parser.Manager.

Summary

Functions

Returns the parser ID for a buffer PID.

Returns the number of registrations.

Returns all registrations.

Evicts stale unprotected buffers and returns their identities.

Returns a registration by PID.

Returns whether a DOWN message belongs to the current monitor.

Creates an empty editor-buffer registry.

Allocates the next manager-owned parser version.

Replaces an existing registration; unknown PIDs are ignored.

Records the process monitor owned by the parser manager.

Registers a buffer, preserving identity only while its inert configuration is unchanged.

Returns whether a parser ID belongs to an editor buffer.

Returns the buffer PID for a parser ID.

Resets parser versions and marks every registration for full resync.

Refreshes activity for a registered buffer.

Unregisters a buffer and returns its former parser ID and monitor.

Types

meta()

register_status()

@type register_status() :: :new | :existing | {:replaced, pos_integer()}

t()

@type t() :: %Minga.Parser.BufferRegistry{
  entries: %{required(pid()) => meta()},
  ids: %{required(pid()) => pos_integer()},
  last_active_at: %{required(pid()) => integer()},
  monitors: %{required(pid()) => reference()},
  next_id: pos_integer(),
  parse_version: non_neg_integer(),
  pids: %{required(pos_integer()) => pid()}
}

Functions

buffer_id(buffer_registry, buffer_pid)

@spec buffer_id(t(), pid()) :: pos_integer() | nil

Returns the parser ID for a buffer PID.

count(buffer_registry)

@spec count(t()) :: non_neg_integer()

Returns the number of registrations.

entries(buffer_registry)

@spec entries(t()) :: %{required(pid()) => meta()}

Returns all registrations.

evict_inactive(registry, protected_pids, ttl_ms, now)

@spec evict_inactive(t(), [pid()], non_neg_integer(), integer()) ::
  {[{pid(), pos_integer(), reference() | nil}], t()}

Evicts stale unprotected buffers and returns their identities.

fetch(buffer_registry, buffer_pid)

@spec fetch(t(), pid()) :: {:ok, meta()} | :error

Returns a registration by PID.

monitored?(buffer_registry, buffer_pid, ref)

@spec monitored?(t(), pid(), reference()) :: boolean()

Returns whether a DOWN message belongs to the current monitor.

new()

@spec new() :: t()

Creates an empty editor-buffer registry.

next_parse_version(registry)

@spec next_parse_version(t()) :: {pos_integer(), t()}

Allocates the next manager-owned parser version.

put(registry, buffer_pid, registration)

@spec put(t(), pid(), meta()) :: t()

Replaces an existing registration; unknown PIDs are ignored.

put_monitor(registry, buffer_pid, monitor_ref)

@spec put_monitor(t(), pid(), reference()) :: t()

Records the process monitor owned by the parser manager.

register(registry, buffer_pid, config, now)

@spec register(t(), pid(), Minga.Parser.BufferConfig.t(), integer()) ::
  {pos_integer(), register_status(), t()}

Registers a buffer, preserving identity only while its inert configuration is unchanged.

registered_id?(buffer_registry, buffer_id)

@spec registered_id?(t(), non_neg_integer()) :: boolean()

Returns whether a parser ID belongs to an editor buffer.

resolve(buffer_registry, buffer_id)

@spec resolve(t(), non_neg_integer()) :: pid() | nil

Returns the buffer PID for a parser ID.

restart_all(registry)

@spec restart_all(t()) :: t()

Resets parser versions and marks every registration for full resync.

touch(registry, buffer_pid, now)

@spec touch(t(), pid(), integer()) :: t()

Refreshes activity for a registered buffer.

unregister(registry, buffer_pid)

@spec unregister(t(), pid()) :: {pos_integer() | nil, reference() | nil, t()}

Unregisters a buffer and returns its former parser ID and monitor.