class MGraph::VertexEdgeTable

Public Class Methods

new() click to toggle source
# File lib/mgraph/vertex_edge_table.rb, line 3
def initialize
  @vertex_edges = {}
end

Public Instance Methods

<<(edge) click to toggle source
# File lib/mgraph/vertex_edge_table.rb, line 7
def << edge
  add_edge(edge)
  self
end
add_edge(edge) click to toggle source
# File lib/mgraph/vertex_edge_table.rb, line 12
def add_edge edge
  edge.vertices.each do |vertex|
    (@vertex_edges[vertex] ||= Set.new) << edge
  end
end
edges() click to toggle source
# File lib/mgraph/vertex_edge_table.rb, line 18
def edges
  @vertex_edges.each_value.reduce(Set.new, :+).freeze
end
incident_edges(vertex) click to toggle source
# File lib/mgraph/vertex_edge_table.rb, line 22
def incident_edges vertex
  @vertex_edges.fetch(vertex, Set.new)
end
neighbors(vertex) click to toggle source
# File lib/mgraph/vertex_edge_table.rb, line 26
def neighbors vertex
  adjacencies = incident_edges(vertex).map(&:vertices).reduce(:+) || Set.new
  adjacencies - [vertex]
end
vertices() click to toggle source
# File lib/mgraph/vertex_edge_table.rb, line 31
def vertices
  @vertex_edges.keys.to_set
end