module Roby::Coordination::Script
Common logic for script-based coordination models
Constants
- DeadInstruction
Attributes
current_instruction[R]
instructions[R]
Public Instance Methods
dependency_options_for(toplevel, task, roles)
click to toggle source
Calls superclass method
# File lib/roby/coordination/script.rb, line 154 def dependency_options_for(toplevel, task, roles) options = super if current_instruction.respond_to?(:task) && current_instruction.task == task options = options.merge(current_instruction.dependency_options) end options end
finished?()
click to toggle source
# File lib/roby/coordination/script.rb, line 195 def finished? instructions.empty? && !@current_instruction end
jump_to(target)
click to toggle source
# File lib/roby/coordination/script.rb, line 180 def jump_to(target) # Verify that the jump is valid if current_instruction != target && !instructions.find { |ins| ins == target } raise ArgumentError, "#{target} is not an instruction in #{self}" end if current_instruction != target current_instruction.cancel end while instructions.first != target instructions.shift end step end
prepare()
click to toggle source
# File lib/roby/coordination/script.rb, line 135 def prepare @instructions = Array.new resolve_instructions @current_instruction = nil root_task.stop_event.on do |context| current_instruction.cancel if current_instruction instructions.each do |ins| ins.cancel end end end
resolve_instructions()
click to toggle source
# File lib/roby/coordination/script.rb, line 148 def resolve_instructions model.instructions.each do |ins| instructions << instance_for(ins) end end
step()
click to toggle source
# File lib/roby/coordination/script.rb, line 162 def step if current_instruction && !current_instruction.disabled? return end while @current_instruction = instructions.shift if !current_instruction.disabled? if !current_instruction.execute(self) break end end end rescue LocalizedError => e raise e rescue Exception => e raise CodeError.new(e, root_task), e.message, e.backtrace end