summaryrefslogtreecommitdiff
path: root/dice-lang/src/bjc/dicelang/v2/StreamEngine.java
diff options
context:
space:
mode:
Diffstat (limited to 'dice-lang/src/bjc/dicelang/v2/StreamEngine.java')
-rw-r--r--dice-lang/src/bjc/dicelang/v2/StreamEngine.java83
1 files changed, 50 insertions, 33 deletions
diff --git a/dice-lang/src/bjc/dicelang/v2/StreamEngine.java b/dice-lang/src/bjc/dicelang/v2/StreamEngine.java
index afd4bc1..39bbc0d 100644
--- a/dice-lang/src/bjc/dicelang/v2/StreamEngine.java
+++ b/dice-lang/src/bjc/dicelang/v2/StreamEngine.java
@@ -11,23 +11,29 @@ public class StreamEngine {
private Tape<IList<String>> streams;
private IList<String> currStream;
- public StreamEngine(DiceLangEngine eng) {
+ public StreamEngine(DiceLangEngine engine) {
+ eng = engine;
+ }
+
+ private void init() {
streams = new SingleTape<>();
currStream = new FunctionalList<>();
- streams.append(currStream);
+ streams.insertBefore(currStream);
}
public boolean doStreams(String[] toks, IList<String> dest) {
+ init();
+
for(String tk : toks) {
- if(tk.startsWith("{@")) {
+ if(tk.startsWith("{@S")) {
if(!processCommand(tk)) return false;
} else {
currStream.add(tk);
}
}
- for(String tk : currStream.toIterable()) {
+ for(String tk : currStream) {
dest.add(tk);
}
@@ -35,38 +41,49 @@ public class StreamEngine {
}
private boolean processCommand(String tk) {
- switch(tk.charAt(2)) {
- case '+':
- streams.add(new FunctionalList<>());
- break;
- case '>':
- if(!streams.right()) {
- System.out.println("\tERROR: Attempted to switch to non-existent stream");
- return false;
- }
+ char[] comms = null;
- currStream = streams.item();
- break;
- case '<':
- if(!streams.left()) {
- System.out.println("\tERROR: Attempted to switch to non-existent stream");
- return false;
- }
+ if(tk.length() > 5) {
+ comms = tk.substring(3, tk.length() - 1).toCharArray();
+ } else {
+ comms = new char[1];
+ comms[0] = tk.charAt(3);
+ }
+
+ for(char comm : comms) {
+ switch(comm) {
+ case '+':
+ streams.insertAfter(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;
+ 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;