Sha256: 45556543d0f793418fcf49471501b86d4bff9329aeabb4b00741deac544fd681
Contents?: true
Size: 1.45 KB
Versions: 4
Compression:
Stored size: 1.45 KB
Contents
module Roby module TaskStructure Roby::Task.inherited_enumerable(:conflicting_model, :conflicting_models) { ValueSet.new } module ModelConflicts def conflicts_with(model) conflicting_models << model model.conflicting_models << self end def conflicts_with?(model) each_conflicting_model do |m| return true if m == model end false end end Roby::Task.extend ModelConflicts relation :Conflicts, :noinfo => true do def conflicts_with(task) task.event(:stop).add_precedence event(:start) add_conflicts(task) end def self.included(klass) # :nodoc: klass.extend ModelConflicts super end end end module ConflictEventHandling def calling(context) super if defined? super return unless symbol == :start # Check for conflicting tasks result = nil task.each_conflicts do |conflicting_task| result ||= ValueSet.new result << conflicting_task end if result Roby.decision_control.conflict(task, result) end # Add the needed conflict relations models = task.class.conflicting_models for model in models if candidates = plan.task_index.by_model[model] for t in candidates t.conflicts_with task if t.pending? end end end end def fired(event) super if defined? super if symbol == :stop TaskStructure::Conflicts.remove(task) end end end Roby::TaskEventGenerator.include ConflictEventHandling end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
roby-0.7.1 | lib/roby/relations/conflicts.rb |
roby-0.7.2 | lib/roby/relations/conflicts.rb |
roby-0.7.3 | lib/roby/relations/conflicts.rb |
roby-0.7 | lib/roby/relations/conflicts.rb |