Class BasicFuseableObserver<T,​R>

    • Constructor Summary

      Constructors 
      Constructor Description
      BasicFuseableObserver​(Observer<? super R> downstream)
      Construct a BasicFuseableObserver by wrapping the given subscriber.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected void afterDownstream()
      Override this to perform actions after the call to actual.onSubscribe(this) happened.
      protected boolean beforeDownstream()
      Override this to perform actions before the call actual.onSubscribe(this) happens.
      void clear()
      Removes all enqueued items from this queue.
      void dispose()
      Dispose the resource, the operation should be idempotent.
      protected void fail​(java.lang.Throwable t)
      Rethrows the throwable if it is a fatal exception or calls onError(Throwable).
      boolean isDisposed()
      Returns true if this resource has been disposed.
      boolean isEmpty()
      Returns true if the queue is empty.
      boolean offer​(R e)
      Atomically enqueue a single value.
      boolean offer​(R v1, R v2)
      Atomically enqueue two values.
      void onComplete()
      Notifies the Observer that the Observable has finished sending push-based notifications.
      void onError​(java.lang.Throwable t)
      Notifies the Observer that the Observable has experienced an error condition.
      void onSubscribe​(Disposable d)
      Provides the Observer with the means of cancelling (disposing) the connection (channel) with the Observable in both synchronous (from within Observer.onNext(Object)) and asynchronous manner.
      protected int transitiveBoundaryFusion​(int mode)
      Calls the upstream's QueueDisposable.requestFusion with the mode and saves the established mode in sourceMode if that mode doesn't have the QueueFuseable.BOUNDARY flag set.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • Methods inherited from interface io.reactivex.rxjava3.core.Observer

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

        poll
    • Field Detail

      • downstream

        protected final Observer<? super R> downstream
        The downstream subscriber.
      • upstream

        protected Disposable upstream
        The upstream subscription.
      • qd

        protected QueueDisposable<T> qd
        The upstream's QueueDisposable if not null.
      • done

        protected boolean done
        Flag indicating no further onXXX event should be accepted.
      • sourceMode

        protected int sourceMode
        Holds the established fusion mode of the upstream.
    • Constructor Detail

      • BasicFuseableObserver

        public BasicFuseableObserver​(Observer<? super R> downstream)
        Construct a BasicFuseableObserver by wrapping the given subscriber.
        Parameters:
        downstream - the subscriber, not null (not verified)
    • Method Detail

      • beforeDownstream

        protected boolean beforeDownstream()
        Override this to perform actions before the call actual.onSubscribe(this) happens.
        Returns:
        true if onSubscribe should continue with the call
      • afterDownstream

        protected void afterDownstream()
        Override this to perform actions after the call to actual.onSubscribe(this) happened.
      • fail

        protected final void fail​(java.lang.Throwable t)
        Rethrows the throwable if it is a fatal exception or calls onError(Throwable).
        Parameters:
        t - the throwable to rethrow or signal to the actual subscriber
      • transitiveBoundaryFusion

        protected final int transitiveBoundaryFusion​(int mode)
        Calls the upstream's QueueDisposable.requestFusion with the mode and saves the established mode in sourceMode if that mode doesn't have the QueueFuseable.BOUNDARY flag set.

        If the upstream doesn't support fusion (qd is null), the method returns QueueFuseable.NONE.

        Parameters:
        mode - the fusion mode requested
        Returns:
        the established fusion mode
      • dispose

        public void dispose()
        Description copied from interface: Disposable
        Dispose the resource, the operation should be idempotent.
        Specified by:
        dispose in interface Disposable
      • isDisposed

        public boolean isDisposed()
        Description copied from interface: Disposable
        Returns true if this resource has been disposed.
        Specified by:
        isDisposed in interface Disposable
        Returns:
        true if this resource has been disposed
      • isEmpty

        public boolean isEmpty()
        Description copied from interface: SimpleQueue
        Returns true if the queue is empty.

        Note however that due to potential fused functions in SimpleQueue.poll() it is possible this method returns false but then poll() returns null because the fused function swallowed the available item(s).

        Specified by:
        isEmpty in interface SimpleQueue<T>
        Returns:
        true if the queue is empty
      • clear

        public void clear()
        Description copied from interface: SimpleQueue
        Removes all enqueued items from this queue.
        Specified by:
        clear in interface SimpleQueue<T>
      • offer

        public final boolean offer​(R e)
        Description copied from interface: SimpleQueue
        Atomically enqueue a single value.
        Specified by:
        offer in interface SimpleQueue<T>
        Parameters:
        e - the value to enqueue, not null
        Returns:
        true if successful, false if the value was not enqueued likely due to reaching the queue capacity)
      • offer

        public final boolean offer​(R v1,
                                   R v2)
        Description copied from interface: SimpleQueue
        Atomically enqueue two values.
        Specified by:
        offer in interface SimpleQueue<T>
        Parameters:
        v1 - the first value to enqueue, not null
        v2 - the second value to enqueue, not null
        Returns:
        true if successful, false if the value was not enqueued likely due to reaching the queue capacity)