Package ptolemy.domains.dt.kernel
Class DTReceiver
- java.lang.Object
-
- ptolemy.actor.AbstractReceiver
-
- ptolemy.domains.sdf.kernel.SDFReceiver
-
- ptolemy.domains.dt.kernel.DTReceiver
-
- All Implemented Interfaces:
Receiver
public class DTReceiver extends SDFReceiver
A first-in, first-out (FIFO) queue receiver with variable capacity. Tokens are put into the receiver with the put() method, and removed from the receiver with the get() method. The token removed is the oldest one in the receiver. Time is incremented by a fixed amount delta time every time the get() method is called. Each receiver has its own value of delta time. We calculate delta time as "period / (rate * repetitions)" where:- period is the execution time of the director per iteration
- rate is the rate of the port that holds this receiver
- repetitions is the firing count per iteration of the actor that holds this receiver
- Since:
- Ptolemy II 1.0
- Version:
- $Id$
- Author:
- C. Fong
- Pt.AcceptedRating:
- Yellow (vogel)
- Pt.ProposedRating:
- Yellow (chf)
-
-
Field Summary
-
Fields inherited from class ptolemy.domains.sdf.kernel.SDFReceiver
_waitingTokens, INFINITE_CAPACITY
-
-
Constructor Summary
Constructors Constructor Description DTReceiver()
Construct an empty receiver with no container.DTReceiver(IOPort container)
Construct an empty receiver with the specified container.DTReceiver(IOPort container, int size)
Construct an empty receiver with the specified container and size.
-
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description void
calculateDeltaTime()
Calculate the constant time increment for this receiver.void
determineEnds()
Determine the source and destination ports that use this receiver in their communications.Token
get()
Remove the first token (the oldest one) from the receiver and return it.double
getCurrentTime()
Deprecated.As of Ptolemy II 4.1, replaced bygetModelTime()
double
getDeltaTime()
Return the time interval between tokens for this receiver.Time
getModelTime()
Return the local time associated with this receiver.TypedIOPort
getSourcePort()
Return the port that feeds this Receiver The port returned by this method is precalculated during the determineEnds() method call.int
getTokenFlowRate()
Return the token flow rate for this receiver In DT, the token flow rate has the value "rate * repetitions"; where 'rate' is the port rate and 'repetitions' is the firing count of the actor that contains this receiver.boolean
hasToken()
Return true if get() will succeed in returning a token.void
put(Token token)
Put a token to the receiver.void
reset()
Reset this receiver to its initial state, which includes calling clear() and resetting the current time to 0.0.-
Methods inherited from class ptolemy.domains.sdf.kernel.SDFReceiver
clear, elementList, get, getArray, getCapacity, getHistoryCapacity, hasRoom, hasRoom, hasToken, historyElements, historySize, setCapacity, setHistoryCapacity, size
-
Methods inherited from class ptolemy.actor.AbstractReceiver
getContainer, isKnown, putArray, putArrayToAll, putToAll, setContainer, toString
-
-
-
-
Constructor Detail
-
DTReceiver
public DTReceiver()
Construct an empty receiver with no container.
-
DTReceiver
public DTReceiver(IOPort container) throws IllegalActionException
Construct an empty receiver with the specified container.- Parameters:
container
- The container of the receiver.- Throws:
IllegalActionException
- If the container does not accept this receiver.
-
DTReceiver
public DTReceiver(IOPort container, int size) throws IllegalActionException
Construct an empty receiver with the specified container and size.- Parameters:
container
- The container of the receiver.size
- The size of the buffer for the receiver.- Throws:
IllegalActionException
- If the container does not accept this receiver.
-
-
Method Detail
-
calculateDeltaTime
public void calculateDeltaTime() throws IllegalActionException
Calculate the constant time increment for this receiver. This method should only be invoked by the DT Director.- Throws:
IllegalActionException
- If there is an error in getting attribute information from the ports.
-
determineEnds
public void determineEnds() throws IllegalActionException
Determine the source and destination ports that use this receiver in their communications. In DT, the source and destination ports are distinct for each receiver because "non-deterministic merge" type relations are not allowed.- Throws:
IllegalActionException
-
get
public Token get()
Remove the first token (the oldest one) from the receiver and return it. If there is no token in the receiver, throw an exception. Increment the local time by deltaTime.- Specified by:
get
in interfaceReceiver
- Overrides:
get
in classSDFReceiver
- Returns:
- The oldest token in the receiver.
-
getCurrentTime
@Deprecated public double getCurrentTime()
Deprecated.As of Ptolemy II 4.1, replaced bygetModelTime()
Return the local time associated with this receiver.- Overrides:
getCurrentTime
in classAbstractReceiver
- Returns:
- The local time associated with this receiver.
-
getDeltaTime
public double getDeltaTime()
Return the time interval between tokens for this receiver. Delta time is defined as "period / (token flow rate)"; where period is the director's period parameter and token flow rate is the number of tokens flowing through this receiver per iteration- Returns:
- The time interval between tokens
-
getModelTime
public Time getModelTime()
Return the local time associated with this receiver.- Overrides:
getModelTime
in classAbstractReceiver
- Returns:
- The local time associated with this receiver.
-
getSourcePort
public TypedIOPort getSourcePort()
Return the port that feeds this Receiver The port returned by this method is precalculated during the determineEnds() method call.- Returns:
- The port that feeds this receiver.
-
getTokenFlowRate
public int getTokenFlowRate()
Return the token flow rate for this receiver In DT, the token flow rate has the value "rate * repetitions"; where 'rate' is the port rate and 'repetitions' is the firing count of the actor that contains this receiver.- Returns:
- The token flow rate of this receiver
-
hasToken
public boolean hasToken()
Return true if get() will succeed in returning a token.- Specified by:
hasToken
in interfaceReceiver
- Overrides:
hasToken
in classSDFReceiver
- Returns:
- A boolean indicating whether there is a token in this receiver.
-
put
public void put(Token token)
Put a token to the receiver. If the port feeding this receiver is null, report an internal error.- Specified by:
put
in interfaceReceiver
- Overrides:
put
in classSDFReceiver
- Parameters:
token
- The token to be put to the receiver, or null to put no token.- Throws:
InternalErrorException
- If the source port is null.
-
reset
public void reset() throws IllegalActionException
Reset this receiver to its initial state, which includes calling clear() and resetting the current time to 0.0.- Specified by:
reset
in interfaceReceiver
- Overrides:
reset
in classAbstractReceiver
- Throws:
IllegalActionException
- If there is no director.
-
-