Interface QueueFuseable<T>

Type Parameters:
T - the value type returned by the SimpleQueue.poll()
All Superinterfaces:
SimpleQueue<T>
All Known Subinterfaces:
QueueDisposable<T>, QueueSubscription<T>
All Known Implementing Classes:
AbstractEmptyQueueFuseable, AsyncProcessor.AsyncSubscription, AsyncSubject.AsyncDisposable, BasicFuseableConditionalSubscriber, BasicFuseableObserver, BasicFuseableSubscriber, BasicIntQueueDisposable, BasicIntQueueSubscription, BasicQueueDisposable, BasicQueueSubscription, CancellableQueueFuseable, DeferredScalarDisposable, DeferredScalarObserver, DeferredScalarSubscriber, DeferredScalarSubscription, EmptyDisposable, EmptySubscription, FlowableAll.AllSubscriber, FlowableAny.AnySubscriber, FlowableCollect.CollectSubscriber, FlowableCollectWithCollector.CollectorSubscriber, FlowableCombineLatest.CombineLatestCoordinator, FlowableCount.CountSubscriber, FlowableDistinct.DistinctSubscriber, FlowableDistinctUntilChanged.DistinctUntilChangedConditionalSubscriber, FlowableDistinctUntilChanged.DistinctUntilChangedSubscriber, FlowableDoAfterNext.DoAfterConditionalSubscriber, FlowableDoAfterNext.DoAfterSubscriber, FlowableDoFinally.DoFinallyConditionalSubscriber, FlowableDoFinally.DoFinallySubscriber, FlowableDoOnEach.DoOnEachConditionalSubscriber, FlowableDoOnEach.DoOnEachSubscriber, FlowableElementAt.ElementAtSubscriber, FlowableFilter.FilterConditionalSubscriber, FlowableFilter.FilterSubscriber, FlowableFlatMapCompletable.FlatMapCompletableMainSubscriber, FlowableFlattenIterable.FlattenIterableSubscriber, FlowableFromArray.ArrayConditionalSubscription, FlowableFromArray.ArraySubscription, FlowableFromArray.BaseArraySubscription, FlowableFromCompletable.FromCompletableObserver, FlowableFromCompletionStage.CompletionStageHandler, FlowableFromIterable.BaseRangeSubscription, FlowableFromIterable.IteratorConditionalSubscription, FlowableFromIterable.IteratorSubscription, FlowableFromStream.AbstractStreamSubscription, FlowableFromStream.StreamConditionalSubscription, FlowableFromStream.StreamSubscription, FlowableGroupBy.State, FlowableIgnoreElements.IgnoreElementsSubscriber, FlowableMap.MapConditionalSubscriber, FlowableMap.MapSubscriber, FlowableMapOptional.MapOptionalConditionalSubscriber, FlowableMapOptional.MapOptionalSubscriber, FlowableObserveOn.BaseObserveOnSubscriber, FlowableObserveOn.ObserveOnConditionalSubscriber, FlowableObserveOn.ObserveOnSubscriber, FlowableOnBackpressureBuffer.BackpressureBufferSubscriber, FlowableRange.BaseRangeSubscription, FlowableRange.RangeConditionalSubscription, FlowableRange.RangeSubscription, FlowableRangeLong.BaseRangeSubscription, FlowableRangeLong.RangeConditionalSubscription, FlowableRangeLong.RangeSubscription, FlowableReduce.ReduceSubscriber, FlowableSequenceEqual.EqualCoordinator, FlowableSingle.SingleElementSubscriber, FlowableTakeLastOne.TakeLastOneSubscriber, FlowableToList.ToListSubscriber, MaybeFlatMapIterableFlowable.FlatMapIterableObserver, MaybeFlatMapIterableObservable.FlatMapIterableObserver, MaybeFlattenStreamAsFlowable.FlattenStreamMultiObserver, MaybeFlattenStreamAsObservable.FlattenStreamMultiObserver, MaybeMergeArray.MergeMaybeObserver, MaybeToFlowable.MaybeToFlowableSubscriber, MaybeToObservable.MaybeToObservableObserver, ObservableCollectWithCollector.CollectorObserver, ObservableDistinct.DistinctObserver, ObservableDistinctUntilChanged.DistinctUntilChangedObserver, ObservableDoAfterNext.DoAfterObserver, ObservableDoFinally.DoFinallyObserver, ObservableFilter.FilterObserver, ObservableFlatMapCompletable.FlatMapCompletableMainObserver, ObservableFromArray.FromArrayDisposable, ObservableFromCompletable.FromCompletableObserver, ObservableFromCompletionStage.CompletionStageHandler, ObservableFromIterable.FromIterableDisposable, ObservableFromStream.StreamDisposable, ObservableMap.MapObserver, ObservableMapOptional.MapOptionalObserver, ObservableObserveOn.ObserveOnObserver, ObservableRange.RangeDisposable, ObservableRangeLong.RangeDisposable, ObservableScalarXMap.ScalarDisposable, ParallelCollect.ParallelCollectSubscriber, ParallelCollector.ParallelCollectorSubscriber, ParallelReduce.ParallelReduceSubscriber, ParallelReduceFull.ParallelReduceFullMainSubscriber, ScalarSubscription, SingleFlatMapIterableFlowable.FlatMapIterableObserver, SingleFlatMapIterableObservable.FlatMapIterableObserver, SingleToFlowable.SingleToFlowableObserver, SingleToObservable.SingleToObservableObserver, UnicastProcessor.UnicastQueueSubscription, UnicastSubject.UnicastQueueDisposable

