class Roby::OrGenerator

Fires when the first of its source events fires.

For instance,

a = task1.start_event
b = task2.start_event
(a | b) # will emit as soon as one of task1 and task2 are started

Or events will emit only once, unless reset is called:

a = task1.intermediate_event
b = task2.intermediate_event
or_ev = (a | b)

a.intermediate_event! # or_ev emits here
b.intermediate_event! # or_ev does *not* emit
a.intermediate_event! # or_ev does *not* emit
b.intermediate_event! # or_ev does *not* emit

or_ev.reset
b.intermediate_event! # or_ev emits here
a.intermediate_event! # or_ev does *not* emit
b.intermediate_event! # or_ev does *not* emit

The OrGenerator tracks its sources via the signalling relations, so

or_ev << c.intermediate_event

is equivalent to

c.intermediate_event.add_signal or_ev

Public Class Methods

new() click to toggle source

Creates a new OrGenerator without any sources.

Calls superclass method Roby::EventGenerator::new
# File lib/roby/or_generator.rb, line 36
def initialize
    super do |context|
        emit_if_first(context)
    end
    @active = true
end

Public Instance Methods

<<(generator) click to toggle source

Adds generator to the sources of this event

# File lib/roby/or_generator.rb, line 82
def << (generator)
    generator.add_signal self
    self
end
empty?() click to toggle source

True if there is no source events

# File lib/roby/or_generator.rb, line 44
def empty?; parent_objects(EventStructure::Signal).empty? end
removed_signal_parent(parent) click to toggle source
Calls superclass method
# File lib/roby/or_generator.rb, line 74
def removed_signal_parent(parent)
    super
    if !emitted? && each_parent_object(EventStructure::Signal).all? { |ev| ev.unreachable? }
        unreachable!
    end
end
reset() click to toggle source

Or generators will emit only once, unless this method is called. See the documentation of OrGenerator for an example.

# File lib/roby/or_generator.rb, line 48
def reset
    @active = true
    each_parent_object(EventStructure::Signal) do |source|
        if source.respond_to?(:reset)
            source.reset
        end
    end
end