Package rx.subjects

Class UnicastSubject.State<T>

    • Field Summary

      Fields 
      Modifier and Type Field Description
      (package private) boolean caughtUp
      Indicates the queue can be bypassed because the child has caught up with the replay.
      (package private) boolean done
      Indicates the source has terminated.
      (package private) boolean emitting
      Emitter loop: emitting indicator.
      (package private) java.lang.Throwable error
      In case the source emitted an error.
      (package private) boolean missed
      Emitter loop: missed emission indicator.
      (package private) NotificationLite<T> nl
      JCTools queues don't accept nulls.
      (package private) java.util.Queue<java.lang.Object> queue
      The queue holding values until the subscriber arrives and catches up.
      private static long serialVersionUID  
      (package private) java.util.concurrent.atomic.AtomicReference<Subscriber<? super T>> subscriber
      The single subscriber.
      (package private) java.util.concurrent.atomic.AtomicReference<Action0> terminateOnce
      Atomically set to true on terminal condition.
    • Constructor Summary

      Constructors 
      Constructor Description
      State​(int capacityHint, Action0 onTerminated)
      Constructor.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void call​(Subscriber<? super T> subscriber)
      Tries to set the given subscriber if not already set, sending an IllegalStateException to the subscriber otherwise.
      (package private) 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
      (package private) void doTerminate()
      Call the optional termination action at most once.
      boolean isUnsubscribed()
      Indicates whether this Subscription is currently unsubscribed.
      void onCompleted()
      Notifies the Observer that the Observable has finished sending push-based notifications.
      void onError​(java.lang.Throwable e)
      Notifies the Observer that the Observable has experienced an error condition.
      void onNext​(T t)
      Provides the Observer with a new item to observe.
      (package private) void replay()
      Tries to replay the contents of the queue.
      void request​(long n)
      Request a certain maximum number of items from this Producer.
      void unsubscribe()
      Terminates the state by setting the done flag and tries to clear the queue.
      • Methods inherited from class java.util.concurrent.atomic.AtomicLong

        accumulateAndGet, addAndGet, compareAndExchange, compareAndExchangeAcquire, compareAndExchangeRelease, compareAndSet, decrementAndGet, doubleValue, floatValue, get, getAcquire, getAndAccumulate, getAndAdd, getAndDecrement, getAndIncrement, getAndSet, getAndUpdate, getOpaque, getPlain, incrementAndGet, intValue, lazySet, longValue, set, setOpaque, setPlain, setRelease, toString, updateAndGet, weakCompareAndSet, weakCompareAndSetAcquire, weakCompareAndSetPlain, weakCompareAndSetRelease, weakCompareAndSetVolatile
      • Methods inherited from class java.lang.Number

        byteValue, shortValue
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • subscriber

        final java.util.concurrent.atomic.AtomicReference<Subscriber<? super T>> subscriber
        The single subscriber.
      • queue

        final java.util.Queue<java.lang.Object> queue
        The queue holding values until the subscriber arrives and catches up.
      • terminateOnce

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

        java.lang.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 Detail

      • 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 Detail

      • 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.