From 27955d04989bf819c60632999ceaef4e985da6f7 Mon Sep 17 00:00:00 2001 From: "Benjamin J. Culkin" Date: Tue, 17 Jul 2018 18:22:09 -0300 Subject: Update tape interface This adds a seekTo method, among other things --- base/src/main/java/bjc/utils/esodata/DoubleTape.java | 4 ++++ base/src/main/java/bjc/utils/esodata/SingleTape.java | 16 ++++++++++++++++ base/src/main/java/bjc/utils/esodata/Tape.java | 2 ++ 3 files changed, 22 insertions(+) (limited to 'base/src') 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 implements Tape, DoubleSided { return succ; } + public boolean seekTo(int tgtPos) { + return front.seekTo(tgtPos); + } + @Override public void flip() { final Tape 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 implements Tape { 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 { * @return Whether the cursor was moved right. */ boolean right(int amt); + + boolean seekTo(int pos); } -- cgit v1.2.3