blob: ffce45b42443afec4799ddf191f152c56707a23a [file] [log] [blame]
package org.dartlang.vm.service.element;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import java.util.Iterator;
/**
* Simple wrapper around a {@link JsonArray} which lazily converts {@link JsonObject} elements to
* subclasses of {@link Element}. Subclasses need only implement {@link #basicGet(JsonArray, int)}
* to return an {@link Element} subclass for the {@link JsonObject} at a given index.
*/
public abstract class ElementList<T> implements Iterable<T> {
private final JsonArray array;
public ElementList(JsonArray array) {
this.array = array;
}
public T get(int index) {
return basicGet(array, index);
}
public boolean isEmpty() {
return size() == 0;
}
@Override
public Iterator<T> iterator() {
return new Iterator<T>() {
int index = 0;
@Override
public boolean hasNext() {
return index < size();
}
@Override
public T next() {
return get(index++);
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
};
}
public int size() {
return array.size();
}
protected abstract T basicGet(JsonArray array, int index);
}