Um segmento temporal do grafo, inspirado no GraphJet.
Cada segmento contém um subconjunto de arestas inseridas em um intervalo
de tempo. Quando o segmento atinge max_edges, um novo é criado.
Segmentos antigos são read-only e podem ser removidos pelo Pruner.
Armazenamento
Usa ETS com tipo :bag para listas de adjacência, evitando cópia
de listas grandes. Duas tabelas por segmento:
ltr(left-to-right) — source → {target, edge_type}rtl(right-to-left) — target → {source, edge_type}
Summary
Functions
Destrói as tabelas ETS do segmento, liberando memória.
Número de arestas no segmento.
Verifica se o segmento está cheio.
Insere uma aresta com peso no segmento. Retorna {:ok, segment} se sucesso
ou :full se o segmento atingiu a capacidade máxima.
Retorna os vizinhos de entrada (incoming) de um vértice neste segmento.
Cada entrada é {source, type, weight}.
Retorna os vizinhos de entrada filtrados por tipo de aresta.
Retorna os vizinhos de saída (outgoing) de um vértice neste segmento.
Cada entrada é {target, type, weight}.
Retorna os vizinhos de saída filtrados por tipo de aresta.
Cria um novo segmento com tabelas ETS.
Types
@type t() :: %MeliGraph.Graph.Segment{ created_at: integer(), edge_count: non_neg_integer(), id: non_neg_integer(), ltr: :ets.tid(), max_edges: pos_integer(), rtl: :ets.tid() }
Functions
@spec destroy(t()) :: :ok
Destrói as tabelas ETS do segmento, liberando memória.
@spec edge_count(t()) :: non_neg_integer()
Número de arestas no segmento.
Verifica se o segmento está cheio.
@spec insert(t(), non_neg_integer(), non_neg_integer(), atom(), float()) :: {:ok, t()} | :full
Insere uma aresta com peso no segmento. Retorna {:ok, segment} se sucesso
ou :full se o segmento atingiu a capacidade máxima.
@spec neighbors_in(t(), non_neg_integer()) :: [{non_neg_integer(), atom(), float()}]
Retorna os vizinhos de entrada (incoming) de um vértice neste segmento.
Cada entrada é {source, type, weight}.
@spec neighbors_in(t(), non_neg_integer(), atom()) :: [non_neg_integer()]
Retorna os vizinhos de entrada filtrados por tipo de aresta.
@spec neighbors_out(t(), non_neg_integer()) :: [{non_neg_integer(), atom(), float()}]
Retorna os vizinhos de saída (outgoing) de um vértice neste segmento.
Cada entrada é {target, type, weight}.
@spec neighbors_out(t(), non_neg_integer(), atom()) :: [non_neg_integer()]
Retorna os vizinhos de saída filtrados por tipo de aresta.
@spec new(non_neg_integer(), pos_integer()) :: t()
Cria um novo segmento com tabelas ETS.