001package org.reactivestreams.example.unicast; 002 003import java.util.Collections; 004import java.util.Iterator; 005import java.util.concurrent.Executor; 006import org.reactivestreams.Subscription; 007import org.reactivestreams.Subscriber; 008import org.reactivestreams.Publisher; 009 010public class NumberIterablePublisher extends AsyncIterablePublisher<Integer> { 011 public NumberIterablePublisher(final int from, final int to, final Executor executor) { 012 super(new Iterable<Integer>() { 013 { if(from > to) throw new IllegalArgumentException("from must be equal or greater than to!"); } 014 @Override public Iterator<Integer> iterator() { 015 return new Iterator<Integer>() { 016 private int at = from; 017 @Override public boolean hasNext() { return at < to; } 018 @Override public Integer next() { 019 if (!hasNext()) return Collections.<Integer>emptyList().iterator().next(); 020 else return at++; 021 } 022 @Override public void remove() { throw new UnsupportedOperationException(); } 023 }; 024 } 025 }, executor); 026 } 027}