Class: Pure::Driver

Inherits:
Object
  • Object
show all
Defined in:
lib/pure/driver.rb

Instance Method Summary collapse

Constructor Details

#initialize(worker_class, mod, num_parallel, overrides) ⇒ Driver

Returns a new instance of Driver.



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/pure/driver.rb', line 4

def initialize(worker_class, mod, num_parallel, overrides)
  @worker = worker_class.new
  @worker.define_function_begin(mod, num_parallel)
  @driver = CompTree.build do |driver|
    overrides.each_pair { |name, value|
      driver.define(name.to_sym) { value }
    }
    mod.each_function { |name, spec|
      if elems = spec[:elems]
        build_fun_map(driver, name, elems)
      end
      node = driver.nodes[name]
      unless node and node.function
        function = @worker.define_function(spec)
        driver.define(name, *spec[:args], &function)
      end
    }
    driver
  end
  @worker.define_function_end
end

Instance Method Details

#build_fun_map(driver, name, elems) ⇒ Object



36
37
38
39
40
# File 'lib/pure/driver.rb', line 36

def build_fun_map(driver, name, elems)
  elems.each_with_index { |(elem_name, elem), i|
    driver.define(elem_name) { elem }
  }
end

#compute(root) ⇒ Object



26
27
28
29
30
# File 'lib/pure/driver.rb', line 26

def compute(root)
  @driver.compute(root, @worker.num_parallel)
rescue CompTree::NoFunctionError => exception
  raise Pure::NoFunctionError.new(exception.node_name)
end

#each_function_name(&block) ⇒ Object



32
33
34
# File 'lib/pure/driver.rb', line 32

def each_function_name(&block)
  @driver.nodes.each_key(&block)
end