typename IteratorAdaptorT::reference dereference(const IteratorAdaptorT &x) const { if (x.policies().unput_queue.size() > 0) return x.policies().unput_queue.front(); return *x.base(); }
void increment(IteratorAdaptorT &x) { if (x.policies().unput_queue.size() > 0) { // there exist pending tokens in the unput queue x.policies().unput_queue.pop_front(); } else { // the unput_queue is empty, so advance the base iterator ++x.base(); } }