diff options
| author | Ben Culkin <scorpress@gmail.com> | 2020-04-06 16:48:10 -0400 |
|---|---|---|
| committer | Ben Culkin <scorpress@gmail.com> | 2020-04-06 16:48:10 -0400 |
| commit | 5ff8c489054b15d388d9db4f3a3edc1b468f959a (patch) | |
| tree | 6b0c9e5527b4442540ec700003ffb6a2a4f166aa | |
| parent | b453ec0047b5a87e36098b3519e085f03d917d81 (diff) | |
Add Tape append
Add an ability to append an item to a tape. Currently, the
implementation is kind of inefficent for everything that isn't a
SingleTape
| -rw-r--r-- | base/src/main/java/bjc/utils/esodata/SingleTape.java | 5 | ||||
| -rw-r--r-- | base/src/main/java/bjc/utils/esodata/Tape.java | 18 |
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); + } } |
