Class 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)
    • 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 interface Receiver
        Overrides:
        get in class SDFReceiver
        Returns:
        The oldest token in the receiver.
      • getCurrentTime

        @Deprecated
        public double getCurrentTime()
        Deprecated.
        As of Ptolemy II 4.1, replaced by getModelTime()
        Return the local time associated with this receiver.
        Overrides:
        getCurrentTime in class AbstractReceiver
        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 class AbstractReceiver
        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 interface Receiver
        Overrides:
        hasToken in class SDFReceiver
        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 interface Receiver
        Overrides:
        put in class SDFReceiver
        Parameters:
        token - The token to be put to the receiver, or null to put no token.
        Throws:
        InternalErrorException - If the source port is null.