From 95a9fe16b5999ba28b86398ce1e23af6ae3dbf89 Mon Sep 17 00:00:00 2001 From: otya128 Date: Sun, 4 Dec 2016 14:00:01 +0900 Subject: [PATCH] Make runSlot faster --- SMILEBASIC/petitcomputer.d | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/SMILEBASIC/petitcomputer.d b/SMILEBASIC/petitcomputer.d index abfedbf..bf2e94b 100644 --- a/SMILEBASIC/petitcomputer.d +++ b/SMILEBASIC/petitcomputer.d @@ -751,7 +751,17 @@ class PetitComputer int oldpc; void runSlot(int lot) { - parser = new Parser(std.algorithm.reduce!("a ~ b")(slot[lot].program.opSlice)); + import std.algorithm.iteration, std.outbuffer; + auto buffer = new OutBuffer(); + buffer.reserve(slot[lot].program.opSlice.map!"(a.length + 1) * 2".sum); + + foreach(line; slot[lot].program) + { + buffer.write(line); + } + ubyte[] progbuff = buffer.toBytes; + wchar[] progbuff2 = (cast(wchar*)progbuff.ptr)[0..progbuff.length / 2]; + parser = new Parser(cast(wstring)progbuff2); try { vm = parser.compile();