Class: ParallelTsort::Sorter

Inherits:
Object
  • Object
show all
Includes:
TSort
Defined in:
lib/parallel_tsort/sorter.rb

Instance Method Summary collapse

Constructor Details

#initializeSorter

Returns a new instance of Sorter.



7
8
9
# File 'lib/parallel_tsort/sorter.rb', line 7

def initialize
  @deps = []
end

Instance Method Details

#add_dependency(name, deps = []) ⇒ Object

Raises:



11
12
13
14
# File 'lib/parallel_tsort/sorter.rb', line 11

def add_dependency(name, deps=[])
  raise SelfDependentNode if deps.include?(name)
  @deps << [name, deps]
end

#run(parallel = false) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/parallel_tsort/sorter.rb', line 16

def run(parallel=false)
  result = tsort
  return result unless parallel

  groups = []
  used   = []
  result.each_with_index do |node, i|
    next if used.include?(node)

    parallel_nodes = result[i..-1].reject do |other_node|
      next if other_node == node
      next if used.include?(other_node)

      is_dependent? node, other_node
    end

    used.concat(parallel_nodes)
    groups << parallel_nodes
  end

  groups
end