summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBen Culkin <scorpress@gmail.com>2020-04-12 13:13:42 -0400
committerBen Culkin <scorpress@gmail.com>2020-04-12 13:13:42 -0400
commit9052ed6da37af23ea82588d248f409e60a33c6cb (patch)
treee816d2032e0a550754712bbae836cdb11383e291 /src
parent13aec7074fb0583a72112376df7b8764b0823ce0 (diff)
Finish up extraction
This applies the changes that were necessary to complete the extraction of these packages from bjc-utils
Diffstat (limited to 'src')
-rw-r--r--src/main/java/bjc/data/ArrayIterator.java10
-rw-r--r--src/main/java/bjc/data/QueuedIterator.java9
-rw-r--r--src/main/java/bjc/esodata/SingleTape.java5
-rw-r--r--src/main/java/bjc/esodata/Tape.java16
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);
+ }
}