ptolemy.domains.de.lib
Class Queue

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.Transformer
                              extended by ptolemy.domains.de.lib.Queue
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, Actor, Executable, FiringsRecordable, Initializable, TypedActor, Changeable, Debuggable, DebugListener, Derivable, Instantiable, ModelErrorHandler, MoMLExportable, Moveable, Nameable
Direct Known Subclasses:
SharedQueue

public class Queue
extends Transformer

This actor implements a queue. When a token is received on the input port, it is stored in the queue. When the trigger port receives a token, the oldest element in the queue is produced on the output. If there is no element in the queue when a token is received on the trigger port, then no output is produced. In this circumstance, if persistentTrigger is true then the next time an input is received, it is sent immediately to the output.

The inputs can be of any token type, and the output is constrained to be of a type at least that of the input. If the capacity parameter is negative or zero (the default), then the capacity is infinite. Otherwise, the capacity is given by that parameter, and inputs received when the queue is full are discarded. Whenever the size of the queue changes, the new size is produced on the size output port. If an input arrives at the same time that an output is produced, then the size port gets two events at the same time.

Since:
Ptolemy II 2.0
Version:
$Id: Queue.java 57040 2010-01-27 20:52:32Z cxh $
Author:
Steve Neuendorffer and Edward A. Lee
See Also:
Serialized Form
Accepted Rating:
Yellow (eal)
Proposed Rating:
Yellow (eal)

Nested Class Summary
 
Nested classes/interfaces inherited from class ptolemy.kernel.Entity
Entity.ContainedObjectsIterator
 
Field Summary
private  boolean _persistentTrigger
          An indicator of whether a trigger token was received in the last fire() method invocation.
protected  FIFOQueue _queue
          The FIFOQueue.
protected  int _removeTokens
          The number of tokens that should be removed from the queue in postfire().
protected  Token _token
          Token received in the fire() method for inclusion in the queue in the postfire() method.
 Parameter capacity
          The capacity of the queue.
 Parameter persistentTrigger
          If set to true, then if a trigger arrives when the queue is empty, it is remembered, and the next time an input arrives, it is sent immediately to the output.
 TypedIOPort size
          The current size of the queue.
 TypedIOPort trigger
          The trigger port, which has undeclared type.
 
Fields inherited from class ptolemy.actor.lib.Transformer
input, output
 
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
Queue(CompositeEntity container, java.lang.String name)
          Construct an actor with the given container and name.
 
Method Summary
 void attributeChanged(Attribute attribute)
          React to a change in an attribute.
 java.lang.Object clone(Workspace workspace)
          Clone the actor into the specified workspace.
 void fire()
          Put a new input token on the queue and/or produce output data from the queue.
 void initialize()
          Clear the cached input tokens.
 boolean postfire()
          Commit additions or removals from the queue.
 boolean prefire()
          If there is no input on the trigger port, return false, indicating that this actor does not want to fire.
 void preinitialize()
          Override the base class to declare that the output does not depend on the input in a firing.
 void wrapup()
          Clear the queue tokens.
 
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, pruneDependencies, recordFiring, removeActorFiringListener, removeDependency, removeInitializable, setContainer, stop, stopFire, terminate
 
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, 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, removeInitializable
 
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

capacity

public Parameter capacity
The capacity of the queue. If the value is positive, then it specifies the capacity of the queue. If it is negative or 0, then it specifies that the capacity is infinite. This is an integer with default 0.


persistentTrigger

public Parameter persistentTrigger
If set to true, then if a trigger arrives when the queue is empty, it is remembered, and the next time an input arrives, it is sent immediately to the output. This is a boolean with default false.


size

public TypedIOPort size
The current size of the queue. This port produces an output whenever the size changes. It has type int.


trigger

public TypedIOPort trigger
The trigger port, which has undeclared type. If this port receives a token, then the oldest token in the queue will be emitted on the output port.


_queue

protected FIFOQueue _queue
The FIFOQueue.


_removeTokens

protected int _removeTokens
The number of tokens that should be removed from the queue in postfire().


_token

protected Token _token
Token received in the fire() method for inclusion in the queue in the postfire() method.


_persistentTrigger

private boolean _persistentTrigger
An indicator of whether a trigger token was received in the last fire() method invocation.

Constructor Detail

Queue

public Queue(CompositeEntity container,
             java.lang.String name)
      throws NameDuplicationException,
             IllegalActionException
Construct an actor with the given container and name.

Parameters:
container - The container.
name - The name of this actor.
Throws:
IllegalActionException - If the actor cannot be contained by the proposed container.
NameDuplicationException - If the container already has an actor with this name.
Method Detail

attributeChanged

public void attributeChanged(Attribute attribute)
                      throws IllegalActionException
React to a change in an attribute. If the attribute is capacity, then change the capacity of the queue. If the size of the queue currently exceeds the specified capacity, then throw an exception.

Overrides:
attributeChanged in class NamedObj
Parameters:
attribute - The attribute that changed.
Throws:
IllegalActionException - If the current size of the queue exceeds the specified capacity.

clone

public java.lang.Object clone(Workspace workspace)
                       throws java.lang.CloneNotSupportedException
Clone the actor into the specified workspace. This calls the base class and then sets the ports.

Overrides:
clone in class AtomicActor
Parameters:
workspace - The workspace for the new object.
Returns:
A new actor.
Throws:
java.lang.CloneNotSupportedException - If a derived class has has an attribute that cannot be cloned.
See Also:
NamedObj.exportMoML(Writer, int, String), NamedObj.setDeferringChangeRequests(boolean)

fire

public void fire()
          throws IllegalActionException
Put a new input token on the queue and/or produce output data from the queue. Specifically, if there is a new token on the input port, then put it on the input queue. Then, if there is a token in the trigger port and the queue is not empty, then send the oldest token on the queue to the output port. Send the resulting queue size to the output size output port.

Specified by:
fire in interface Executable
Overrides:
fire in class AtomicActor
Throws:
IllegalActionException - If getting tokens from input and trigger ports or sending token to output throws it.

initialize

public void initialize()
                throws IllegalActionException
Clear the cached input tokens.

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

postfire

public boolean postfire()
                 throws IllegalActionException
Commit additions or removals from the queue.

Specified by:
postfire in interface Executable
Overrides:
postfire in class AtomicActor
Returns:
True.
Throws:
IllegalActionException - If the superclass throws it.

prefire

public boolean prefire()
                throws IllegalActionException
If there is no input on the trigger port, return false, indicating that this actor does not want to fire. This has the effect of leaving input values in the input ports, if there are any.

Specified by:
prefire in interface Executable
Overrides:
prefire in class AtomicActor
Returns:
True if this actor is ready for firing, false otherwise.
Throws:
IllegalActionException - If there is no director.

preinitialize

public void preinitialize()
                   throws IllegalActionException
Override the base class to declare that the output does not depend on the input in a firing.

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

wrapup

public void wrapup()
            throws IllegalActionException
Clear the queue tokens.

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