MeliGraph.Graph.IdMap (MeliGraph v0.2.1)

Copy Markdown View Source

Mapeamento bidirecional entre IDs externos (qualquer termo) e IDs internos (inteiros compactos). Usa uma tabela ETS global por instância para manter consistência cross-segment.

Design

Duas tabelas ETS:

  • forward — external_id → internal_id
  • reverse — internal_id → external_id

Um counter atômico mantém o próximo ID interno disponível.

Summary

Functions

Retorna todos os pares {internal_id, external_id} mapeados. Usado pelo GlobalRank para iterar sobre todos os vértices do grafo.

Returns a specification to start this module under a supervisor.

Retorna o ID externo para um ID interno, ou nil se não existe.

Retorna o ID interno para um ID externo, ou nil se não existe.

Retorna o ID interno para um ID externo, criando um novo mapeamento se necessário.

Retorna o número total de IDs mapeados.

Types

t()

@type t() :: %MeliGraph.Graph.IdMap{
  counter: :atomics.atomics_ref(),
  forward: :ets.tid(),
  reverse: :ets.tid()
}

Functions

all_ids(conf)

@spec all_ids(MeliGraph.Config.t()) :: [{non_neg_integer(), term()}]

Retorna todos os pares {internal_id, external_id} mapeados. Usado pelo GlobalRank para iterar sobre todos os vértices do grafo.

child_spec(init_arg)

Returns a specification to start this module under a supervisor.

See Supervisor.

get_external(conf, internal_id)

@spec get_external(MeliGraph.Config.t(), non_neg_integer()) :: term() | nil

Retorna o ID externo para um ID interno, ou nil se não existe.

get_internal(conf, external_id)

@spec get_internal(MeliGraph.Config.t(), term()) :: non_neg_integer() | nil

Retorna o ID interno para um ID externo, ou nil se não existe.

get_or_create(conf, external_id)

@spec get_or_create(MeliGraph.Config.t(), term()) :: non_neg_integer()

Retorna o ID interno para um ID externo, criando um novo mapeamento se necessário.

size(conf)

@spec size(MeliGraph.Config.t()) :: non_neg_integer()

Retorna o número total de IDs mapeados.

start_link(opts)