Class: Roby::EventConstraints::UnboundTaskPredicate::SingleEvent

Inherits:
Roby::EventConstraints::UnboundTaskPredicate show all
Defined in:
lib/roby/event_constraints.rb

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

Methods inherited from Roby::EventConstraints::UnboundTaskPredicate

#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_nameObject (readonly)

The generator name as a symbol



764
765
766
# File 'lib/roby/event_constraints.rb', line 764

def event_name
  @event_name
end

#required_eventsObject (readonly)

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

#==(pred) ⇒ Object



775
# File 'lib/roby/event_constraints.rb', line 775

def ==(pred); pred.kind_of?(SingleEvent) && pred.event_name == event_name end

#codeObject

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

#from_nowObject



818
819
820
821
# File 'lib/roby/event_constraints.rb', line 818

def from_now
    @deadline = Time.now
    self
end

#neverObject



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

Returns:

  • (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

#to_sObject



831
# File 'lib/roby/event_constraints.rb', line 831

def to_s; "#{event_name}?" end