ptolemy.domains.de.lib
Class TimeCompare

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.domains.de.kernel.DEActor
                              extended by ptolemy.domains.de.lib.TimeCompare
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, Actor, Executable, FiringsRecordable, Initializable, SequenceActor, TimedActor, TypedActor, Changeable, Debuggable, DebugListener, Derivable, Instantiable, ModelErrorHandler, MoMLExportable, Moveable, Nameable

public class TimeCompare
extends DEActor

A DE actor to compare the time stamps of events at its two input ports, and output the difference. Every time an event can be processed either at input port input1 or at input2, the event is consumed. The value that the event carries is insignificant, but the time stamp of the event is recorded in a local list. Time stamps received at the two input ports are stored in two different lists. Every time when both lists have data, the difference between the top elements of the lists is obtained, and is sent to the output port. This done by subtracting the time stamp of every top event in the list for input2 with the time stamp of every top event in the list for input1.

This actor could potentially consume an infinite amount of memory if the arrival rates of events at the two input ports are different, because one of the lists keeps growing.

Since:
Ptolemy II 8.0
Version:
$Id: TimeCompare.java 57044 2010-01-27 22:41:05Z cxh $
Author:
Thomas Huining Feng
See Also:
Serialized Form
Accepted Rating:
Red (tfeng)
Proposed Rating:
Red (tfeng)

Nested Class Summary
 
Nested classes/interfaces inherited from class ptolemy.kernel.Entity
Entity.ContainedObjectsIterator
 
Field Summary
private  java.util.List<java.lang.Double> _input1TimeStamps
          The list to store the time stamps received at input1 but have never been compared.
private  java.util.List<java.lang.Double> _input2TimeStamps
          The list to store the time stamps received at input2 but have never been compared.
 TypedIOPort input1
          The first input port.
 TypedIOPort input2
          The second input port.
 Parameter nonnegative
          A boolean parameter to decide whether inputs at input2 should be ignored if they lead to negative outputs.
 TypedIOPort output
          The output port to which difference values are sent.
 
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
TimeCompare(CompositeEntity container, java.lang.String name)
          Construct an actor with the specified container and name.
 
Method Summary
 java.lang.Object clone(Workspace workspace)
          Clone this actor into the specified workspace.
 void fire()
          Fire this actor once.
 void initialize()
          Initialize this actor.
 boolean prefire()
          Return ture if this actor can fire.
 
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, postfire, 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, postfire, 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

input1

public TypedIOPort input1
The first input port.


input2

public TypedIOPort input2
The second input port.


nonnegative

public Parameter nonnegative
A boolean parameter to decide whether inputs at input2 should be ignored if they lead to negative outputs.


output

public TypedIOPort output
The output port to which difference values are sent.


_input1TimeStamps

private java.util.List<java.lang.Double> _input1TimeStamps
The list to store the time stamps received at input1 but have never been compared.


_input2TimeStamps

private java.util.List<java.lang.Double> _input2TimeStamps
The list to store the time stamps received at input2 but have never been compared.

Constructor Detail

TimeCompare

public TimeCompare(CompositeEntity container,
                   java.lang.String name)
            throws NameDuplicationException,
                   IllegalActionException
Construct an actor with the specified container and name. This is protected because there is no reason to create an instance of this class, but derived classes will want to invoke the constructor of the superclass.

Parameters:
container - The container.
name - The name.
Throws:
IllegalActionException - If the entity 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 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
Fire this actor once. If there are events at its input ports, they are immediately consumed, and their time stamps are recorded in a list. If the two internal lists for the two input signals both have data, then outputs are sent to the output port, which are the difference between the time stamps in the two lists.

Specified by:
fire in interface Executable
Overrides:
fire in class AtomicActor
Throws:
IllegalActionException - If thrown when trying to consume input events or produce output events.

initialize

public void initialize()
                throws IllegalActionException
Initialize this actor.

Specified by:
initialize in interface Initializable
Overrides:
initialize in class AtomicActor
Throws:
IllegalActionException - Never thrown.

prefire

public boolean prefire()
                throws IllegalActionException
Return ture if this actor can fire. This actor can fire if prefire() of the superclass returns true, and either of the two input ports, or both, have token.

Specified by:
prefire in interface Executable
Overrides:
prefire in class AtomicActor
Returns:
true if this actor can fire.
Throws:
IllegalActionException - If thrown when trying to decide whether the input ports have token or not.