class Roby::EventConstraints::UnboundTaskPredicate::BinaryCommutativePredicate

Representation of a binary combination of predicates that is commutative. It is used to simplify expressions, especially for explanations.

Attributes

predicates[R]

Public Class Methods

new(left, right) click to toggle source
# File lib/roby/event_constraints.rb, line 476
def initialize(left, right)
    @predicates = [left, right]
end

Public Instance Methods

==(pred) click to toggle source
# File lib/roby/event_constraints.rb, line 482
def ==(pred)
    pred.kind_of?(self.class) &&
        ((predicates[0] == pred.predicates[0] && predicates[1] == pred.predicates[1]) ||
        (predicates[0] == pred.predicates[1] && predicates[1] == pred.predicates[0]))
end
each_atomic_predicate() { |predicates| ... } click to toggle source
# File lib/roby/event_constraints.rb, line 530
def each_atomic_predicate(&block)
    2.times do |i|
        if predicates[i].kind_of?(self.class)
            predicates[i].each_atomic_predicate(&block)
        else
            yield(predicates[i])
        end
    end
end
explain_false(task) click to toggle source
# File lib/roby/event_constraints.rb, line 499
def explain_false(task)
    return if evaluate(task)

    reason0 = predicates[0].explain_false(task)
    reason1 = predicates[1].explain_false(task)
    if reason0 && reason1
        Explanation.new(false, self, [reason0, reason1])
    else
        reason0 || reason1
    end
end
explain_static(task) click to toggle source
# File lib/roby/event_constraints.rb, line 510
def explain_static(task)
    return if !static?(task)

    reason0 = predicates[0].explain_static(task)
    reason1 = predicates[1].explain_static(task)
    if reason0 && reason1
        Explanation.new(nil, self, [reason0, reason1])
    else
        reason0 || reason1
    end
end
explain_true(task) click to toggle source
# File lib/roby/event_constraints.rb, line 488
def explain_true(task)
    return if !evaluate(task)

    reason0 = predicates[0].explain_true(task)
    reason1 = predicates[1].explain_true(task)
    if reason0 && reason1
        Explanation.new(true, self, [reason0, reason1])
    else
        reason0 || reason1
    end
end
has_atomic_predicate?(pred) click to toggle source
# File lib/roby/event_constraints.rb, line 522
def has_atomic_predicate?(pred)
    pred = pred.to_unbound_task_predicate
    each_atomic_predicate do |p|
        return(true) if p == pred
    end
    false
end
required_events() click to toggle source
# File lib/roby/event_constraints.rb, line 480
def required_events; predicates[0].required_events | predicates[1].required_events end