summaryrefslogtreecommitdiff
path: root/base/src
diff options
context:
space:
mode:
authorBenjamin J. Culkin <bjculkin@mix.wvu.edu>2018-07-17 18:22:09 -0300
committerBenjamin J. Culkin <bjculkin@mix.wvu.edu>2018-07-17 18:22:09 -0300
commit27955d04989bf819c60632999ceaef4e985da6f7 (patch)
tree4884b257da360b65d5c409799e40ce062c2dc7bd /base/src
parentcb9ce4c0c6fd68b2aa7664eb7c143e186f3033f6 (diff)
Update tape interface
This adds a seekTo method, among other things
Diffstat (limited to 'base/src')
-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);
}