From af2f0442bf443074b4480e3ad2b10b47451e5acf Mon Sep 17 00:00:00 2001 From: Jacob Date: Tue, 20 Nov 2018 00:35:39 -0500 Subject: [PATCH] Add local string Buffer, fix speed issues --- .../befide/befunge/b93/B93Interpreter.kt | 24 +++++++++----- .../kotlin/befide/befunge/core/Interpreter.kt | 2 +- ide/src/main/kotlin/befide/ide/ActionView.kt | 2 +- ide/src/main/kotlin/befide/ide/CodeView.kt | 2 ++ ide/src/main/kotlin/befide/ide/EditorView.kt | 31 ++++++++++++++++++- ide/src/main/kotlin/befide/ide/IOView.kt | 4 ++- 6 files changed, 54 insertions(+), 11 deletions(-) diff --git a/befunge/src/main/kotlin/befide/befunge/b93/B93Interpreter.kt b/befunge/src/main/kotlin/befide/befunge/b93/B93Interpreter.kt index e3477b3..573c953 100644 --- a/befunge/src/main/kotlin/befide/befunge/b93/B93Interpreter.kt +++ b/befunge/src/main/kotlin/befide/befunge/b93/B93Interpreter.kt @@ -27,7 +27,9 @@ class B93Interpreter : Interpreter { override val outputChanged: Event = Event() override val stdInput = LinkedList() - override val stdOutput = LinkedList() + override val stdOutput = LinkedList() + private var outBuf: StringBuffer = StringBuffer() + private var bufLimit = 10 private val fungeMods = HashMap() @@ -174,13 +176,18 @@ class B93Interpreter : Interpreter { val vv = pop() val v = vv.value val out = when (type) { - '.' -> v.toString().toList() + ' ' - ',' -> listOf(v.toChar()) - else -> listOf() + '.' -> v.toString() + ' ' + ',' -> v.toChar().toString() + else -> null } - stdOutput.addAll(out) - outputChanged.invoke(OutputEvent()) - return true + return out?.let{ + outBuf.append(it) + if (outBuf.length > bufLimit) { + stdOutput.add(outBuf.toString()) + outBuf.delete(0, outBuf.length) + outputChanged.invoke(OutputEvent()) + } + } != null } private fun stepIP(): Boolean { @@ -255,6 +262,9 @@ class B93Interpreter : Interpreter { } private fun terminate(): Boolean { + stdOutput.add(outBuf.toString()) + outBuf.delete(0, outBuf.length) + outputChanged.invoke(OutputEvent()) ip.mode = IpMode.Inactive return true } diff --git a/befunge/src/main/kotlin/befide/befunge/core/Interpreter.kt b/befunge/src/main/kotlin/befide/befunge/core/Interpreter.kt index 396bee5..18bf2fc 100644 --- a/befunge/src/main/kotlin/befide/befunge/core/Interpreter.kt +++ b/befunge/src/main/kotlin/befide/befunge/core/Interpreter.kt @@ -23,7 +23,7 @@ interface Interpreter { val outputChanged: Event val stdInput: Queue - val stdOutput: Queue + val stdOutput: Queue /** * @return If [ip] is inactive after this step, indicating execution has halted, then return `false` diff --git a/ide/src/main/kotlin/befide/ide/ActionView.kt b/ide/src/main/kotlin/befide/ide/ActionView.kt index 2abda3d..46fa9b2 100644 --- a/ide/src/main/kotlin/befide/ide/ActionView.kt +++ b/ide/src/main/kotlin/befide/ide/ActionView.kt @@ -33,7 +33,7 @@ class ActionView(val interp: Interpreter, val ioView: IOView) : View() { button("run") { setOnAction { - runTimeline.rate = 1000.0 + runTimeline.rate = 10000000.0 runTimeline.playFromStart() } } diff --git a/ide/src/main/kotlin/befide/ide/CodeView.kt b/ide/src/main/kotlin/befide/ide/CodeView.kt index 8798bde..185b083 100644 --- a/ide/src/main/kotlin/befide/ide/CodeView.kt +++ b/ide/src/main/kotlin/befide/ide/CodeView.kt @@ -14,5 +14,7 @@ class CodeView(val interp: Interpreter) : View() { } override val root = textarea(srcProperty) { + prefRowCount = 25 + prefColumnCount = 80 } } \ No newline at end of file diff --git a/ide/src/main/kotlin/befide/ide/EditorView.kt b/ide/src/main/kotlin/befide/ide/EditorView.kt index 6f9674a..2403271 100644 --- a/ide/src/main/kotlin/befide/ide/EditorView.kt +++ b/ide/src/main/kotlin/befide/ide/EditorView.kt @@ -27,6 +27,35 @@ class EditorView : View("Befide") { } init { - codeView.src = """64+"!dlroW ,olleH">:#,_@""" + codeView.src = """>84*>:#v_55+"ude.ub@yelruta">:#,_@>188*+>\02p\12p\:22p#v_${'$'} 55+,1- v + ^ 0 v +1\ _^#-+*< >22g02g*"_@"*-!1- #v_v> + >:>::3g: ,\188 ^^ -1\g21\g22