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