@Override public boolean hasObservers() { return state.observers().length > 0; } /**
@Override public void call(final Subscriber<? super T> child) { SubjectObserver<T> bo = new SubjectObserver<T>(child); addUnsubscriber(child, bo); onStart.call(bo); if (!child.isUnsubscribed()) { if (add(bo) && child.isUnsubscribed()) { remove(bo); } } } /** Registers the unsubscribe action for the given subscriber. */
@Override public void call(SubjectObserver<T> o) { o.emitFirst(state.get(), state.nl); }
@Override public void onError(final Throwable e) { if (state.active) { Object n = nl.error(e); for (SubjectObserver<T> bo : state.terminate(n)) { bo.onError(e); } } }
private static <T> BehaviorSubject<T> create(T defaultValue, boolean hasDefault) { final SubjectSubscriptionManager<T> state = new SubjectSubscriptionManager<T>(); if (hasDefault) { state.set(NotificationLite.instance().next(defaultValue)); } state.onAdded = new Action1<SubjectObserver<T>>() { @Override public void call(SubjectObserver<T> o) { o.emitFirst(state.get(), state.nl); } }; state.onTerminated = state.onAdded; return new BehaviorSubject<T>(state, state); }
/** * Creates and returns a new {@code PublishSubject}. * * @param <T> the value type * @return the new {@code PublishSubject} */ public static <T> PublishSubject<T> create() { final SubjectSubscriptionManager<T> state = new SubjectSubscriptionManager<T>(); state.onTerminated = new Action1<SubjectObserver<T>>() { @Override public void call(SubjectObserver<T> o) { o.emitFirst(state.get(), state.nl); } }; return new PublishSubject<T>(state, state); }
/** * Set a new latest NotificationLite value and return the active observers. * @param n the new latest value * @return the array of SubjectObservers, don't write into the array! */ SubjectObserver<T>[] next(Object n) { set(n); return state.observers; } /**
@Override public void call() { remove(bo); } }));
@Override public void call(SubjectObserver<T> o) { o.emitFirst(state.get(), state.nl); }
@Override public void onError(final Throwable e) { if (state.active) { Object n = nl.error(e); for (SubjectObserver<T> bo : state.terminate(n)) { bo.emitNext(n, state.nl); } } }
private static <T> ClearableBehaviorSubject<T> create(T defaultValue, boolean hasDefault) { final SubjectSubscriptionManager<T> state = new SubjectSubscriptionManager<T>(); if (hasDefault) { state.set(NotificationLite.instance().next(defaultValue)); } state.onAdded = new Action1<SubjectObserver<T>>() { @Override public void call(SubjectObserver<T> o) { o.emitFirst(state.get(), state.nl); } }; state.onTerminated = state.onAdded; return new ClearableBehaviorSubject<T>(state, state); }
/** * Creates and returns a new {@code TestSubject}. * * @param <T> the value type * @param scheduler a {@link TestScheduler} on which to operate this Subject * @return the new {@code TestSubject} */ public static <T> TestSubject<T> create(TestScheduler scheduler) { final SubjectSubscriptionManager<T> state = new SubjectSubscriptionManager<T>(); state.onAdded = new Action1<SubjectObserver<T>>() { @Override public void call(SubjectObserver<T> o) { o.emitFirst(state.get(), state.nl); } }; state.onTerminated = state.onAdded; return new TestSubject<T>(state, state, scheduler); }
public void clear() { state.set(null); }
@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); } } }
/* test support */ int subscriberCount() { return state.observers().length; } }