package org.jtwig.util; import org.jtwig.value.WrappedCollection; import org.jtwig.value.context.ValueContext; import java.util.concurrent.atomic.AtomicInteger; public class LoopCursor { private final AtomicInteger index; private final ValueContext parentContext; private final WrappedCollection collection; public LoopCursor(ValueContext parentContext, WrappedCollection collection) { this.index = new AtomicInteger(0); this.parentContext = parentContext; this.collection = collection; } public int step() { return index.getAndIncrement(); } public int getIndex () { return index.get() + 1; } public int getIndex0 () { return index.get(); } public int getLength () { return collection.size(); } public ValueContext getParent () { return parentContext; } public boolean isFirst () { return index.get() == 0; } public boolean isLast () { return index.get() >= getLength() - 1; } public int getRevindex () { return getLength() - getIndex0(); } public int getRevindex0 () { return getLength() - getIndex(); } }