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}