public interface QueueFuseable<@NonNull T> extends SimpleQueue<T>
Represents a SimpleQueue plus the means and constants for requesting a fusion mode.
Since:
3.1.1
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final int
    Request any of the SYNC or ASYNC modes.
    static final int
    Request an asynchronous fusion mode and can be returned by requestFusion(int) for an accepted mode.
    static final int
    Used in binary or combination with the other constants as an input to requestFusion(int) indicating that the SimpleQueue.poll() will be called behind an asynchronous boundary and thus may change the non-trivial computation locations attached to the SimpleQueue.poll() chain of fused operators.
    static final int
    Returned by the requestFusion(int) if the upstream doesn't support the requested mode.
    static final int
    Request a synchronous fusion mode and can be returned by requestFusion(int) for an accepted mode.
  • Method Summary

    Modifier and Type
    Method
    Description
    int
    requestFusion(int mode)
    Request a fusion mode from the upstream.

    Methods inherited from interface io.reactivex.rxjava3.operators.SimpleQueue

    clear, isEmpty, offer, offer, poll
  • Field Details

    • NONE

      static final int NONE
      Returned by the requestFusion(int) if the upstream doesn't support the requested mode.
      See Also:
    • SYNC

      static final int SYNC
      Request a synchronous fusion mode and can be returned by requestFusion(int) for an accepted mode.

      In synchronous fusion, all upstream values are either already available or is generated when SimpleQueue.poll() is called synchronously. When the SimpleQueue.poll() returns null, that is the indication if a terminated stream. In this mode, the upstream won't call the onXXX methods and callers of SimpleQueue.poll() should be prepared to catch exceptions. Note that SimpleQueue.poll() has to be called sequentially (from within a serializing drain-loop).

      See Also:
    • ASYNC

      static final int ASYNC
      Request an asynchronous fusion mode and can be returned by requestFusion(int) for an accepted mode.

      In asynchronous fusion, upstream values may become available to SimpleQueue.poll() eventually. Upstream signals onError() and onComplete() as usual but onNext may not actually contain the upstream value but have null instead. Downstream should treat such onNext as indication that SimpleQueue.poll() can be called. Note that SimpleQueue.poll() has to be called sequentially (from within a serializing drain-loop). In addition, callers of SimpleQueue.poll() should be prepared to catch exceptions.

      See Also:
    • ANY

      static final int ANY
      Request any of the SYNC or ASYNC modes.
      See Also:
    • BOUNDARY

      static final int BOUNDARY
      Used in binary or combination with the other constants as an input to requestFusion(int) indicating that the SimpleQueue.poll() will be called behind an asynchronous boundary and thus may change the non-trivial computation locations attached to the SimpleQueue.poll() chain of fused operators.

      For example, fusing map() and observeOn() may move the computation of the map's function over to the thread run after the observeOn(), which is generally unexpected.

      See Also:
  • Method Details

    • requestFusion

      int requestFusion(int mode)
      Request a fusion mode from the upstream.

      This should be called before onSubscribe returns.

      Calling this method multiple times or after onSubscribe finished is not allowed and may result in undefined behavior.

      Parameters:
      mode - the requested fusion mode, allowed values are SYNC, ASYNC, ANY combined with BOUNDARY (e.g., requestFusion(SYNC | BOUNDARY)).
      Returns:
      the established fusion mode: NONE, SYNC, ASYNC.