Class UnionMerge

  • All Implemented Interfaces:
    java.lang.Cloneable, Actor, Executable, FiringsRecordable, Initializable, TypedActor, Changeable, Debuggable, DebugListener, Derivable, Instantiable, ModelErrorHandler, MoMLExportable, Moveable, Nameable

    public class UnionMerge
    extends TypedAtomicActor
    On each firing, read all tokens from every input port and wrap each token into a UnionToken of which the label matches the name of the originating input port. All produced UnionTypes are sent to the output port in a single firing.

    The type of the output port is a UnionType of which the labels much match the names of the input ports. This is achieved using two type constraints: The labels for the output UnionToken are the names of the input ports. This is achieved using two type constraints:

    • output ≥ {| x = typeOf(inputPortX), y = typeOf(inputPortY), .. |} , which requires the types of the input ports to be compatible with the corresponding types in the output union.
    • each input ≤ the type of the corresponding field inside the output union, which is similar to the usual default constraints, however this constraint establishes a dependency between the inputs of this actor and the fields inside the output union, instead of just between its inputs and outputs.

    Note that the output UnionType is required to contain a corresponding field for every input. However, due to the subtyping relation of UnionType that is opposite to the subtyping of RecordType, the type constraint that the output port of this actor must be greater than or equal to the GLB of the types of its receivers (implied by the connections), is always satisfied.

    To use this actor, instantiate it, and then add input ports (instances of TypedIOPort).

    Since:
    Ptolemy II 10.0
    Version:
    $Id$
    Author:
    Edward A. Lee, Haiyang Zheng, Yuhong Xiong, Marten Lohstroh
    Pt.AcceptedRating:
    Red (yuhongx)
    Pt.ProposedRating:
    Red (yuhongx)
    • Field Detail

      • output

        public TypedIOPort output
        The output port. The type of this port will be the union of the type of the input ports.
    • Method Detail

      • fire

        public void fire()
                  throws IllegalActionException
        Read all available tokens from each input port, wrap each of them into a UnionToken of which the label matches the name of the originating input port. All produced UnionTypes are sent to the output port in a single firing.
        Specified by:
        fire in interface Executable
        Overrides:
        fire in class AtomicActor<TypedIOPort>
        Throws:
        IllegalActionException - If there is no director, or the input can not be read, or the output can not be sent.
      • notifyOfNameChange

        public void notifyOfNameChange​(NamedObj object)
        React to a name change of contained ports. Update the internal mapping from names and aliases to port objects, and invalidate the resolved types.
        Overrides:
        notifyOfNameChange in class NamedObj
        Parameters:
        object - The object that changed.
      • _customTypeConstraints

        protected java.util.Set<Inequality> _customTypeConstraints()
        Set up and return two type constraints.
        • output ≥ {x = typeOf(inputPortX), y = typeOf(inputPortY), ..} , which requires the types of the input ports to be compatible with the corresponding types in the output union.
        • each input ≤ the type of the corresponding field inside the output union, which is similar to the usual default constraints, however this constraint establishes a dependency between the inputs of this actor and the fields inside the output union, instead of just between its inputs and outputs.
        Overrides:
        _customTypeConstraints in class TypedAtomicActor
        Returns:
        A set of type constraints
        See Also:
        ConstructAssociativeType, ExtractFieldType