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) 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.
-
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 thisSubscription
is currently unsubscribed.void
onCompleted()
Notifies the Observer that theObservable
has finished sending push-based notifications.void
onError(java.lang.Throwable e)
Notifies the Observer that theObservable
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
-
-
-
-
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: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 eitherObserver.onCompleted()
orObserver.onError(java.lang.Throwable)
.
-
onError
public void onError(java.lang.Throwable e)
Description copied from interface:Observer
Notifies the Observer that theObservable
has experienced an error condition.If the
Observable
calls this method, it will not thereafter callObserver.onNext(T)
orObserver.onCompleted()
.
-
onCompleted
public void onCompleted()
Description copied from interface:Observer
Notifies the Observer that theObservable
has finished sending push-based notifications.The
Observable
will not call this method if it callsObserver.onError(java.lang.Throwable)
.- Specified by:
onCompleted
in interfaceObserver<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, passLong.MAX_VALUE
to this method.Requests are additive but if a sequence of requests totals more than
Long.MAX_VALUE
thenLong.MAX_VALUE
requests will be actioned and the extras may be ignored. Arriving atLong.MAX_VALUE
by addition of requests cannot be assumed to disable backpressure. For example, the code below may result inLong.MAX_VALUE
requests 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:
unsubscribe
in interfaceSubscription
-
isUnsubscribed
public boolean isUnsubscribed()
Description copied from interface:Subscription
Indicates whether thisSubscription
is currently unsubscribed.- Specified by:
isUnsubscribed
in interfaceSubscription
- Returns:
true
if thisSubscription
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.
-
-