ptolemy.backtrack.automatic.ptolemy.actor.lib
Class OrderedMerge

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.backtrack.automatic.ptolemy.actor.lib.OrderedMerge
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, Actor, Executable, FiringsRecordable, Initializable, TypedActor, Rollbackable, Changeable, Debuggable, DebugListener, Derivable, Instantiable, ModelErrorHandler, MoMLExportable, Moveable, Nameable

public class OrderedMerge
extends TypedAtomicActor
implements Rollbackable

This actor merges two monotonically nondecreasing streams of tokens into one monotonically nondecreasing stream. On each firing, it reads data from one of the inputs. On the first firing, it simply records that token. On the second firing, it reads data from the other input and outputs the smaller of the recorded token and the one it just read. If they are equal, then it outputs the recorded token. It then records the larger token. On each subsequent firing, it reads a token from the input port that did not provide the recorded token, and produces at the output the smaller of the recorded token and the one just read. Each time it produces an output token, it also produces true on the selectedA output if the output token came from inputA, and false if it came from inputB.

If both input sequences are nondecreasing, then the output sequence will be nondecreasing. Note that if the inputs are not nondecreasing, then the output is rather complex. The key is that in each firing, it produces the smaller of the recorded token and the token it is currently reading.

Since:
Ptolemy II 2.0.1
Version:
$Id: OrderedMerge.java 57040 2010-01-27 20:52:32Z cxh $
Author:
Edward A. Lee
See Also:
Serialized Form
Accepted Rating:
Red (eal)
Proposed Rating:
Red (eal)

Nested Class Summary
 
Nested classes/interfaces inherited from class ptolemy.kernel.Entity
Entity.ContainedObjectsIterator
 
Field Summary
private  ScalarToken _lastProduced
          The last produced token.
private  TypedIOPort _nextPort
          The port from which to read next.
private static IntToken _one
          A final static IntToken with value 1.
private  boolean _readFromA
          Indicator of whether the _recordedToken was read from A.
private  ScalarToken _recordedToken
          The recorded token.
private  ScalarToken _tentativeLastProduced
          The tentative last produced token.
private  TypedIOPort _tentativeNextPort
          The tentative port from which to read next.
private  boolean _tentativeReadFromA
          Tentative indicator of having read from A.
private  ScalarToken _tentativeRecordedToken
          The tentative recorded token.
private static IntToken _zero
          A final static IntToken with value 0.
protected  Checkpoint $CHECKPOINT
           
private  FieldRecord $RECORD$_lastProduced
           
private  FieldRecord $RECORD$_nextPort
           
private  FieldRecord $RECORD$_readFromA
           
private  FieldRecord $RECORD$_recordedToken
           
private  FieldRecord $RECORD$_tentativeLastProduced
           
private  FieldRecord $RECORD$_tentativeNextPort
           
private  FieldRecord $RECORD$_tentativeReadFromA
           
private  FieldRecord $RECORD$_tentativeRecordedToken
           
protected  CheckpointRecord $RECORD$$CHECKPOINT
           
private  FieldRecord[] $RECORDS
           
 Parameter eliminateDuplicates
          If true, eliminate duplicate tokens in the output stream.
 TypedIOPort inputA
          The first input port, which accepts any scalar token.
 Parameter inputA_tokenConsumptionRate
          The token consumption rate for inputA.
 TypedIOPort inputB
          The second input port, which accepts any scalar token with the same type as the first input port.
 Parameter inputB_tokenConsumptionRate
          The token consumption rate for inputB.
 TypedIOPort output
          The output port, which has the same type as the input ports.
 TypedIOPort selectedA
          Output port indicating whether the output token came from inputA.
 
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
OrderedMerge(CompositeEntity container, java.lang.String name)
          Construct an actor with the given container and name.
 
Method Summary
protected  TypedIOPort _getNextPort()
          Return the port that this actor will read from on the next invocation of the fire() method.
