Class: Roby::EventConstraints::UnboundTaskPredicate::NotFollowedBy

Inherits:
BinaryCommutativePredicate show all
Defined in:
lib/roby/event_constraints.rb

Overview

Representation of UnboundPredicateSupport#not_followed_by

See documentation from UnboundTaskPredicate

Instance Attribute Summary

Attributes inherited from BinaryCommutativePredicate

#predicates

Instance Method Summary collapse

Methods inherited from BinaryCommutativePredicate

#==, #each_atomic_predicate, #has_atomic_predicate?, #initialize, #required_events

Methods inherited from Roby::EventConstraints::UnboundTaskPredicate

#and, #compile, #evaluate, #initialize, #negate, #or, #pretty_print, #to_unbound_task_predicate

Constructor Details

This class inherits a constructor from Roby::EventConstraints::UnboundTaskPredicate::BinaryCommutativePredicate

Instance Method Details

#codeObject



880
881
882
883
884
885
886
887
# File 'lib/roby/event_constraints.rb', line 880

def code
    this_event  = predicates[0].event_name
    other_event = predicates[1].event_name
    "(task_#{this_event} && ("\
        "!task_#{other_event} || task_#{other_event}.time <"\
        "task_#{this_event}.time"\
    "))"
end

#explain_false(task) ⇒ Object



825
826
827
828
829
830
831
832
833
834
835
# File 'lib/roby/event_constraints.rb', line 825

def explain_false(task)
    return if evaluate(task)

    this_generator = task.event(predicates[0].event_name)
    if !this_generator.last
        Explanation.new(false, self, [this_generator])
    else
        other_generator = task.event(predicates[1].event_name)
        Explanation.new(false, self, [other_generator.last])
    end
end

#explain_static(task) ⇒ Object



837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
# File 'lib/roby/event_constraints.rb', line 837

def explain_static(task)
    return unless static?(task)

    if predicates[0].static?(task)
        this_generator = task.event(predicates[0].event_name)
        if !predicates[0].evaluate(task) || !evaluate(task)
            Explanation.new(nil, self, [this_generator])
        else
            other_generator = task.event(predicates[1].event_name)
            Explanation.new(nil, self, [this_generator, other_generator])
        end
    else
        other_generator = task.event(predicates[1].event_name)
        Explanation.new(nil, self, [other_generator])
    end
end

#explain_true(task) ⇒ Object



816
817
818
819
820
821
822
823
# File 'lib/roby/event_constraints.rb', line 816

def explain_true(task)
    return unless evaluate(task)

    this_event = task.event(predicates[0].event_name).last
    other_generator = task.event(predicates[1].event_name)
    other_generator = other_generator.last || other_generator
    Explanation.new(true, self, [this_event, other_generator])
end

#static?(task) ⇒ Boolean

Returns:

  • (Boolean)


854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
# File 'lib/roby/event_constraints.rb', line 854

def static?(task)
    event0 = task.event(predicates[0].event_name)
    event1 = task.event(predicates[1].event_name)

    if event0.unreachable?
        # event0 is unreachable, predicate0 is static

        # Stays true if predicates0 is false as event0 can't change
        # that anymore
        return true unless predicates[0].evaluate(task)

        # Stays false if it is false, since event0 can't be emitted
        return true unless evaluate(task)

        # Stays whatever it is if predicate1 is static as well
        true if predicates[1].static?(task)
    elsif event1.unreachable?
        # Stay true if it is true as event1 can't emit
        #
        # However, if its current value is false, (event0 is
        # followed by event1), it may change as event0 can still be
        # emitted
        evaluate(task)
    end
end

#to_sObject



889
890
891
892
# File 'lib/roby/event_constraints.rb', line 889

def to_s
    "#{predicates[0].event_name}"\
        ".not_followed_by(#{predicates[1].event_name})"
end