Class DeferredScalarSubscriber<T,R>

java.lang.Object
rx.Subscriber<T>
rx.internal.operators.DeferredScalarSubscriber<T,R>
Type Parameters:
T - the source value type
R - the result value type
All Implemented Interfaces:
Observer<T>, Subscription
Direct Known Subclasses:
OnSubscribeCollect.CollectSubscriber, OnSubscribeReduceSeed.ReduceSeedSubscriber, OnSubscribeTakeLastOne.TakeLastOneSubscriber

public abstract class DeferredScalarSubscriber<T,R> extends Subscriber<T>
Base class for Subscribers that consume the entire upstream and signal zero or one element (or an error) in a backpressure honoring fashion.

Store any temporary value in value and indicate there is a value available when completing by setting hasValue. invalid input: '<'p. Use subscribeTo(Observable) to properly setup the link between this and the downstream subscriber.

  • Field Details

    • actual

      protected final Subscriber<? super R> actual
      The downstream subscriber.
    • hasValue

      protected boolean hasValue
      Indicates there is a value available in value.
    • value

      protected R value
      The holder of the single value.
    • state

      final AtomicInteger state
      The state, see the constants below.
    • NO_REQUEST_NO_VALUE

      static final int NO_REQUEST_NO_VALUE
      Initial state.
      See Also:
    • HAS_REQUEST_NO_VALUE

      static final int HAS_REQUEST_NO_VALUE
      Request came first.
      See Also:
    • NO_REQUEST_HAS_VALUE

      static final int NO_REQUEST_HAS_VALUE
      Value came first.
      See Also:
    • HAS_REQUEST_HAS_VALUE

      static final int HAS_REQUEST_HAS_VALUE
      Value will be emitted.
      See Also:
  • Constructor Details

    • DeferredScalarSubscriber

      public DeferredScalarSubscriber(Subscriber<? super R> actual)
  • Method Details

    • onError

      public void onError(Throwable ex)
      Description copied from interface: Observer
      Notifies the Observer that the Observable has experienced an error condition.

      If the Observable calls this method, it will not thereafter call Observer.onNext(T) or Observer.onCompleted().

      Parameters:
      ex - the exception encountered by the Observable
    • onCompleted

      public void onCompleted()
      Description copied from interface: Observer
      Notifies the Observer that the Observable has finished sending push-based notifications.

      The Observable will not call this method if it calls Observer.onError(java.lang.Throwable).

    • complete

      protected final void complete()
      Signals onCompleted() to the downstream subscriber.
    • complete

      protected final void complete(R value)
      Atomically switches to the terminal state and emits the value if there is a request for it or stores it for retrieval by downstreamRequest(long).
      Parameters:
      value - the value to complete with
    • downstreamRequest

      final void downstreamRequest(long n)
    • setProducer

      public final void setProducer(Producer p)
      Description copied from class: Subscriber
      If other subscriber is set (by calling constructor Subscriber(Subscriber) or Subscriber(Subscriber, boolean)) then this method calls setProducer on the other subscriber. If the other subscriber is not set and no requests have been made to this subscriber then p.request(Long.MAX_VALUE) is called. If the other subscriber is not set and some requests have been made to this subscriber then p.request(n) is called where n is the accumulated requests to this subscriber.
      Overrides:
      setProducer in class Subscriber<T>
      Parameters:
      p - producer to be used by this subscriber or the other subscriber (or recursively its other subscriber) to make requests from
    • subscribeTo

      public final void subscribeTo(Observable<? extends T> source)
      Links up with the downstream Subscriber (cancellation, backpressure) and subscribes to the source Observable.
      Parameters:
      source - the source Observable
    • setupDownstream

      final void setupDownstream()