ptolemy.actor.lib
Class ResettableTimer

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.actor.lib.ResettableTimer
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 ResettableTimer
extends Transformer

Produce an output after the time specified on the input has elapsed. If the input value is 0.0, then the output will be produced at the next superdense time index (i.e., on the next firing, but at the current time). If the input is negative, this actor will cancel the previously requested output, if it has not yet been produced by the time the negative input is received. The value of the output is specified by the value parameter.

If the preemptive parameter is true (the default), then if a new input arrives before the previous timer request has expired, then that timer request is canceled. If an input arrives at the same time that the previous timer request expires, an output is produced immediately. The timer request is not cancelled.

If the preemptive parameter is false, then the new input will cause the timer to start only after the currently pending timer (if any is pending) expires.

When the preemptive parameter is true, this actor resembles the VariableDelay actor in the DE domain, except that arrivals of new inputs before the delay has expired causes the previously scheduled output to be canceled. Also, the output value is given in this actor by the value parameter instead of by the input.

When the preemptive parameter is false, this actor resembles the Server actor in the DE domain, except that the time delay is specified by the single input. The Server actor, by contrast, has separate inputs for service time and payload, and the service time experienced by a payload depends on the most recently arrived service time input at the time that the payload service begins, not at the time the payload arrives.

If this actor is used in a modal model and is in a mode that is not active for some time, then no outputs will be produced for the times it is inactive. If it becomes active again before the scheduled time to produce an output, then it will produce that output. If it is not preemptive, then upon becoming active again, it will behave as if it had been active during the intervening time, calculating when the outputs should have been produced, and discarding them if the calculated time falls in the inactive period.

Since:
Ptolemy II 8.0
Version:
$Id: ResettableTimer.java 57044 2010-01-27 22:41:05Z cxh $
Author:
Edward A. Lee
See Also:
Serialized Form
Accepted Rating:
Red (eal)
Proposed Rating:
Yellow (eal)

Nested Class Summary
 
Nested classes/interfaces inherited from class ptolemy.kernel.Entity
Entity.ContainedObjectsIterator
 
Field Summary
private  int _pendingOutputMicrostep
          Pending output microstep.
private  Time _pendingOutputTime
          Pending output time.
private  CalendarQueue _pendingRequests
          A local queue to store the pending requests.
 Parameter preemptive
          Indicator of whether new inputs cancel previous requests.
 Parameter value
          The value produced at the output.
 
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
ResettableTimer(CompositeEntity container, java.lang.String name)
          Construct an actor with the specified container and name.
 
Method Summary
 java.lang.Object clone(Workspace workspace)
          Clone the actor into the specified workspace.
 void fire()
          If an output is scheduled to be produced, then produce it.
 void initialize()
          Initialize the internal states of this actor.
 boolean postfire()
          Read the input (if any) and schedule a future output.
 void preinitialize()
          Override the base class to declare that the output does not depend on the input in a firing.
 
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, 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, 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

preemptive

public Parameter preemptive
Indicator of whether new inputs cancel previous requests. This is a boolean that defaults to true.


value

public Parameter value
The value produced at the output. This can have any type, and it defaults to a boolean token with value true.


_pendingOutputTime

private Time _pendingOutputTime
Pending output time.


_pendingOutputMicrostep

private int _pendingOutputMicrostep
Pending output microstep.


_pendingRequests

private CalendarQueue _pendingRequests
A local queue to store the pending requests.

Constructor Detail

ResettableTimer

public ResettableTimer(CompositeEntity container,
                       java.lang.String name)
                throws NameDuplicationException,
                       IllegalActionException
Construct an actor with the specified container and name. Declare that the input can only receive double tokens and the output has a data type the same as the value parameter.

Parameters:
container - The container.
name - The name of this actor.
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 the actor into the specified workspace. This calls the base class and links the type of the value parameter to the output.

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
If an output is scheduled to be produced, then produce it.

Specified by:
fire in interface Executable
Overrides:
fire in class AtomicActor
Throws:
IllegalActionException - If there is no director, or can not send or get tokens from ports.

initialize

public void initialize()
                throws IllegalActionException
Initialize the internal states of this actor.

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
Read the input (if any) and schedule a future output.

Specified by:
postfire in interface Executable
Overrides:
postfire in class AtomicActor
Returns:
True if execution can continue into the next iteration.
Throws:
IllegalActionException - If reading the input, or requesting a refiring throws it.

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.