@Override public int requestFusion(int mode) { QueueSubscription<T> qs = this.qs; if (qs != null && (mode & BOUNDARY) == 0) { int m = qs.requestFusion(mode); if (m != NONE) { syncFused = m == SYNC; } return m; } return NONE; }
@Override public int requestFusion(int mode) { QueueSubscription<T> qs = this.qs; if (qs != null && (mode & BOUNDARY) == 0) { int m = qs.requestFusion(mode); if (m != NONE) { syncFused = m == SYNC; } return m; } return NONE; }
/** * Calls the upstream's QueueSubscription.requestFusion with the mode and * saves the established mode in {@link #sourceMode} if that mode doesn't * have the {@link QueueSubscription#BOUNDARY} flag set. * <p> * If the upstream doesn't support fusion ({@link #qs} is null), the method * returns {@link QueueSubscription#NONE}. * @param mode the fusion mode requested * @return the established fusion mode */ protected final int transitiveBoundaryFusion(int mode) { QueueSubscription<T> qs = this.qs; if (qs != null) { if ((mode & BOUNDARY) == 0) { int m = qs.requestFusion(mode); if (m != NONE) { sourceMode = m; } return m; } } return NONE; }
/** * Calls the upstream's QueueSubscription.requestFusion with the mode and * saves the established mode in {@link #sourceMode} if that mode doesn't * have the {@link QueueSubscription#BOUNDARY} flag set. * <p> * If the upstream doesn't support fusion ({@link #qs} is null), the method * returns {@link QueueSubscription#NONE}. * @param mode the fusion mode requested * @return the established fusion mode */ protected final int transitiveBoundaryFusion(int mode) { QueueSubscription<T> qs = this.qs; if (qs != null) { if ((mode & BOUNDARY) == 0) { int m = qs.requestFusion(mode); if (m != NONE) { sourceMode = m; } return m; } } return NONE; }
@Override public int requestFusion(int mode) { QueueSubscription<T> qs = this.qs; if (qs != null && (mode & BOUNDARY) == 0) { int m = qs.requestFusion(mode); if (m != NONE) { syncFused = m == SYNC; } return m; } return NONE; }
@Override public int requestFusion(int mode) { QueueSubscription<T> fs = qs; if (fs != null) { int m = fs.requestFusion(mode & ~QueueFuseable.BOUNDARY); this.sourceMode = m; return m; } return QueueFuseable.NONE; }
@Override public int requestFusion(int mode) { QueueSubscription<T> fs = qs; if (fs != null) { return fs.requestFusion(mode & ~BOUNDARY); } return NONE; }
@Override public void onSubscribe(Subscription s) { this.upstream = s; ((QueueSubscription<?>)s).requestFusion(QueueFuseable.ANY); }
@Override public void onSubscribe(Subscription s) { if (SubscriptionHelper.setOnce(this, s)) { if (s instanceof QueueSubscription) { @SuppressWarnings("unchecked") QueueSubscription<U> qs = (QueueSubscription<U>) s; int m = qs.requestFusion(QueueSubscription.ANY | QueueSubscription.BOUNDARY); if (m == QueueSubscription.SYNC) { fusionMode = m; queue = qs; done = true; parent.drain(); return; } if (m == QueueSubscription.ASYNC) { fusionMode = m; queue = qs; } } s.request(bufferSize); } }
@Override public void onSubscribe(Subscription s) { qs = (QueueSubscription<Integer>)s; assertEquals(QueueFuseable.ASYNC, qs.requestFusion(QueueFuseable.ANY)); }
@Override public void onSubscribe(Subscription s) { if (SubscriptionHelper.setOnce(upstream, s)) { if (s instanceof QueueSubscription) { @SuppressWarnings("unchecked") QueueSubscription<T> qs = (QueueSubscription<T>)s; int m = qs.requestFusion(QueueSubscription.ANY); if (m == QueueSubscription.SYNC) { fusionMode = m; queue = qs; done = true; drain(); return; } if (m == QueueSubscription.ASYNC) { fusionMode = m; queue = qs; s.request(bufferSize); return; } } queue = new SpscArrayQueue<T>(bufferSize); s.request(bufferSize); } }
@Override public void onSubscribe(Subscription s) { if (SubscriptionHelper.setOnce(this, s)) { if (s instanceof QueueSubscription) { @SuppressWarnings("unchecked") QueueSubscription<T> qs = (QueueSubscription<T>) s; int m = qs.requestFusion(QueueSubscription.ANY); if (m == QueueSubscription.SYNC) { sourceMode = m; queue = qs; done = true; parent.drain(); return; } if (m == QueueSubscription.ASYNC) { sourceMode = m; queue = qs; s.request(prefetch); return; } } queue = new SpscArrayQueue<T>(prefetch); s.request(prefetch); } }
@Override public void onSubscribe(Subscription s) { if (SubscriptionHelper.setOnce(this, s)) { if (s instanceof QueueSubscription) { @SuppressWarnings("unchecked") QueueSubscription<R> qs = (QueueSubscription<R>) s; int m = qs.requestFusion(QueueSubscription.ANY | QueueSubscription.BOUNDARY); if (m == QueueSubscription.SYNC) { fusionMode = m; queue = qs; done = true; parent.drain(); return; } if (m == QueueSubscription.ASYNC) { fusionMode = m; queue = qs; s.request(bufferSize); return; } } queue = new SpscArrayQueue<R>(bufferSize); s.request(bufferSize); } }
@SuppressWarnings("unchecked") @Override public void onSubscribe(Subscription s) { if (SubscriptionHelper.setOnce(this, s)) { if (s instanceof QueueSubscription) { QueueSubscription<T> f = (QueueSubscription<T>) s; int m = f.requestFusion(QueueSubscription.ANY | QueueSubscription.BOUNDARY); if (m == QueueSubscription.SYNC) { sourceMode = m; queue = f; done = true; parent.drain(); return; } if (m == QueueSubscription.ASYNC) { sourceMode = m; queue = f; s.request(prefetch); return; } } queue = new SpscArrayQueue<T>(prefetch); s.request(prefetch); } }
@Override public void onSubscribe(Subscription s) { if (SubscriptionHelper.setOnce(this.upstream, s)) { if (s instanceof QueueSubscription) { @SuppressWarnings("unchecked") QueueSubscription<T> qs = (QueueSubscription<T>) s; int m = qs.requestFusion(QueueSubscription.ANY | QueueSubscription.BOUNDARY); if (m == QueueSubscription.SYNC) { sourceMode = m; queue = qs; terminalEvent = NotificationLite.complete(); dispatch(); return; } if (m == QueueSubscription.ASYNC) { sourceMode = m; queue = qs; s.request(bufferSize); return; } } queue = new SpscArrayQueue<T>(bufferSize); s.request(bufferSize); } }
@Override public void onSubscribe(Subscription s) { try { if (s instanceof QueueSubscription) { @SuppressWarnings("unchecked") QueueSubscription<Object> qs = (QueueSubscription<Object>) s; state[0] = true; int m = qs.requestFusion(QueueFuseable.ANY); if (m != QueueFuseable.NONE) { state[1] = true; state[2] = qs.isEmpty(); qs.clear(); state[3] = qs.isEmpty(); } } cdl.countDown(); } finally { s.cancel(); } }
@Override public void onSubscribe(Subscription s) { @SuppressWarnings("unchecked") QueueSubscription<Integer> qs = (QueueSubscription<Integer>)s; qs.requestFusion(QueueFuseable.ANY); try { assertEquals(1, qs.poll().intValue()); } catch (Throwable ex) { fail(ex.toString()); } qs.clear(); try { assertNull(qs.poll()); } catch (Throwable ex) { fail(ex.toString()); } }
@Override public void onSubscribe(Subscription s) { @SuppressWarnings("unchecked") QueueSubscription<Integer> qs = (QueueSubscription<Integer>)s; qs.requestFusion(QueueFuseable.ANY); assertFalse(qs.isEmpty()); try { assertEquals(1, qs.poll().intValue()); } catch (Throwable ex) { throw new RuntimeException(ex); } assertFalse(qs.isEmpty()); qs.clear(); assertTrue(qs.isEmpty()); qs.cancel(); }
@Override public void onSubscribe(Subscription s) { @SuppressWarnings("unchecked") QueueSubscription<Integer> qs = (QueueSubscription<Integer>)s; qs.requestFusion(QueueFuseable.ANY); assertFalse(qs.isEmpty()); try { assertEquals(1, qs.poll().intValue()); } catch (Throwable ex) { throw new RuntimeException(ex); } assertFalse(qs.isEmpty()); qs.clear(); assertTrue(qs.isEmpty()); qs.cancel(); }
@Override public void onSubscribe(Subscription s) { @SuppressWarnings("unchecked") QueueSubscription<Integer> qs = (QueueSubscription<Integer>)s; assertEquals(QueueFuseable.SYNC, qs.requestFusion(QueueFuseable.ANY)); try { assertFalse("Source reports being empty!", qs.isEmpty()); assertEquals(1, qs.poll().intValue()); assertFalse("Source reports being empty!", qs.isEmpty()); assertEquals(2, qs.poll().intValue()); assertFalse("Source reports being empty!", qs.isEmpty()); qs.clear(); assertTrue("Source reports not empty!", qs.isEmpty()); assertNull(qs.poll()); } catch (Throwable ex) { throw ExceptionHelper.wrapOrThrow(ex); } }