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