Class: Roby::Queries::TaskEventGeneratorMatcher
- Inherits:
-
PlanObjectMatcher
- Object
- MatcherBase
- PlanObjectMatcher
- Roby::Queries::TaskEventGeneratorMatcher
- Defined in:
- lib/roby/queries/task_event_generator_matcher.rb
Overview
Object that allows to describe a task’s event generator and match it in the plan
It uses a task matcher to match the underlying task
Instance Attribute Summary collapse
-
#symbol ⇒ #===
readonly
The required event name.
-
#task_matcher ⇒ TaskMatcher
readonly
The task matcher that describes this event’s task.
Attributes inherited from PlanObjectMatcher
#children, #indexed_neg_predicates, #indexed_predicates, #instance, #model, #owners, #parents, #scope
Attributes inherited from MatcherBase
Instance Method Summary collapse
-
#===(object) ⇒ Boolean
Tests whether the given task event generator matches self.
-
#each_in_plan(plan) ⇒ Object
Enumerate the objects matching self in the plan.
-
#generalized ⇒ Object
Makes this matcher a generalized matcher.
-
#generalized? ⇒ Boolean
If true, self will match the specified generator as well as any other generator that is forwarded to it.
-
#initialize(task_matcher = Roby::Task.match, symbol = Queries.any) ⇒ TaskEventGeneratorMatcher
constructor
A new instance of TaskEventGeneratorMatcher.
- #match_not_generalized(object) ⇒ Object
- #plan_object_match ⇒ Object
- #to_s ⇒ Object
-
#with_name(symbol) ⇒ Object
Adds a matching object for the event’s name.
Methods inherited from PlanObjectMatcher
#executable?, #global_scope, #global_scope?, #handle_parent_child_arguments, #handle_parent_child_match, #local_scope, #local_scope?, #matches_child_constraints?, #matches_parent_constraints?, #not_self_owned, #owned_by, #self_owned, #with_child, #with_instance, #with_model, #with_parent
Methods included from DRoby::V5::Queries::PlanObjectMatcherDumper
Methods inherited from MatcherBase
#&, #add_neg_predicate, #add_predicate, declare_class_methods, #describe_failed_match, #each, #indexed_query?, #match, match_predicate, match_predicates, #negate, #reset, #to_a, #to_set, #|
Constructor Details
#initialize(task_matcher = Roby::Task.match, symbol = Queries.any) ⇒ TaskEventGeneratorMatcher
Returns a new instance of TaskEventGeneratorMatcher.
21 22 23 24 25 26 27 |
# File 'lib/roby/queries/task_event_generator_matcher.rb', line 21 def initialize(task_matcher = Roby::Task.match, symbol = Queries.any) symbol = symbol.to_s if symbol.respond_to?(:to_sym) @symbol = symbol @task_matcher = task_matcher @generalized = false super() end |
Instance Attribute Details
#symbol ⇒ #=== (readonly)
Returns the required event name.
11 12 13 |
# File 'lib/roby/queries/task_event_generator_matcher.rb', line 11 def symbol @symbol end |
#task_matcher ⇒ TaskMatcher (readonly)
Returns the task matcher that describes this event’s task.
14 15 16 |
# File 'lib/roby/queries/task_event_generator_matcher.rb', line 14 def task_matcher @task_matcher end |
Instance Method Details
#===(object) ⇒ Boolean
Tests whether the given task event generator matches self
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/roby/queries/task_event_generator_matcher.rb', line 61 def ===(object) return unless object.kind_of?(TaskEventGenerator) if match_not_generalized(object) true elsif generalized? && object.plan forwarding_graph = object.relation_graph_for( EventStructure::Forwarding ) forwarding_graph.depth_first_visit(object) do |generator| return true if match_not_generalized(generator) end false end end |
#each_in_plan(plan) ⇒ Object
Enumerate the objects matching self in the plan
84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/roby/queries/task_event_generator_matcher.rb', line 84 def each_in_plan(plan) if generalized? raise ArgumentError, "cannot resolve a generalized matcher in the plan" end return enum_for(__method__, plan) unless block_given? @task_matcher.each_in_plan(plan) do |task| event = task.event(symbol) yield(event) if self === event end end |
#generalized ⇒ Object
Makes this matcher a generalized matcher
32 33 34 35 |
# File 'lib/roby/queries/task_event_generator_matcher.rb', line 32 def generalized @generalized = true self end |
#generalized? ⇒ Boolean
Returns if true, self will match the specified generator as well as any other generator that is forwarded to it. If false (the default) only the specified generator will match.
19 |
# File 'lib/roby/queries/task_event_generator_matcher.rb', line 19 attr_predicate :generalized? |
#match_not_generalized(object) ⇒ Object
77 78 79 80 81 |
# File 'lib/roby/queries/task_event_generator_matcher.rb', line 77 def match_not_generalized(object) (symbol === object.symbol.to_s) && plan_object_match(object) && (task_matcher === object.task) end |
#plan_object_match ⇒ Object
55 |
# File 'lib/roby/queries/task_event_generator_matcher.rb', line 55 alias plan_object_match === |
#to_s ⇒ Object
51 52 53 |
# File 'lib/roby/queries/task_event_generator_matcher.rb', line 51 def to_s "#{task_matcher}.#{symbol}" end |
#with_name(symbol) ⇒ Object
Adds a matching object for the event’s name
42 43 44 45 46 47 48 49 |
# File 'lib/roby/queries/task_event_generator_matcher.rb', line 42 def with_name(symbol) @symbol = if symbol.respond_to?(:to_sym) then symbol.to_s else symbol end self end |