@Override public void onError(Throwable e) { Object last = state.get(); if (last == null || state.active) { Object n = nl.error(e); List<Throwable> errors = null; for (SubjectObserver<T> bo : state.terminate(n)) { try { bo.emitNext(n, state.nl); } catch (Throwable e2) { if (errors == null) { errors = new ArrayList<Throwable>(); } errors.add(e2); } } Exceptions.throwIfAny(errors); } }
@Override public void replayObserver(SubjectObserver<? super T> observer) { Integer lastEmittedLink = observer.index(); if (lastEmittedLink != null) { int l = replayObserverFromIndex(lastEmittedLink, observer); observer.index(l); } else { throw new IllegalStateException("failed to find lastEmittedLink for: " + observer); } }
/** * Tries to emit a NotificationLite value as the first * value and drains the queue as long as possible. * @param n the NotificationLite value * @param nl the type-appropriate notification lite object */ protected void emitFirst(Object n, final NotificationLite<T> nl) { synchronized (this) { if (!first || emitting) { return; } first = false; emitting = n != null; } if (n != null) { emitLoop(null, n, nl); } } /**
@Override public void onCompleted() { if (state.active) { Object last = lastValue; if (last == null) { last = nl.completed(); } for (SubjectObserver<T> bo : state.terminate(last)) { if (last == nl.completed()) { bo.onCompleted(); } else { bo.onNext(nl.getValue(last)); bo.onCompleted(); } } } }
@Override public void call(SubjectObserver<T> o) { o.emitFirst(state.get(), state.nl); }
@Override public void call(SubjectObserver<T> o) { o.emitFirst(state.get(), state.nl); }
@Override public void onNext(T v) { Object last = state.get(); if (last == null || state.active) { Object n = nl.next(v); for (SubjectObserver<T> bo : state.next(n)) { bo.emitNext(n, state.nl); } } }
private void _onCompleted() { if (state.active) { for (SubjectObserver<T> bo : state.terminate(NotificationLite.instance().completed())) { bo.onCompleted(); } } }
@Override public void onCompleted() { if (ssm.active) { state.complete(); for (SubjectObserver<? super T> o : ssm.terminate(NotificationLite.instance().completed())) { if (caughtUp(o)) { o.onCompleted(); } } } } /**
@Override public void call(SubjectObserver<T> o) { o.emitFirst(state.get(), state.nl); }
@Override public void onCompleted() { if (state.active) { Object n = nl.completed(); for (SubjectObserver<T> bo : state.terminate(n)) { bo.emitNext(n, state.nl); } } }
private void _onError(final Throwable e) { if (state.active) { for (SubjectObserver<T> bo : state.terminate(NotificationLite.instance().error(e))) { bo.onError(e); } } }
@Override public void call(SubjectObserver<T> t1) { NodeList.Node<Object> l = t1.index(); if (l == null) { l = state.head(); } state.replayObserverFromIndex(l, t1); }
@Override public void onNext(T v) { Object last = state.get(); if (last == null || state.active) { Object n = nl.next(v); for (SubjectObserver<T> bo : state.next(n)) { bo.emitNext(n, state.nl); } } }
@Override public void onError(Throwable e) { Object last = state.get(); if (last == null || state.active) { Object n = nl.error(e); for (SubjectObserver<T> bo : state.terminate(n)) { bo.emitNext(n, state.nl); } } }
@Override public void onCompleted() { Object last = state.get(); if (last == null || state.active) { Object n = nl.completed(); for (SubjectObserver<T> bo : state.terminate(n)) { bo.emitNext(n, state.nl); } } }
@Override public void call(SubjectObserver<T> t1) { NodeList.Node<Object> l; if (!state.terminated) { // ignore stale entries if still active l = state.replayObserverFromIndexTest(state.head(), t1, scheduler.now()); } else { // accept all if terminated l = state.replayObserverFromIndex(state.head(), t1); } t1.index(l); }
@Override public void call(SubjectObserver<T> o) { o.emitFirst(state.get(), state.nl); }
@Override public void call(SubjectObserver<T> t1) { NodeList.Node<Object> l = state.replayObserverFromIndex(state.head(), t1); t1.index(l); }