summaryrefslogtreecommitdiff
path: root/base/src/main/java/bjc/utils/esodata
diff options
context:
space:
mode:
Diffstat (limited to 'base/src/main/java/bjc/utils/esodata')
-rw-r--r--base/src/main/java/bjc/utils/esodata/DoubleTape.java4
-rw-r--r--base/src/main/java/bjc/utils/esodata/SingleTape.java16
-rw-r--r--base/src/main/java/bjc/utils/esodata/Tape.java2
3 files changed, 22 insertions, 0 deletions
diff --git a/base/src/main/java/bjc/utils/esodata/DoubleTape.java b/base/src/main/java/bjc/utils/esodata/DoubleTape.java
index 520ab5e..e32045e 100644
--- a/base/src/main/java/bjc/utils/esodata/DoubleTape.java
+++ b/base/src/main/java/bjc/utils/esodata/DoubleTape.java
@@ -134,6 +134,10 @@ public class DoubleTape<T> implements Tape<T>, DoubleSided {
return succ;
}
+ public boolean seekTo(int tgtPos) {
+ return front.seekTo(tgtPos);
+ }
+
@Override
public void flip() {
final Tape<T> tmp = front;
diff --git a/base/src/main/java/bjc/utils/esodata/SingleTape.java b/base/src/main/java/bjc/utils/esodata/SingleTape.java
index 636c04c..d57bc7f 100644
--- a/base/src/main/java/bjc/utils/esodata/SingleTape.java
+++ b/base/src/main/java/bjc/utils/esodata/SingleTape.java
@@ -163,6 +163,22 @@ public class SingleTape<T> implements Tape<T> {
return true;
}
+ public boolean seekTo(int tgtPos) {
+ if(tgtPos < 0)
+ return false;
+
+ if(tgtPos >= backing.size() - 1)
+ if(autoExtend)
+ while(tgtPos >= backing.size() - 1)
+ backing.add(null);
+ else
+ return false;
+
+ pos = tgtPos;
+
+ return true;
+ }
+
@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 ae218ac..2c7f517 100644
--- a/base/src/main/java/bjc/utils/esodata/Tape.java
+++ b/base/src/main/java/bjc/utils/esodata/Tape.java
@@ -112,4 +112,6 @@ public interface Tape<T> {
* @return Whether the cursor was moved right.
*/
boolean right(int amt);
+
+ boolean seekTo(int pos);
}