private  ScalarToken $ASSIGN$_lastProduced(ScalarToken newValue)
           
private  TypedIOPort $ASSIGN$_nextPort(TypedIOPort newValue)
           
private  boolean $ASSIGN$_readFromA(boolean newValue)
           
private  ScalarToken $ASSIGN$_recordedToken(ScalarToken newValue)
           
private  ScalarToken $ASSIGN$_tentativeLastProduced(ScalarToken newValue)
           
private  TypedIOPort $ASSIGN$_tentativeNextPort(TypedIOPort newValue)
           
private  boolean $ASSIGN$_tentativeReadFromA(boolean newValue)
           
private  ScalarToken $ASSIGN$_tentativeRecordedToken(ScalarToken newValue)
           
 void $COMMIT(long timestamp)
          Commit changes up to the given timestamp, but not including changes made at timestamp and afterward.
 Checkpoint $GET$CHECKPOINT()
          Get the checkpoint object that monitors this rollbackable object.
 void $RESTORE(long timestamp, boolean trim)
          Restore a previous state to all the private fields of this rollbackable object.
 java.lang.Object $SET$CHECKPOINT(Checkpoint checkpoint)
          Set the checkpoint object of this rollbackable object.
 java.lang.Object clone(Workspace workspace)
          Clone the actor into the specified workspace.
 void fire()
          Read one token from the port that did not provide the recorded token (or inputA, on the first firing), and output the smaller of the recorded token or the newly read token.
 void initialize()
          Initialize this actor to indicate that no token is recorded.
 boolean postfire()
          Commit the recorded 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, prefire, 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, prefire, 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

$CHECKPOINT

protected transient Checkpoint $CHECKPOINT

eliminateDuplicates

public Parameter eliminateDuplicates
If true, eliminate duplicate tokens in the output stream. This is a boolean that defaults to false.


inputA

public TypedIOPort inputA
The first input port, which accepts any scalar token.


inputA_tokenConsumptionRate

public Parameter inputA_tokenConsumptionRate
The token consumption rate for inputA.


inputB

public TypedIOPort inputB
The second input port, which accepts any scalar token with the same type as the first input port.


inputB_tokenConsumptionRate

public Parameter inputB_tokenConsumptionRate
The token consumption rate for inputB.


output

public TypedIOPort output
The output port, which has the same type as the input ports.


selectedA

public TypedIOPort selectedA
Output port indicating whether the output token came from inputA.


_lastProduced

private ScalarToken _lastProduced
The last produced token. Used to eliminate duplicates.


_nextPort

private TypedIOPort _nextPort
The port from which to read next.


_one

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


_readFromA

private boolean _readFromA
Indicator of whether the _recordedToken was read from A.


_recordedToken

private ScalarToken _recordedToken
The recorded token.


_tentativeLastProduced

private ScalarToken _tentativeLastProduced
The tentative last produced token. Used to eliminate duplicates.


_tentativeReadFromA

private boolean _tentativeReadFromA
Tentative indicator of having read from A.


_tentativeRecordedToken

private ScalarToken _tentativeRecordedToken
The tentative recorded token.


_tentativeNextPort

private TypedIOPort _tentativeNextPort
The tentative port from which to read next.


_zero

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


$RECORD$$CHECKPOINT

protected transient CheckpointRecord $RECORD$$CHECKPOINT

$RECORD$_lastProduced

private transient FieldRecord $RECORD$_lastProduced

$RECORD$_nextPort

private transient FieldRecord $RECORD$_nextPort

$RECORD$_readFromA

private transient FieldRecord $RECORD$_readFromA

$RECORD$_recordedToken

private transient FieldRecord $RECORD$_recordedToken

$RECORD$_tentativeLastProduced

private transient FieldRecord $RECORD$_tentativeLastProduced

$RECORD$_tentativeReadFromA

private transient FieldRecord $RECORD$_tentativeReadFromA

$RECORD$_tentativeRecordedToken

