ptolemy.actor.lib
Class BooleanSelect

java.lang.Object
  extended by ptolemy.kernel.util.NamedObj
      extended by ptolemy.kernel.InstantiableNamedObj
          extended by ptolemy.kernel.Entity
              extended by ptolemy.kernel.ComponentEntity
                  extended by ptolemy.actor.AtomicActor
                      extended by ptolemy.actor.TypedAtomicActor
                          extended by ptolemy.actor.lib.BooleanSelect
All Implemented Interfaces:
java.io.Serializable, 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, but it can also be used with SR, DE, and possibly other domains. It should not be used with SDF because the number of tokens it consumes is not fixed.

This actor is similar to the BooleanMultiplexor actor, except that it does not discard input tokens on the port that it does not read.

Since:
Ptolemy II 2.0
Version:
$Id: BooleanSelect.java 57040 2010-01-27 20:52:32Z cxh $
Author:
Steve Neuendorffer, Adam Cataldo, Edward A. Lee, Gang Zhou
See Also:
Serialized Form
Accepted Rating:
Red (neuendor)
Proposed Rating:
Green (neuendor)

Nested Class Summary
 
Nested classes/interfaces inherited from class ptolemy.kernel.Entity
Entity.ContainedObjectsIterator
 
Field Summary
private  BooleanToken _control
          The most recently read control token.
private  boolean _controlUsed
          Indicator that the control token was used in the fire method.
private static IntToken _one
          A final static IntToken with value 1.
private static IntToken _zero
          A final static IntToken with value 0.
 TypedIOPort control
          Input that selects one of the other input ports.
 Parameter control_tokenConsumptionRate
          This parameter provides token consumption rate for control.
 TypedIOPort falseInput
          Input for tokens on the false path.
 Parameter falseInput_tokenConsumptionRate
          This parameter provides token consumption rate for falseInput.
 TypedIOPort output
          The output port.
 TypedIOPort trueInput
          Input for tokens on the true path.
 Parameter trueInput_tokenConsumptionRate
          This parameter provides token consumption rate for trueInput.
 
Fields inherited from class ptolemy.actor.AtomicActor
_actorFiringListeners, _initializables, _notifyingActorFiring, _stopRequested
 
Fields inherited from class ptolemy.kernel.util.NamedObj
_changeListeners, _changeLock, _changeRequests, _debugging, _debugListeners, _elementName, _isPersistent, _verbose, _workspace, ATTRIBUTES, CLASSNAME, COMPLETE, CONTENTS, DEEP, FULLNAME, LINKS
 
Fields inherited from interface ptolemy.actor.Executable
COMPLETED, NOT_READY, STOP_ITERATING
 
Constructor Summary
BooleanSelect(CompositeEntity container, java.lang.String name)
          Construct an actor in the specified container with the specified name.
 
Method Summary
 java.lang.Object clone(Workspace workspace)
          Clone this actor into the specified workspace.
 void fire()
          Read a token from each input port.
 void initialize()
          Initialize this actor so that the falseInput is read from until a token arrives on the control input.
 boolean postfire()
          Return true, unless stop() has been called, in which case, return false.
 boolean prefire()
          If the mode is to read a control token, then return true if the control input has a token.
 
Methods inherited from class ptolemy.actor.TypedAtomicActor
_addPort, _fireAt, _fireAt, attributeTypeChanged, clone, newPort, typeConstraintList, typeConstraints
 
Methods inherited from class ptolemy.actor.AtomicActor
_actorFiring, _actorFiring, addActorFiringListener, addInitializable, connectionsChanged, createReceivers, declareDelayDependency, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, isFireFunctional, isStrict, iterate, newReceiver, outputPortList, preinitialize, pruneDependencies, recordFiring, removeActorFiringListener, removeDependency, removeInitializable, setContainer, stop, stopFire, terminate, wrapup
 
Methods inherited from class ptolemy.kernel.ComponentEntity
_adjustDeferrals, _checkContainer, _getContainedObject, _propagateExistence, getContainer, instantiate, isAtomic, isOpaque, moveDown, moveToFirst, moveToIndex, moveToLast, moveUp, propagateExistence, setName
 
