package com.tinkerpop.blueprints.util.wrappers.event;

import com.tinkerpop.blueprints.Element;
import com.tinkerpop.blueprints.Index;

import java.util.Iterator;

/**
 * A sequence of indices that applies the list of listeners into each element.
 *
 * @author Stephen Mallette
 */
class EventIndexIterable<T extends Element> implements Iterable<Index<T>> {

    private final Iterable<Index<T>> iterable;
    private final EventGraph eventGraph;

    public EventIndexIterable(final Iterable<Index<T>> iterable, final EventGraph eventGraph) {
        this.iterable = iterable;
        this.eventGraph = eventGraph;
    }

    public Iterator<Index<T>> iterator() {
        return new Iterator<Index<T>>() {
            private final Iterator<Index<T>> itty = iterable.iterator();

            public void remove() {
                this.itty.remove();
            }

            public Index<T> next() {
                return new EventIndex<T>(this.itty.next(), eventGraph);
            }

            public boolean hasNext() {
                return itty.hasNext();
            }
        };
    }
}