-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patharbiter.rb
More file actions
40 lines (33 loc) · 783 Bytes
/
arbiter.rb
File metadata and controls
40 lines (33 loc) · 783 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
require_relative 'arbiter_event_selectors/default_event_selector'
class Arbiter
attr_accessor :program, :selector
def initialize(program = nil)
@program = program
@selector = DefaultEventSelector.new
end
def next_event
p "arbiting next event"
legal = program.legal_events
puts "legal events: #{legal}"
# if legal.empty?
# ask_for_external
# end
ev = select_event legal
# puts "event selected is #{ev.inspect}"
# if !ev && !program.in_pipe.empty?
# ev = program.in_pipe.shift
# end
if ev
program.le = ev
program.bp_loop
else
program.back_to_caller
end
end
def select_event(legal)
@selector.select_event legal
end
def ask_for_external
program.back_to_caller
end
end