class Bio::Velvet::Graph::ArcArray

Public Class Methods

new() click to toggle source
# File lib/bio-velvet/graph.rb, line 311
def initialize
  # Internal structure is hash of [node_id1, node_id2] => Array of arcs
  @internal_structure = {}
  @node_to_keys = {}
end

Public Instance Methods

delete(arc) click to toggle source
# File lib/bio-velvet/graph.rb, line 347
def delete(arc)
  key = [arc.begin_node_id, arc.end_node_id].sort
  @internal_structure[key].delete arc
  # If there is no other arcs with this same key, clean up more
  if @internal_structure[key].empty?
    @internal_structure.delete key
    @node_to_keys[key[0]].delete key
    @node_to_keys[key[1]].delete key
    @node_to_keys[key[0]] = nil if @node_to_keys[key[0]].nil? or @node_to_keys[key[0]].empty?
    @node_to_keys[key[1]] = nil if @node_to_keys[key[1]].nil? or @node_to_keys[key[1]].empty?
  end
end
each(&block) click to toggle source
# File lib/bio-velvet/graph.rb, line 364
def each(&block)
  @internal_structure.each do |internal_id, arcs|
    arcs.each do |arc|
      block.yield arc
    end
  end
end
get_arcs_by_node_id(node_id1, node_id2=nil) click to toggle source

Return all arcs into or out of the given node_id, or

# File lib/bio-velvet/graph.rb, line 330
def get_arcs_by_node_id(node_id1, node_id2=nil)
  if node_id2.nil?
    next_keys = @node_to_keys[node_id1]
    return [] if next_keys.nil?
    next_keys.uniq.collect do |key|
      @internal_structure[key]
    end.flatten
  else
    to_return = @internal_structure[[node_id1, node_id2].sort]
    if to_return.nil?
      return []
    else
      return to_return
    end
  end
end
length() click to toggle source
# File lib/bio-velvet/graph.rb, line 360
def length
  @internal_structure.values.flatten.length
end
push(arc) click to toggle source
# File lib/bio-velvet/graph.rb, line 317
def push(arc)
  key = [arc.begin_node_id, arc.end_node_id].sort
  @internal_structure[key] ||= []
  @internal_structure[key].push arc
  @node_to_keys[arc.begin_node_id] ||= []
  @node_to_keys[arc.begin_node_id].push key
  unless arc.begin_node_id == arc.end_node_id
    @node_to_keys[arc.end_node_id] ||= []
    @node_to_keys[arc.end_node_id].push key
  end
end