diff options
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/bjc/data/ArrayIterator.java | 10 | ||||
| -rw-r--r-- | src/main/java/bjc/data/QueuedIterator.java | 9 | ||||
| -rw-r--r-- | src/main/java/bjc/esodata/SingleTape.java | 5 | ||||
| -rw-r--r-- | src/main/java/bjc/esodata/Tape.java | 16 |
4 files changed, 36 insertions, 4 deletions
diff --git a/src/main/java/bjc/data/ArrayIterator.java b/src/main/java/bjc/data/ArrayIterator.java index 7778b81..6037e34 100644 --- a/src/main/java/bjc/data/ArrayIterator.java +++ b/src/main/java/bjc/data/ArrayIterator.java @@ -4,12 +4,21 @@ import java.util.Iterator; /** * Represents an iterator over an array of values. * + * @param <T> The type of values in the array. + * * @author Ben Culkin */ public class ArrayIterator<T> implements Iterator<T> { private Object[] arr; private int idx; + /** + * Create a new array iterator. + * + * @param elms + * The array that will be iterated over. + */ + @SafeVarargs public ArrayIterator(T... elms) { arr = elms; idx = 0; @@ -20,6 +29,7 @@ public class ArrayIterator<T> implements Iterator<T> { return idx < arr.length; } + @SuppressWarnings("unchecked") @Override public T next() { if (idx >= arr.length) return null; diff --git a/src/main/java/bjc/data/QueuedIterator.java b/src/main/java/bjc/data/QueuedIterator.java index 1146018..ebacb52 100644 --- a/src/main/java/bjc/data/QueuedIterator.java +++ b/src/main/java/bjc/data/QueuedIterator.java @@ -33,6 +33,7 @@ public class QueuedIterator<E> implements Iterator<E> { * * @return A queued iterator. */ + @SafeVarargs public static <E> QueuedIterator<E> queued(E... vals) { return new QueuedIterator<>(new ArrayIterator<>(vals)); } @@ -139,7 +140,7 @@ public class QueuedIterator<E> implements Iterator<E> { * @param vals * Values to iterate over first. */ - public void before(E... vals) { + public void before(@SuppressWarnings("unchecked") E... vals) { before(new ArrayIterator<>(vals)); } @@ -169,7 +170,7 @@ public class QueuedIterator<E> implements Iterator<E> { * @param vals * The values to iterate over next. */ - public void after(E... vals) { + public void after(@SuppressWarnings("unchecked") E... vals) { after(new ArrayIterator<>(vals)); } @@ -197,9 +198,9 @@ public class QueuedIterator<E> implements Iterator<E> { * Add a new set of values who we will iterate through last. * * @param vals - * The iterable to go through last. + * The values we will iterate over. */ - public void last(E... vals) { + public void last(@SuppressWarnings("unchecked") E... vals) { last(new ArrayIterator<>(vals)); } diff --git a/src/main/java/bjc/esodata/SingleTape.java b/src/main/java/bjc/esodata/SingleTape.java index 28dca2a..c2957a6 100644 --- a/src/main/java/bjc/esodata/SingleTape.java +++ b/src/main/java/bjc/esodata/SingleTape.java @@ -181,6 +181,11 @@ public class SingleTape<T> implements Tape<T> { } @Override + public void append(T itm) { + backing.add(itm); + } + + @Override public int hashCode() { final int prime = 31; diff --git a/src/main/java/bjc/esodata/Tape.java b/src/main/java/bjc/esodata/Tape.java index 080e216..7d5fd9a 100644 --- a/src/main/java/bjc/esodata/Tape.java +++ b/src/main/java/bjc/esodata/Tape.java @@ -132,4 +132,20 @@ public interface Tape<T> { default boolean atEnd() { return position() == size(); } + + /** + * Append an item to the tape. + * + * By default, uses a fairly non-performant implementation. Should be overidden in subclasses to be more performant. + * @param itm The item to append. + */ + default void append(T itm) { + int pos = position(); + + last(); + + insertAfter(itm); + + seekTo(pos); + } } |
