class Roby::EventConstraints::UnboundTaskPredicate::NotFollowedBy

Representation of UnboundPredicateSupport#not_followed_by

See documentation from UnboundTaskPredicate

Public Instance Methods

code() click to toggle source
# File lib/roby/event_constraints.rb, line 750
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) click to toggle source
# File lib/roby/event_constraints.rb, line 709
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) click to toggle source
# File lib/roby/event_constraints.rb, line 720
def explain_static(task)
    return if !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) click to toggle source
# File lib/roby/event_constraints.rb, line 701
def explain_true(task)
    return if !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) click to toggle source
# File lib/roby/event_constraints.rb, line 736
def static?(task)
    event0 = task.event(predicates[0].event_name)
    event1 = task.event(predicates[1].event_name)

    if event0.unreachable?
        (!predicates[0].evaluate(task) || # stay false as first event can't emit
         !evaluate(task) || # stay false as first event can't emit
         predicates[1].static?(task))
    elsif event1.unreachable?
        evaluate(task) # stays true as the second event cannot
                       # appear after the first anymore
    end
end
to_s() click to toggle source
# File lib/roby/event_constraints.rb, line 755
def to_s; "#{predicates[0].event_name}.not_followed_by(#{predicates[1].event_name})" end