Package rx.subjects

Class UnicastSubject.State<T>

Type Parameters:
T - the value type
All Implemented Interfaces:
Serializable, Action, Action1<Subscriber<? super T>>, Function, Observable.OnSubscribe<T>, Observer<T>, Producer, Subscription
Enclosing class:
UnicastSubject<T>

static final class UnicastSubject.State<T> extends AtomicLong implements Producer, Observer<T>, Observable.OnSubscribe<T>, Subscription
The single-consumption replaying state.
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      See Also:
    • subscriber

      final AtomicReference<Subscriber<? super T>> subscriber
      The single subscriber.
    • queue

      final Queue<Object> queue
      The queue holding values until the subscriber arrives and catches up.
    • nl

      final NotificationLite<T> nl
      JCTools queues don't accept nulls.
    • terminateOnce

      final AtomicReference<Action0> terminateOnce
      Atomically set to true on terminal condition.
    • error

      Throwable error
      In case the source emitted an error.
    • done

      volatile boolean done
      Indicates the source has terminated.
    • emitting

      boolean emitting
      Emitter loop: emitting indicator. Guarded by this.
    • missed

      boolean missed
      Emitter loop: missed emission indicator. Guarded by this.
    • caughtUp

      volatile boolean caughtUp
      Indicates the queue can be bypassed because the child has caught up with the replay.
  • Constructor Details

    • State

      public State(int capacityHint, Action0 onTerminated)
      Constructor.
      Parameters:
      capacityHint - indicates how large each island in the Spsc queue should be to reduce allocation frequency
      onTerminated - the action to call when the subject reaches its terminal state or the single subscriber unsubscribes.
  • Method Details

    • onNext

      public void onNext(T t)
      Description copied from interface: Observer
      Provides the Observer with a new item to observe.

      The Observable may call this method 0 or more times.

      The Observable will not call this method again after it calls either Observer.onCompleted() or Observer.onError(java.lang.Throwable).

      Specified by:
      onNext in interface Observer<T>
      Parameters:
      t - the item emitted by the Observable
    • onError

      public void onError(Throwable e)
      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().

      Specified by:
      onError in interface Observer<T>
      Parameters:
      e - 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).

      Specified by:
      onCompleted in interface Observer<T>
    • request

      public void request(long n)
      Description copied from interface: Producer
      Request a certain maximum number of items from this Producer. This is a way of requesting backpressure. To disable backpressure, pass Long.MAX_VALUE to this method.

      Requests are additive but if a sequence of requests totals more than Long.MAX_VALUE then Long.MAX_VALUE requests will be actioned and the extras may be ignored. Arriving at Long.MAX_VALUE by addition of requests cannot be assumed to disable backpressure. For example, the code below may result in Long.MAX_VALUE requests being actioned only.

       request(100);
       request(Long.MAX_VALUE-1);
       
      Specified by:
      request in interface Producer
      Parameters:
      n - the maximum number of items you want this Producer to produce, or Long.MAX_VALUE if you want the Producer to produce items at its own pace
    • call

      public void call(Subscriber<? super T> subscriber)
      Tries to set the given subscriber if not already set, sending an IllegalStateException to the subscriber otherwise.
      Specified by:
      call in interface Action1<T>
      Parameters:
      subscriber -
    • replay

      void replay()
      Tries to replay the contents of the queue.
    • unsubscribe

      public void unsubscribe()
      Terminates the state by setting the done flag and tries to clear the queue. Should be called only when the child unsubscribes
      Specified by:
      unsubscribe in interface Subscription
    • isUnsubscribed

      public boolean isUnsubscribed()
      Description copied from interface: Subscription
      Indicates whether this Subscription is currently unsubscribed.
      Specified by:
      isUnsubscribed in interface Subscription
      Returns:
      true if this Subscription is currently unsubscribed, false otherwise
    • checkTerminated

      boolean checkTerminated(boolean done, boolean empty, Subscriber<? super T> s)
      Checks if one of the terminal conditions have been met: child unsubscribed, an error happened or the source terminated and the queue is empty
      Parameters:
      done -
      empty -
      s -
      Returns:
    • doTerminate

      void doTerminate()
      Call the optional termination action at most once.