Class SubscriptionIntermediateFuture<E>

    • Field Detail

      • ownresults

        protected java.util.Map<java.lang.Thread,​java.util.List<E>> ownresults
        The local results for a single thread.
      • storeforfirst

        protected boolean storeforfirst
        Flag if results should be stored till first listener is added.
      • resultssize

        protected int resultssize
        The number of results.
    • Constructor Detail

      • SubscriptionIntermediateFuture

        public SubscriptionIntermediateFuture()
        Create a new future.
      • SubscriptionIntermediateFuture

        public SubscriptionIntermediateFuture​(java.lang.Exception exception)
        Create a future that is already done (failed).
        Parameters:
        exception - The exception.
      • SubscriptionIntermediateFuture

        public SubscriptionIntermediateFuture​(ITerminationCommand terminate)
        Create a new future.
        Parameters:
        terminate - The code to be executed in case of termination.
      • SubscriptionIntermediateFuture

        public SubscriptionIntermediateFuture​(ITerminationCommand terminate,
                                              boolean storeforfirst)
        Create a new future.
        Parameters:
        terminate - The code to be executed in case of termination.
    • Method Detail

      • storeResult

        protected void storeResult​(E result,
                                   boolean scheduled)
        Add a result.
        Overrides:
        storeResult in class IntermediateFuture<E>
        Parameters:
        result - The result.
        scheduled - True, if any listener notification has been scheduled for this result. (used for subscription futures to check for lost values)
      • getResultCount

        protected int getResultCount()
        Get the number of results already collected.
        Overrides:
        getResultCount in class IntermediateFuture<E>
        Returns:
        The number of results.
      • addQuietListener

        public void addQuietListener​(IResultListener<java.util.Collection<E>> listener)
        Add a listener which is only informed about new results, i.e. the initial results are not posted to this listener, even if it is the first listener to be added to this future.
        Specified by:
        addQuietListener in interface ISubscriptionIntermediateFuture<E>
      • getNextIntermediateResult

        public E getNextIntermediateResult​(long timeout,
                                           boolean realtime)
        Iterate over the intermediate results in a blocking fashion. Manages results independently for different callers, i.e. when called from different threads, each thread receives all intermediate results. The operation is guaranteed to be non-blocking, if hasNextIntermediateResult() has returned true before for the same caller. Otherwise the caller is blocked until a result is available or the future is finished.
        Specified by:
        getNextIntermediateResult in interface IIntermediateFuture<E>
        Overrides:
        getNextIntermediateResult in class IntermediateFuture<E>
        Parameters:
        timeout - The timeout in millis.
        realtime - Flag, if wait should be realtime (in constrast to simulation time).
        Returns:
        The next intermediate result.
      • hasNextIntermediateResult

        public boolean hasNextIntermediateResult​(long timeout,
                                                 boolean realtime)
        Check if there are more results for iteration for the given caller. If there are currently no unprocessed results and future is not yet finished, the caller is blocked until either new results are available and true is returned or the future is finished, thus returning false.
        Specified by:
        hasNextIntermediateResult in interface IIntermediateFuture<E>
        Overrides:
        hasNextIntermediateResult in class IntermediateFuture<E>
        Parameters:
        timeout - The timeout in millis.
        realtime - Flag, if wait should be realtime (in constrast to simulation time).
        Returns:
        True, when there are more intermediate results for the caller.
      • doGetNextIntermediateResult

        protected E doGetNextIntermediateResult​(int index,
                                                long timeout,
                                                boolean realtime)
        Perform the get without increasing the index.
        Overrides:
        doGetNextIntermediateResult in class IntermediateFuture<E>
      • catchEx

        public IIntermediateFuture<E> catchEx​(java.util.function.Consumer<? super java.lang.Exception> consumer,
                                              java.lang.Class<?> futuretype)
        Called on exception.
        Specified by:
        catchEx in interface IFuture<E>
        Overrides:
        catchEx in class IntermediateFuture<E>
        Parameters:
        delegate - The future the exception will be delegated to.
      • catchEx

        public <T> IIntermediateFuture<E> catchEx​(Future<T> delegate)
        Called on exception.
        Specified by:
        catchEx in interface IFuture<E>
        Overrides:
        catchEx in class Future<java.util.Collection<E>>
        Parameters:
        delegate - The future the exception will be delegated to.
      • max

        public IIntermediateFuture<? extends E> max​(java.util.function.Consumer<java.lang.Integer> function)
        Called when the next intermediate value is available.
        Specified by:
        max in interface IIntermediateFuture<E>
        Overrides:
        max in class IntermediateFuture<E>
        Parameters:
        function - Called when value arrives.
        function - Called when max value arrives.
        Returns:
        The future for chaining. / public IIntermediateFuture