class Funk::Graph

Public Class Methods

new(map) click to toggle source
# File lib/funk/graph.rb, line 8
def initialize(map)
  fn_map = map.each_with_object({}) do |(name, impl), fn_map|
    fn = fn_map[name] = Fn.new(name, impl)
    fn.dependencies.each do |dep_name|
      fn_map[dep_name] ||= InputFn.new(dep_name)
    end
  end
  accum = Hash.new { |h,k| h[k] = [] }
  @nodes = fn_map.each_with_object(accum) do |(name, fn), graph|
    graph[fn] = []
    fn.dependencies.each do |dep_name|
      graph[fn] << fn_map[dep_name]
    end
  end
end

Public Instance Methods

tsort_each_child(n, &b) click to toggle source
# File lib/funk/graph.rb, line 28
def tsort_each_child(n, &b)
  @nodes[n].each(&b)
end
tsort_each_node(&b) click to toggle source
# File lib/funk/graph.rb, line 32
def tsort_each_node(&b)
  @nodes.each_key(&b)
end