public BoundedState(EvictionPolicy evictionPolicy, Func1<Object, Object> enterTransform, Func1<Object, Object> leaveTransform) { this.list = new NodeList<Object>(); this.tail = list.tail; this.evictionPolicy = evictionPolicy; this.enterTransform = enterTransform; this.leaveTransform = leaveTransform; } @Override
@Override public void error(Throwable e) { if (!terminated) { terminated = true; // don't evict the terminal value evictionPolicy.evict(list); // so add it later list.addLast(enterTransform.call(nl.error(e))); tail = list.tail; } } public void accept(Observer<? super T> o, NodeList.Node<Object> node) {
@Override public void evict(NodeList<Object> t1) { long now = scheduler.now(); while (!t1.isEmpty()) { NodeList.Node<Object> n = t1.head.next; if (test(n.value, now)) { t1.removeFirst(); } else { break; } } }
@Override public void evict(NodeList<Object> t1) { while (t1.size() > maxSize) { t1.removeFirst(); } }
@Override public void complete() { if (!terminated) { terminated = true; // don't evict the terminal value evictionPolicy.evict(list); // so add it later list.addLast(enterTransform.call(nl.completed())); tail = list.tail; } } @Override
@Override public void next(T value) { if (!terminated) { list.addLast(enterTransform.call(nl.next(value))); evictionPolicy.evict(list); tail = list.tail; } } @Override