package com.carrotsearch.hppc.examples; import static com.carrotsearch.hppc.examples.Helpers.*; import java.util.Iterator; import org.junit.Before; import org.junit.Test; import com.carrotsearch.hppc.IntArrayDeque; import com.carrotsearch.hppc.cursors.IntCursor; import com.carrotsearch.hppc.procedures.IntProcedure; /** * Examples of how to iterate over HPPC deques. */ public class HppcExample_002_IteratingOverDeques { public IntArrayDeque deque; @Before public void setup() { deque = new IntArrayDeque(); deque.addLast(1, 1, 2, 3, 5); } /** * All deques implement {@link Iterable} interface that returns a "cursor" * object that moves over the container's elements. The cursor object remains * identical for the entire iteration (very little memory overhead). * * The cursor's index points at the underlying buffer's position of a * given element. */ @Test public void cursorFirstToLast() { for (IntCursor c : deque) { printfln("deque[%d] = %d", c.index, c.value); } } /** * Reverse order iterator (cursor). */ @Test public void cursorLastToFirst() { for (Iterator<IntCursor> i = deque.descendingIterator(); i.hasNext();) { IntCursor c = i.next(); printfln("deque[%d] = %d", c.index, c.value); } } /** * A for-each type loop with an anonymous class. */ @Test public void forEachLoop() throws Exception { deque.forEach(new IntProcedure() { public void apply(int value) { printfln("deque[?] = %d", value); } }); } /** * A for-each type loop with an anonymous class. */ @Test public void forEachLoopReversed() throws Exception { deque.descendingForEach(new IntProcedure() { public void apply(int value) { printfln("deque[?] = %d", value); } }); } }