summaryrefslogtreecommitdiff
path: root/dice-lang/src/bjc/dicelang/v2/StreamEngine.java
diff options
context:
space:
mode:
authorbculkin2442 <bjculkin@mix.wvu.edu>2017-02-16 09:56:40 -0500
committerbculkin2442 <bjculkin@mix.wvu.edu>2017-02-16 09:56:40 -0500
commit5fd7a83838f607c3eced0e0b7d97a84f6fb5613e (patch)
treeebc88eadcf46275ea175ae90ab3cb4592c142f4b /dice-lang/src/bjc/dicelang/v2/StreamEngine.java
parentf9752a872ad68a47b872eccb953332d372052cac (diff)
Basic stream commands
Diffstat (limited to 'dice-lang/src/bjc/dicelang/v2/StreamEngine.java')
-rw-r--r--dice-lang/src/bjc/dicelang/v2/StreamEngine.java73
1 files changed, 73 insertions, 0 deletions
diff --git a/dice-lang/src/bjc/dicelang/v2/StreamEngine.java b/dice-lang/src/bjc/dicelang/v2/StreamEngine.java
new file mode 100644
index 0000000..c17abe4
--- /dev/null
+++ b/dice-lang/src/bjc/dicelang/v2/StreamEngine.java
@@ -0,0 +1,73 @@
+package bjc.dicelang.v2;
+
+import bjc.utils.funcdata.FunctionalList;
+import bjc.utils.funcdata.IList;
+import bjc.utils.esodata.Tape;
+
+public class StreamEngine {
+ private DiceLangEngine eng;
+
+ private Tape<IList<String>> streams;
+ private IList<String> currStream;
+
+ public StreamEngine(DiceLangEngine eng) {
+ streams = new Tape<>();
+
+ currStream = new FunctionalList<>();
+ streams.append(currStream);
+ }
+
+ public boolean doStreams(String[] toks, IList<String> dest) {
+ for(String tk : toks) {
+ if(tk.startsWith("{@")) {
+ if(!processCommand(tk)) return false;
+ } else {
+ currStream.add(tk);
+ }
+ }
+
+ for(String tk : currStream.toIterable()) {
+ dest.add(tk);
+ }
+
+ return true;
+ }
+
+ private boolean processCommand(String tk) {
+ switch(tk.charAt(2)) {
+ case '+':
+ streams.append(new FunctionalList<>());
+ break;
+ case '>':
+ if(!streams.right()) {
+ System.out.println("\tERROR: Attempted to switch to non-existent stream");
+ return false;
+ }
+
+ currStream = streams.item();
+ break;
+ case '<':
+ if(!streams.left()) {
+ System.out.println("\tERROR: Attempted to switch to non-existent stream");
+ return false;
+ }
+
+ currStream = streams.item();
+ break;
+ case '-':
+ if(streams.size() == 1) {
+ System.out.println("\tERROR: Cannot delete last stream");
+ return false;
+ } else {
+ streams.remove();
+ currStream = streams.item();
+ }
+ break;
+ default:
+ System.out.println("\tERROR: Unknown stream control command: " + tk);
+ return false;
+ }
+
+ return true;
+ }
+}