Class UnicastSubject.State<T>
- java.lang.Object
-
- java.lang.Number
-
- java.util.concurrent.atomic.AtomicLong
-
- rx.subjects.UnicastSubject.State<T>
-
- Type Parameters:
T- the value type
- All Implemented Interfaces:
java.io.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 java.util.concurrent.atomic.AtomicLong implements Producer, Observer<T>, Observable.OnSubscribe<T>, Subscription
The single-consumption replaying state.
-
-
Field Summary
Fields Modifier and Type Field Description (package private) booleancaughtUpIndicates the queue can be bypassed because the child has caught up with the replay.(package private) booleandoneIndicates the source has terminated.(package private) booleanemittingEmitter loop: emitting indicator.(package private) java.lang.ThrowableerrorIn case the source emitted an error.(package private) booleanmissedEmitter loop: missed emission indicator.(package private) NotificationLite<T>nlJCTools queues don't accept nulls.(package private) java.util.Queue<java.lang.Object>queueThe queue holding values until the subscriber arrives and catches up.private static longserialVersionUID(package private) java.util.concurrent.atomic.AtomicReference<Subscriber<? super T>>subscriberThe single subscriber.(package private) java.util.concurrent.atomic.AtomicReference<Action0>terminateOnceAtomically set to true on terminal condition.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidcall(Subscriber<? super T> subscriber)Tries to set the given subscriber if not already set, sending an IllegalStateException to the subscriber otherwise.(package private) booleancheckTerminated(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) voiddoTerminate()Call the optional termination action at most once.booleanisUnsubscribed()Indicates whether thisSubscriptionis currently unsubscribed.voidonCompleted()Notifies the Observer that theObservablehas finished sending push-based notifications.voidonError(java.lang.Throwable e)Notifies the Observer that theObservablehas experienced an error condition.voidonNext(T t)Provides the Observer with a new item to observe.(package private) voidreplay()Tries to replay the contents of the queue.voidrequest(long n)Request a certain maximum number of items from this Producer.voidunsubscribe()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
-
-
-
-
Field Detail
-
serialVersionUID
private static final long serialVersionUID
- See Also:
- Constant Field Values
-
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.
-
nl
final NotificationLite<T> nl
JCTools queues don't accept nulls.
-
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 frequencyonTerminated- the action to call when the subject reaches its terminal state or the single subscriber unsubscribes.
-
-
Method Detail
-
onNext
public void onNext(T t)
Description copied from interface:ObserverProvides the Observer with a new item to observe.The
Observablemay call this method 0 or more times.The
Observablewill not call this method again after it calls eitherObserver.onCompleted()orObserver.onError(java.lang.Throwable).
-
onError
public void onError(java.lang.Throwable e)
Description copied from interface:ObserverNotifies the Observer that theObservablehas experienced an error condition.If the
Observablecalls this method, it will not thereafter callObserver.onNext(T)orObserver.onCompleted().
-
onCompleted
public void onCompleted()
Description copied from interface:ObserverNotifies the Observer that theObservablehas finished sending push-based notifications.The
Observablewill not call this method if it callsObserver.onError(java.lang.Throwable).- Specified by:
onCompletedin interfaceObserver<T>
-
request
public void request(long n)
Description copied from interface:ProducerRequest a certain maximum number of items from this Producer. This is a way of requesting backpressure. To disable backpressure, passLong.MAX_VALUEto this method.Requests are additive but if a sequence of requests totals more than
Long.MAX_VALUEthenLong.MAX_VALUErequests will be actioned and the extras may be ignored. Arriving atLong.MAX_VALUEby addition of requests cannot be assumed to disable backpressure. For example, the code below may result inLong.MAX_VALUErequests being actioned only.request(100); request(Long.MAX_VALUE-1);
-
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.
-
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:
unsubscribein interfaceSubscription
-
isUnsubscribed
public boolean isUnsubscribed()
Description copied from interface:SubscriptionIndicates whether thisSubscriptionis currently unsubscribed.- Specified by:
isUnsubscribedin interfaceSubscription- Returns:
trueif thisSubscriptionis currently unsubscribed,falseotherwise
-
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.
-
-