summaryrefslogtreecommitdiff
path: root/base/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'base/src/main')
-rw-r--r--base/src/main/java/bjc/utils/esodata/SingleTape.java5
-rw-r--r--base/src/main/java/bjc/utils/esodata/Tape.java18
2 files changed, 23 insertions, 0 deletions
diff --git a/base/src/main/java/bjc/utils/esodata/SingleTape.java b/base/src/main/java/bjc/utils/esodata/SingleTape.java
index be9d64b..663fe0a 100644
--- a/base/src/main/java/bjc/utils/esodata/SingleTape.java
+++ b/base/src/main/java/bjc/utils/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/base/src/main/java/bjc/utils/esodata/Tape.java b/base/src/main/java/bjc/utils/esodata/Tape.java
index 0835f7e..24319c2 100644
--- a/base/src/main/java/bjc/utils/esodata/Tape.java
+++ b/base/src/main/java/bjc/utils/esodata/Tape.java
@@ -1,5 +1,7 @@
package bjc.utils.esodata;
+import com.sun.rowset.internal.InsertRow;
+
/**
* Interface for something that acts like a tape.
*
@@ -132,4 +134,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);
+ }
}