module Syskit::TaskContext::Proxying

Public Instance Methods

commit_transaction() click to toggle source

Create dynamically instantiated ports on the real task

Calls superclass method
# File lib/syskit/task_context.rb, line 1120
def commit_transaction
    super if defined? super
    if specialized_model?
        Syskit::Models.merge_orogen_task_context_models(__getobj__.model.orogen_model, [model.orogen_model])
    end
end
transaction_modifies_static_ports?() click to toggle source
# File lib/syskit/task_context.rb, line 1127
def transaction_modifies_static_ports?
    new_connections_to_static = Hash.new
    each_concrete_input_connection do |source_task, source_port, sink_port, policy|
        if find_input_port(sink_port).static?
            sources = (new_connections_to_static[sink_port] ||= Set.new)
            sources << [source_task.orocos_name, source_port]
        end
    end

    each_concrete_output_connection do |source_port, sink_port, sink_task, policy|
        if find_output_port(source_port).static?
            sinks = (new_connections_to_static[source_port] ||= Set.new)
            sinks << [sink_task.orocos_name, sink_port]
        end
    end

    current_connections_to_static = Hash.new
    ActualDataFlow.each_in_neighbour(orocos_task) do |source_task|
        # Transactions neither touch ActualDataFlow nor the
        # task-to-orocos_task mapping. It's safe to check it
        # straight.
        connections = ActualDataFlow.edge_info(source_task, orocos_task)
        connections.each_key do |source_port, sink_port|
            if ActualDataFlow.static?(orocos_task, sink_port)
                sources = (current_connections_to_static[sink_port] ||= Set.new)
                sources << [source_task.name, source_port]
            end
        end
    end
    ActualDataFlow.each_out_neighbour(orocos_task) do |sink_task|
        # Transactions neither touch ActualDataFlow nor the
        # task-to-orocos_task mapping. It's safe to check it
        # straight.
        connections = ActualDataFlow.edge_info(orocos_task, sink_task)
        connections.each_key do |source_port, sink_port|
            if ActualDataFlow.static?(orocos_task, source_port)
                sinks = (current_connections_to_static[source_port] ||= Set.new)
                sinks << [sink_task.name, sink_port]
            end
        end
    end

    current_connections_to_static != new_connections_to_static
end