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_idreverse— 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
@type t() :: %MeliGraph.Graph.IdMap{ counter: :atomics.atomics_ref(), forward: :ets.tid(), reverse: :ets.tid() }
Functions
@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.
Returns a specification to start this module under a supervisor.
See Supervisor.
@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.
@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.
@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.
@spec size(MeliGraph.Config.t()) :: non_neg_integer()
Retorna o número total de IDs mapeados.