Class: Roby::EventConstraints::UnboundTaskPredicate::SingleEvent
Overview
Subclass of UnboundTaskPredicate to handle single event generators
This is the class that is e.g. returned by UnboundPredicateSupport#to_unbound_task_predicate
Instance Attribute Summary collapse
Instance Method Summary
collapse
#and, #compile, #evaluate, #negate, #or, #pretty_print, #to_unbound_task_predicate
Constructor Details
#initialize(event_name) ⇒ SingleEvent
Returns a new instance of SingleEvent.
769
770
771
772
773
|
# File 'lib/roby/event_constraints.rb', line 769
def initialize(event_name)
@event_name = event_name
@required_events = [event_name].to_set
super()
end
|
Instance Attribute Details
#event_name ⇒ Object
The generator name as a symbol
764
765
766
|
# File 'lib/roby/event_constraints.rb', line 764
def event_name
@event_name
end
|
#required_events ⇒ Object
The set of events required to compute this predicate. This is used by UnboundTaskPredicate#compile
767
768
769
|
# File 'lib/roby/event_constraints.rb', line 767
def required_events
@required_events
end
|
Instance Method Details
775
|
# File 'lib/roby/event_constraints.rb', line 775
def ==(pred); pred.kind_of?(SingleEvent) && pred.event_name == event_name end
|
Code generation to create the overall evaluated predicate
778
779
780
781
782
783
784
|
# File 'lib/roby/event_constraints.rb', line 778
def code
if @deadline
return "task_#{event_name} && (task_#{event_name}.time.to_f > #{@deadline.to_f})"
else
"!!task_#{event_name}"
end
end
|
#explain_false(task) ⇒ Object
795
796
797
798
799
800
|
# File 'lib/roby/event_constraints.rb', line 795
def explain_false(task)
generator = task.event(event_name)
if !generator.emitted?
Explanation.new(false, self, [generator])
end
end
|
#explain_static(task) ⇒ Object
801
802
803
804
805
806
807
808
|
# File 'lib/roby/event_constraints.rb', line 801
def explain_static(task)
event = task.event(event_name)
if event.last
Explanation.new(true, self, [event.last])
elsif event.unreachable?
Explanation.new(nil, self, [event])
end
end
|
#explain_true(task) ⇒ Object
Returns an Explanation object that explains why self is true. Note that it is valid only if evaluate(task) actually returned true (it will silently return an invalid explanation if evaluate(task) returns false).
790
791
792
793
794
|
# File 'lib/roby/event_constraints.rb', line 790
def explain_true(task)
if event = task.event(event_name).last
Explanation.new(true, self, [event])
end
end
|
#followed_by(event) ⇒ Object
827
828
829
|
# File 'lib/roby/event_constraints.rb', line 827
def followed_by(event)
FollowedBy.new(self, event.to_unbound_task_predicate)
end
|
818
819
820
821
|
# File 'lib/roby/event_constraints.rb', line 818
def from_now
@deadline = Time.now
self
end
|
814
815
816
|
# File 'lib/roby/event_constraints.rb', line 814
def never
Never.new(self)
end
|
#not_followed_by(event) ⇒ Object
823
824
825
|
# File 'lib/roby/event_constraints.rb', line 823
def not_followed_by(event)
NotFollowedBy.new(self, event.to_unbound_task_predicate)
end
|
#static?(task) ⇒ Boolean
809
810
811
812
|
# File 'lib/roby/event_constraints.rb', line 809
def static?(task)
event = task.event(event_name)
evaluate(task) || event.unreachable?
end
|
831
|
# File 'lib/roby/event_constraints.rb', line 831
def to_s; "#{event_name}?" end
|