Class: Roby::Tasks::Sequence
- Inherits:
-
TaskAggregator
- Object
- DistributedObject
- PlanObject
- Roby::Task
- TaskAggregator
- Roby::Tasks::Sequence
- Defined in:
- lib/roby/tasks/sequence.rb
Overview
Creates an ordered sequence of tasks.
Tasks added to this aggregator are started one after the other. Task(i+1) is started when Task(i) has finished successfully. The Sequence finishes successfully when the last task finished.
Constant Summary
Constants included from Models::Arguments
Models::Arguments::NO_DEFAULT_ARGUMENT
Instance Attribute Summary
Attributes inherited from TaskAggregator
Attributes inherited from Roby::Task
#arguments, #bound_events, #data, #execute_handlers, #failed_to_start_time, #failure_event, #failure_reason, #history, #poll_handlers, #quarantine_reason, #state_machine, #terminal_event
Attributes included from GUI::RelationsCanvasTask
Attributes inherited from PlanObject
#addition_time, #executable, #execution_engine, #finalization_handlers, #finalization_time, #model, #plan, #promise_executor, #removed_at
Attributes included from Roby::Transaction::Proxying::Cache
#transaction_forwarder_module, #transaction_proxy_module
Attributes included from Relations::DirectedRelationSupport
Attributes inherited from DistributedObject
Instance Method Summary collapse
-
#<<(task) ⇒ Object
Adds
task
at the end of the sequence. -
#child_of(task = nil) ⇒ Object
Quite often, a sequence is meant to implement a higher-level functionality.
-
#name ⇒ Object
:nodoc:.
-
#to_sequence ⇒ Object
:nodoc:.
-
#unshift(task) ⇒ Object
Adds
task
at the beginning of the sequence.
Methods inherited from TaskAggregator
#delete, #each_task, #empty?, #initialize
Methods inherited from Roby::Task
#+, #abstract?, #action_state_machine, #add_child_object, #add_coordination_object, #apply_terminal_flags, #as_plan, #as_service, #assign_argument, #assign_arguments, #can_merge?, #can_replace?, #check_emission_validity, #clear_events_external_relations, #clear_relations, #commit_transaction, #compatible_state?, #compute_replacement_candidates, #compute_subplan_replacement_operation, #compute_task_replacement_operation, #create_fresh_copy, create_script, #create_transaction_proxy, #current_state, #current_state?, #do_not_reuse, #do_poll, #each_coordination_object, #each_event, #each_exception_handler, #emit, #end_time, #ensure_poll_handler_called, #event, #event_model, #executable=, #executable?, #execute, #failed_to_start!, #failed_to_start?, #filter_events_from_strongly_related_tasks, #find_event, #fired_event, #forcefully_terminate, #forward_to, #freeze_delayed_arguments, #fullfills?, #fully_instanciated?, #garbage!, #goal, goal, #handle_exception, #has_argument?, #has_event?, #initialize, #initialize_copy, #initialize_replacement, #inspect, #interruptible?, #invalidate_terminal_flag, #invalidated_terminal_flag?, #last_event, #lifetime, #list_unset_arguments, #mark_failed_to_start, #match, #meaningful_arguments, #null?, #on, #partially_instanciated?, #plan=, #poll, #poll_handler, #pretty_print, #promise, #quarantined!, #quarantined?, #related_events, #related_tasks, #remove_coordination_object, #remove_poll_handler, #replace_by, #replace_subplan_by, #resolve_goals, #resolve_state_sources, #respawn, #reusable?, #running?, script, #script, #signals, #simulate, #start_time, state, #state, #terminal_events, #to_execution_exception, #to_s, #to_task, #transform_candidates_into_operations, #transition!, #update_task_status, #update_terminal_flag, #updated_data, #use_fault_response_table, #when_finalized, #|
Methods included from Models::Task
#abstract, #all_models, #as_plan, #can_merge?, #causal_link, #clear_model, #compute_terminal_events, #define_command_method, #define_event_methods, define_method_unless_present, #discover_terminal_events, #enum_events, #event, #event_model, #find_event_model, #forward, #from, #from_state, #fullfills?, #instantiate_event_relations, #interruptible, #invalidate_template, #match, model_attribute_list, model_relation, #on, #on_exception, #poll, #precondition, #provided_services, #query, #signal, #template, #terminal_events, #terminates, #to_coordination_task, #to_execution_exception_matcher, #update_terminal_flag, #with_arguments
Methods included from Models::Arguments
#argument, #arguments, #default_argument, #fullfills?, #meaningful_arguments
Methods included from Roby::TaskStateHelper
#import_events_to_roby, #namespace, #namespace=, #refine_running_state, #state_machine
Methods included from DRoby::Identifiable
Methods included from DRoby::V5::Models::TaskDumper
Methods included from DRoby::V5::ModelDumper
#droby_dump, #droby_marshallable?
Methods included from DRoby::V5::TaskDumper
Methods included from GUI::GraphvizTask
#apply_layout, #dot_label, #to_dot_events
Methods included from GUI::GraphvizPlanObject
#apply_layout, #dot_label, #to_dot
Methods included from GUI::RelationsCanvasTask
#display, #display_create, #display_name, #display_time_end, #display_time_start, #layout_events, to_svg, #update_graphics
Methods included from GUI::RelationsCanvasPlanObject
#display, #display_create, #display_events, #display_name, #display_parent
Methods included from ExceptionHandlingObject
#add_error, #handle_exception, #pass_exception
Methods inherited from PlanObject
#add_child_object, #apply_relation_changes, #as_plan, #can_finalize?, #commit_transaction, #concrete_model, #connection_space, #each_finalization_handler, #each_in_neighbour_merged, #each_out_neighbour_merged, #each_plan_child, #engine, #executable?, #finalized!, #finalized?, #forget_peer, #fullfills?, #garbage!, #garbage?, #initialize, #initialize_copy, #initialize_replacement, #merged_relations, #promise, #read_write?, #real_object, #remotely_useful?, #replace_by, #replace_subplan_by, #root_object, #root_object?, #subscribed?, #transaction_proxy?, #transaction_stack, #update_on?, #updated_by?, #when_finalized
Methods included from Models::PlanObject
#child_plan_object, #finalization_handler, #match, #when_finalized
Methods included from Relations::DirectedRelationSupport
#[], #[]=, #add_child_object, #add_parent_object, #child_object?, #child_objects, #clear_vertex, #each_child_object, #each_in_neighbour, #each_out_neighbour, #each_parent_object, #each_relation, #each_relation_graph, #each_relation_sorted, #each_root_relation_graph, #enum_child_objects, #enum_parent_objects, #enum_relations, #leaf?, #parent_object?, #parent_objects, #related_object?, #related_objects, #relation_graph_for, #relations, #remove_child_object, #remove_children, #remove_parent_object, #remove_parents, #remove_relations, #root?, #sorted_relations
Methods inherited from DistributedObject
#add_owner, #clear_owners, #initialize, #initialize_copy, #owned_by?, #remove_owner
Constructor Details
This class inherits a constructor from Roby::Tasks::TaskAggregator
Instance Method Details
#<<(task) ⇒ Object
Adds task
at the end of the sequence
80 81 82 83 84 85 86 87 88 89 |
# File 'lib/roby/tasks/sequence.rb', line 80 def <<(task) raise "trying to do Sequence#<< on a finished sequence" if finished? connect_start(task) if @tasks.empty? connect_stop(task) @tasks << task depends_on task self end |
#child_of(task = nil) ⇒ Object
Quite often, a sequence is meant to implement a higher-level functionality. In this case, it is better to not use a Sequence task at all, but instead create the sequence as dependency of a high-level task instance.
#to_task transfers the underlying sequence to the task given as argument. If task
is a task model instead of a task instance, it first creates a new instance of this model and returns it.
For instance:
seq = (Sequence.new <<
GoTo.new(target: a) <<
Pickup.new(object: b) <<
GoTo.new(target: c)
mission = GetObject.new(object: b)
seq.child_of(mission)
33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/roby/tasks/sequence.rb', line 33 def child_of(task = nil) return super() unless task task = task.new unless task.kind_of?(Roby::Task) @tasks.each { |t| task.depends_on t } task.start_event.signals @tasks.first.start_event @tasks.last.success_event.forward_to task.success_event delete task end |
#name ⇒ Object
:nodoc:
10 11 12 |
# File 'lib/roby/tasks/sequence.rb', line 10 def name # :nodoc: @name || @tasks.map(&:name).join("+") end |
#to_sequence ⇒ Object
:nodoc:
91 92 93 |
# File 'lib/roby/tasks/sequence.rb', line 91 def to_sequence # :nodoc: self end |
#unshift(task) ⇒ Object
Adds task
at the beginning of the sequence
66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/roby/tasks/sequence.rb', line 66 def unshift(task) if running? || finished? raise "trying to do Sequence#unshift on a running or finished sequence" end connect_start(task) connect_stop(task) if @tasks.empty? @tasks.unshift(task) depends_on task self end |