class Databoom::Digraph
Attributes
edges[R]
vertices[R]
Public Class Methods
new()
click to toggle source
# File lib/databoom/digraph.rb, line 24 def initialize @vertices = [] @edges = [] end
Public Instance Methods
add_edge(source_value, sink_value, label = nil)
click to toggle source
NOTE: label has to be unique. Only one edge with the same source & sink can exist with no label
# File lib/databoom/digraph.rb, line 48 def add_edge(source_value, sink_value, label = nil) find_edge(source_value, sink_value, label) || create_edge(source_value, sink_value, label) end
add_vertex(vertex_value, label = nil)
click to toggle source
NOTE: Vertex
values are uniq
# File lib/databoom/digraph.rb, line 31 def add_vertex(vertex_value, label = nil) find_vertex(vertex_value) || create_vertex(vertex_value, label) end
del_vertex(vertex_value)
click to toggle source
# File lib/databoom/digraph.rb, line 35 def del_vertex(vertex_value) @vertices.reject! { |iter_vertex| iter_vertex.value == vertex_value } end
edge?(source_vertex_value, sink_vertex_value, label = nil)
click to toggle source
# File lib/databoom/digraph.rb, line 43 def edge?(source_vertex_value, sink_vertex_value, label = nil) !find_edge(source_vertex_value, sink_vertex_value, label).nil? end
find_path(origin_value, terminal_value, path = [])
click to toggle source
# File lib/databoom/digraph.rb, line 64 def find_path(origin_value, terminal_value, path = []) return nil unless vertex?(origin_value) && vertex?(terminal_value) return path if find_vertex(origin_value) end
in_edges(vertex_value)
click to toggle source
# File lib/databoom/digraph.rb, line 58 def in_edges(vertex_value) return nil unless vertex?(vertex_value) @edges.select {|edge| edge.sink = find_vertex(vertex_value) } end
out_edges(vertex_value)
click to toggle source
# File lib/databoom/digraph.rb, line 52 def out_edges(vertex_value) return nil unless vertex?(vertex_value) @edges.select {|edge| edge.source = find_vertex(vertex_value) } end
vertex?(vertex_value)
click to toggle source
# File lib/databoom/digraph.rb, line 39 def vertex?(vertex_value) !find_vertex(vertex_value).nil? end
Private Instance Methods
create_edge(source_value, sink_value, label = nil)
click to toggle source
# File lib/databoom/digraph.rb, line 79 def create_edge(source_value, sink_value, label = nil) @edges << Edge.new(find_vertex(source_value), find_vertex(sink_value), label) end
create_vertex(vertex_value, label = nil)
click to toggle source
# File lib/databoom/digraph.rb, line 87 def create_vertex(vertex_value, label = nil) @vertices << Vertex.new(vertex_value, label) end
find_edge(source_value, sink_value, label = nil)
click to toggle source
# File lib/databoom/digraph.rb, line 71 def find_edge(source_value, sink_value, label = nil) @edges.find do |iter_edge| iter_edge.source == find_vertex(source_value) && iter_edge.sink == find_vertex(sink_value) && iter_edge.label == label end end
find_vertex(vertex_value)
click to toggle source
# File lib/databoom/digraph.rb, line 83 def find_vertex(vertex_value) @vertices.find { |iter_vertex| iter_vertex.value == vertex_value } end