Methods inherited from class ptolemy.kernel.Entity
_description, _exportMoMLContents, _removePort, _validateSettables, connectedPortList, connectedPorts, containedObjectsIterator, getAttribute, getPort, getPorts, linkedRelationList, linkedRelations, portList, removeAllPorts, setClassDefinition, uniqueName
 
Methods inherited from class ptolemy.kernel.InstantiableNamedObj
_setParent, exportMoML, getChildren, getElementName, getParent, getPrototypeList, isClassDefinition, isWithinClassDefinition
 
Methods inherited from class ptolemy.kernel.util.NamedObj
_addAttribute, _adjustOverride, _attachText, _cloneFixAttributeFields, _debug, _debug, _debug, _debug, _debug, _getIndentPrefix, _isMoMLSuppressed, _markContentsDerived, _propagateValue, _recordDecoratedAttributes, _removeAttribute, _splitName, _stripNumericSuffix, addChangeListener, addDebugListener, attributeChanged, attributeList, attributeList, deepContains, depthInHierarchy, description, description, event, executeChangeRequests, exportMoML, exportMoML, exportMoML, exportMoML, exportMoMLPlain, getAttribute, getAttributes, getChangeListeners, getClassName, getDecoratorAttribute, getDecoratorAttributes, getDerivedLevel, getDerivedList, getDisplayName, getFullName, getModelErrorHandler, getName, getName, getSource, handleModelError, isDeferringChangeRequests, isOverridden, isPersistent, lazyContainedObjectsIterator, message, propagateValue, propagateValues, removeChangeListener, removeDebugListener, requestChange, setClassName, setDeferringChangeRequests, setDerivedLevel, setDisplayName, setModelErrorHandler, setPersistent, setSource, sortContainedObjects, toplevel, toString, validateSettables, workspace
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface ptolemy.actor.Actor
createReceivers, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, newReceiver, outputPortList
 
Methods inherited from interface ptolemy.actor.Executable
isFireFunctional, isStrict, iterate, stop, stopFire, terminate
 
Methods inherited from interface ptolemy.actor.Initializable
addInitializable, preinitialize, removeInitializable, wrapup
 
Methods inherited from interface ptolemy.kernel.util.Nameable
description, getContainer, getDisplayName, getFullName, getName, getName, setName
 
Methods inherited from interface ptolemy.kernel.util.Derivable
getDerivedLevel, getDerivedList, propagateValue
 

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.


_control

private BooleanToken _control
The most recently read control token.


_controlUsed

private boolean _controlUsed
Indicator that the control token was used in the fire method.


_zero

private static final IntToken _zero
A final static IntToken with value 0.


_one

private static final IntToken _one
A final static IntToken with value 1.

Constructor Detail

BooleanSelect

public BooleanSelect(CompositeEntity container,
                     java.lang.String name)
              throws IllegalActionException,
                     NameDuplicationException
Construct an actor in the specified container with the specified name.

Parameters:
container - The container.
name - The name of this actor within the container.
Throws:
IllegalActionException - If the actor cannot be contained by the proposed container.
NameDuplicationException - If the name coincides with an actor already in the container.
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 AtomicActor
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 each input port. If the token from the control input is true, then output the token consumed from the trueInput port, otherwise output the token from the falseInput port.

Specified by:
fire in interface Executable
Overrides:
fire in class AtomicActor
Throws:
IllegalActionException - If there is no director.

initialize

public void initialize()
                throws IllegalActionException
Initialize this actor so that the falseInput is read from until a token arrives on the control input.

Specified by:
initialize in interface Initializable
Overrides:
initialize in class AtomicActor
Throws:
IllegalActionException - If the parent class throws it.

postfire

public boolean postfire()
                 throws IllegalActionException
Return true, unless stop() has been called, in which case, return false.

Specified by:
postfire in interface Executable
Overrides:
postfire in class AtomicActor
Returns:
True if execution can continue into the next iteration.
Throws:
IllegalActionException - If the base class throws it.

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
Returns:
False if there are not enough tokens to fire.
Throws:
IllegalActionException - If there is no director.