Class IntermediateFuture<E>

    • Field Detail

      • results

        protected java.util.List<E> results
        The intermediate results.
      • intermediate

        protected boolean intermediate
        Flag indicating that addIntermediateResult()has been called.
      • icallers

        protected java.util.Map<ISuspendable,​java.lang.String> icallers
        The blocked intermediate callers (caller->state).
      • indices

        protected java.util.Map<java.lang.Thread,​java.lang.Integer> indices
        The index of the next result for a thread.
      • maxresultcnt

        protected int maxresultcnt
        The max result count (if given by the producer).
    • Constructor Detail

      • IntermediateFuture

        public IntermediateFuture()
        Create a future that is already done.
        Parameters:
        result - The result, if any.
      • IntermediateFuture

        public IntermediateFuture​(java.util.Collection<E> results)
        Create a future that is already done.
        Parameters:
        result - The result, if any.
      • IntermediateFuture

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

      • getIntermediateResults

        public java.util.Collection<E> getIntermediateResults()
        Get the intermediate results that are available.
        Specified by:
        getIntermediateResults in interface IIntermediateFuture<E>
        Returns:
        The current intermediate results (copy of the list).
      • addIntermediateResult

        public void addIntermediateResult​(E result)
        Add an intermediate result.
      • addIntermediateResultIfUndone

        public boolean addIntermediateResultIfUndone​(E result)
        Set the result.
        Parameters:
        result - The result.
        Returns:
        True if result was set.
      • doAddIntermediateResult

        protected boolean doAddIntermediateResult​(E result,
                                                  boolean undone)
        Set the result and schedule listener notifications.
        Returns:
        true, when the result was added (finished and undone otherwise).
      • storeResult

        protected boolean storeResult​(E result)
        Add a result.
        Parameters:
        result - The result.
      • doSetResult

        protected boolean doSetResult​(java.util.Collection<E> result,
                                      boolean undone)
        Set the result. Listener notifications occur on calling thread of this method.
        Overrides:
        doSetResult in class Future<java.util.Collection<E>>
        Parameters:
        result - The result.
      • setFinished

        public void setFinished()
        Declare that the future is finished.
      • setFinishedIfUndone

        public boolean setFinishedIfUndone()
        Declare that the future is finished.
      • doSetFinished

        protected boolean doSetFinished​(boolean undone)
        Declare that the future is finished.
      • addIntermediateResultListener

        public void addIntermediateResultListener​(IIntermediateResultListener<E> listener)
        Add an result listener, which called on intermediate results.
        Parameters:
        listener - The intermediate listener.
      • hasNextIntermediateResult

        public boolean hasNextIntermediateResult()
        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>
        Returns:
        True, when there are more intermediate results for the caller.
      • 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>
        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.
      • getNextIntermediateResult

        public E getNextIntermediateResult()
        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>
        Returns:
        The next intermediate result.
      • getNextIntermediateResult

        public E getNextIntermediateResult​(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.
        Returns:
        The next intermediate result.
      • 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>
        Parameters:
        timeout - The timeout in millis.
        realtime - Flag, if wait should be realtime (in constrast to simulation time).
        Returns:
        The next intermediate result.
      • setMaxResultCount

        public void setMaxResultCount​(int max)
        Set the maximum number of results.
        Parameters:
        max - The maximum number of results.
      • scheduleMaxNotification

        protected boolean scheduleMaxNotification​(IResultListener<java.util.Collection<E>> lis)
        Parameters:
        max -
      • getResultCount

        protected int getResultCount()
        Get the number of results already collected.
        Returns:
        The number of results.
      • doGetNextIntermediateResult

        protected E doGetNextIntermediateResult​(int index,
                                                long timeout,
                                                boolean realtime)
        Perform the get without increasing the index.
      • notifyIntermediateResult

        protected void notifyIntermediateResult​(IIntermediateResultListener<E> listener,
                                                E result)
        Notify a result listener.
        Parameters:
        listener - The listener.
      • resume

        protected void resume()
        Resume also intermediate waiters.
        Overrides:
        resume in class Future<java.util.Collection<E>>
      • resumeIntermediate

        protected void resumeIntermediate()
        Resume after intermediate result.
      • catchErr

        public IFuture<java.util.Collection<E>> catchErr​(Consumer<? super java.lang.Exception> consumer,
                                                         java.lang.Class<?> futuretype)
        Specified by:
        catchErr in interface IFuture<E>
        Overrides:
        catchErr in class Future<java.util.Collection<E>>
      • mapAsync

        public <R> IIntermediateFuture<R> mapAsync​(Function<E,​IFuture<R>> function,
                                                   java.lang.Class<?> futuretype)
        Implements async loop and applies a an async function to each element.
        Specified by:
        mapAsync in interface IIntermediateFuture<E>
        Parameters:
        function - The function.
        Returns:
        True result intermediate future.