class GraphReader::Graph

Attributes

adj_matrix[RW]
edges[RW]
nodes[RW]

Public Class Methods

new(edge_path) click to toggle source
# File lib/graph-reader.rb, line 10
def initialize(edge_path)
  raise ArgumentError, "expect (String), got #{edge_path.class}" unless edge_path.instance_of? String
  @nodes = []
  @edges = []
  
  init_edges(edge_path)

  @adj_map = {}
  set_adj_map(@adj_map)

  @adj_matrix = init_adj_matrix(@nodes.size)
  set_adj_matrix(@adj_matrix)
  @dim = @edges.first.attrs.size
end

Public Instance Methods

neighbor?(n1, n2) click to toggle source
# File lib/graph-reader.rb, line 25
def neighbor?(n1, n2)
  @adj_matrix[@adj_map[n1]][@adj_map[n2]] == 1
end

Private Instance Methods

add_edge(edge) click to toggle source
# File lib/graph-reader.rb, line 35
def add_edge(edge)
  new_edge = GraphReader::Edge.new(edge)
  unless duplicate_edge?(new_edge)
    @edges << new_edge
    add_node(new_edge.src)
    add_node(new_edge.dst)
  end
end
add_node(node) click to toggle source
# File lib/graph-reader.rb, line 31
def add_node(node)
  @nodes << node unless @nodes.include?(node)
end
duplicate_edge?(new_edge) click to toggle source
# File lib/graph-reader.rb, line 63
def duplicate_edge?(new_edge)
  @edges.each { |edge| return true if same_edge?(edge, new_edge) }
  false
end
init_adj_matrix(size) click to toggle source
# File lib/graph-reader.rb, line 52
def init_adj_matrix(size)
  Array.new(size) { Array.new(size, 0) }
end
same_edge?(edge1, edge2) click to toggle source
# File lib/graph-reader.rb, line 68
def same_edge?(edge1, edge2)
  edge1_src_id = edge1.src
  edge1_dst_id = edge1.dst
  edge2_src_id = edge2.src
  edge2_dst_id = edge2.dst
  return true if edge1_src_id == edge2_src_id && edge1_dst_id == edge2_dst_id
  return true if edge1_dst_id == edge2_src_id && edge1_src_id == edge2_dst_id
  false
end
set_adj_map(adj_map) click to toggle source
# File lib/graph-reader.rb, line 44
def set_adj_map(adj_map)
  adj_pos = 0
  @nodes.each do |n| 
    adj_map[n] = adj_pos
    adj_pos += 1
  end 
end
set_adj_matrix(adj_matrix) click to toggle source
# File lib/graph-reader.rb, line 56
def set_adj_matrix(adj_matrix)
  @edges.each do |e|
    adj_matrix[@adj_map[e.src]][@adj_map[e.dst]] = 1
    adj_matrix[@adj_map[e.dst]][@adj_map[e.src]] = 1
  end
end