private transient FieldRecord $RECORD$_tentativeRecordedToken

$RECORD$_tentativeNextPort

private transient FieldRecord $RECORD$_tentativeNextPort

$RECORDS

private transient FieldRecord[] $RECORDS
Constructor Detail

OrderedMerge

public OrderedMerge(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

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 type constraints.

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 an attribute that cannot be cloned.
See Also:
NamedObj.exportMoML(Writer, int, String), NamedObj.setDeferringChangeRequests(boolean)

fire

public void fire()
          throws IllegalActionException
Read one token from the port that did not provide the recorded token (or inputA, on the first firing), and output the smaller of the recorded token or the newly read token. If there is no token on the port to be read, then do nothing and return. If an output token is produced, then also produce true on the selectedA output if the output token came from inputA, and false if it came from inputB.

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 to indicate that no token is recorded.

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

postfire

public boolean postfire()
                 throws IllegalActionException
Commit the recorded token.

Specified by:
postfire in interface Executable
Overrides:
postfire in class AtomicActor
Returns:
True.
Throws:
IllegalActionException - Not thrown in this base class.

_getNextPort

protected TypedIOPort _getNextPort()
Return the port that this actor will read from on the next invocation of the fire() method. This will be null before the first invocation of initialize().

Returns:
The next input port.

$ASSIGN$_lastProduced

private final ScalarToken $ASSIGN$_lastProduced(ScalarToken newValue)

$ASSIGN$_nextPort

private final TypedIOPort $ASSIGN$_nextPort(TypedIOPort newValue)

$ASSIGN$_readFromA

private final boolean $ASSIGN$_readFromA(boolean newValue)

$ASSIGN$_recordedToken

private final ScalarToken $ASSIGN$_recordedToken(ScalarToken newValue)

$ASSIGN$_tentativeLastProduced

private final ScalarToken $ASSIGN$_tentativeLastProduced(ScalarToken newValue)

$ASSIGN$_tentativeReadFromA

private final boolean $ASSIGN$_tentativeReadFromA(boolean newValue)

$ASSIGN$_tentativeRecordedToken

private final ScalarToken $ASSIGN$_tentativeRecordedToken(ScalarToken newValue)

$ASSIGN$_tentativeNextPort

private final TypedIOPort $ASSIGN$_tentativeNextPort(TypedIOPort newValue)

$COMMIT

public void $COMMIT(long timestamp)
Description copied from interface: Rollbackable
Commit changes up to the given timestamp, but not including changes made at timestamp and afterward.

Specified by:
$COMMIT in interface Rollbackable
Parameters:
timestamp - The timestamp.

$RESTORE

public void $RESTORE(long timestamp,
                     boolean trim)
Description copied from interface: Rollbackable
Restore a previous state to all the private fields of this rollbackable object.

Specified by:
$RESTORE in interface Rollbackable
Parameters:
timestamp - The timestamp taken at the time when the previous state was recorded.
trim - Whether to delete the records used for the rollback.
See Also:
Checkpoint.rollback(long, boolean)

$GET$CHECKPOINT

public final Checkpoint $GET$CHECKPOINT()
Description copied from interface: Rollbackable
Get the checkpoint object that monitors this rollbackable object.

Specified by:
$GET$CHECKPOINT in interface Rollbackable
Returns:
The checkpoint object.

$SET$CHECKPOINT

public final java.lang.Object $SET$CHECKPOINT(Checkpoint checkpoint)
Description copied from interface: Rollbackable
Set the checkpoint object of this rollbackable object. A merge operation is performed on the current checkpoint object and the new checkpoint object, so that the two checkpoint objects monitor the same set of objects when this function returns.

Specified by:
$SET$CHECKPOINT in interface Rollbackable
Parameters:
checkpoint - The new checkpoint object.
Returns:
This rollbackable object itself.
See Also:
Checkpoint.setCheckpoint(Checkpoint)