module Roby::EventStructure::TemporalConstraints::EventFiredHook

Public Instance Methods

fired(event) click to toggle source

Overloaded to register deadlines that this event's emissions define

Calls superclass method
# File lib/roby/event_structure/temporal_constraints.rb, line 391
def fired(event)
    super

    # Verify that the event matches any running constraint
    parent, intervals = find_failed_temporal_constraint(event.time)
    if parent
        plan.execution_engine.add_error TemporalConstraintViolation.new(event, parent, intervals.intervals)
    end
    parent, count, allowed_interval, since = find_failed_occurence_constraint(false)
    if parent
        plan.execution_engine.add_error OccurenceConstraintViolation.new(event, parent, count, allowed_interval, since)
    end

    deadlines = plan.emission_deadlines
    # Remove the deadline that this emission fullfills (if any)
    deadlines.remove_deadline_for(self, event.time)
    # Add new deadlines
    each_forward_temporal_constraint do |target, disjoint_set|
        next if disjoint_set.intervals.empty?

        max_diff = disjoint_set.boundaries[1]
        is_fullfilled = target.history.any? do |target_event|
            diff = event.time - target_event.time
            break if diff > max_diff
            disjoint_set.include?(diff)
        end

        if !is_fullfilled
            deadlines.add(event.time + disjoint_set.boundaries[1], event, target)
        end
    end
end