Class BooleanSelect

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

    public class BooleanSelect
    extends TypedAtomicActor
    Conditionally merge the streams at two input ports depending on the value of the boolean control input. In the first firing, this actor consumes a token from the control input port. The token at the control input specifies the input port that should be read from in the next firing. If the control token is false, then the falseInput port is used, otherwise the trueInput port is used. In the next firing, tokens are consumed from the specified port and sent to the output port.

    The actor is able to fire if either it needs a new control token and there is a token on the control port, or it has read a control token and there is a token on every channel of the specified input port.

    If the input port that is read has width greater than an output port, then some input tokens will be discarded (those on input channels for which there is no corresponding output channel).

    Because tokens are immutable, the same Token is sent to the output, rather than a copy. The trueInput and falseInput port may receive Tokens of any type.

    This actor is designed to be used with the DDF or PN director. It should not be used with SDF because the number of tokens it consumes is not fixed. It probably also does not make sense to use it with SR or DE, because it takes two firings to transfer a token to the output. In those domains, BooleanMultiplexor makes more sense. Unlike BooleanMultiplexor actor, this actor does not discard input tokens on the port that it does not read.

    Since:
    Ptolemy II 2.0
    Version:
    $Id$
    Author:
    Steve Neuendorffer, Adam Cataldo, Edward A. Lee, Gang Zhou
    Pt.AcceptedRating:
    Red (neuendor)
    Pt.ProposedRating:
    Green (neuendor)
    • Field Detail

      • trueInput

        public TypedIOPort trueInput
        Input for tokens on the true path. The type can be anything.
      • falseInput

        public TypedIOPort falseInput
        Input for tokens on the false path. The type can be anything.
      • control

        public TypedIOPort control
        Input that selects one of the other input ports. The type is BooleanToken.
      • output

        public TypedIOPort output
        The output port. The type is at least the type of trueInput and falseInput
      • trueInput_tokenConsumptionRate

        public Parameter trueInput_tokenConsumptionRate
        This parameter provides token consumption rate for trueInput. The type is int.
      • falseInput_tokenConsumptionRate

        public Parameter falseInput_tokenConsumptionRate
        This parameter provides token consumption rate for falseInput. The type is int.
      • control_tokenConsumptionRate

        public Parameter control_tokenConsumptionRate
        This parameter provides token consumption rate for control. The type is int.
    • Method Detail

      • clone

        public java.lang.Object clone​(Workspace workspace)
                               throws java.lang.CloneNotSupportedException
        Clone this actor into the specified workspace. The new actor is not added to the directory of that workspace (you must do this yourself if you want it there). The result is a new actor with the same ports as the original, but no connections and no container. A container must be set before much can be done with this actor.
        Overrides:
        clone in class TypedAtomicActor
        Parameters:
        workspace - The workspace for the cloned object.
        Returns:
        A new ComponentEntity.
        Throws:
        java.lang.CloneNotSupportedException - If cloned ports cannot have as their container the cloned entity (this should not occur), or if one of the attributes cannot be cloned.
        See Also:
        NamedObj.exportMoML(Writer, int, String), NamedObj.setDeferringChangeRequests(boolean)
      • fire

        public void fire()
                  throws IllegalActionException
        Read a token from the control port or from the input designated by the previously read input from the control port. In the latter case, send to the token read to the output. In the former case, send nothing to the output.
        Specified by:
        fire in interface Executable
        Overrides:
        fire in class AtomicActor<TypedIOPort>
        Throws:
        IllegalActionException - If there is no director.
      • prefire

        public boolean prefire()
                        throws IllegalActionException
        If the mode is to read a control token, then return true if the control input has a token. Otherwise, return true if every channel of the input port specified by the most recently read control input has a token.
        Specified by:
        prefire in interface Executable
        Overrides:
        prefire in class AtomicActor<TypedIOPort>
        Returns:
        False if there are not enough tokens to fire.
        Throws:
        IllegalActionException - If there is no director.