From 59b7c5a0282f896892ae6c2d6e6b8d9ee5703b17 Mon Sep 17 00:00:00 2001 From: Starfflame Date: Thu, 20 May 2021 02:00:48 -0500 Subject: [PATCH] inputstream changes; curr never reads from after the string --- CoreHelpers.tl | 4 ++-- InputStream.tl | 20 +++++++++++++++++--- tests.lua | 1 + 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/CoreHelpers.tl b/CoreHelpers.tl index f276e4c..0d11f44 100644 --- a/CoreHelpers.tl +++ b/CoreHelpers.tl @@ -11,7 +11,7 @@ function CoreHelpers.defineWord(dict: Dictionary, str: string, func: function(En end function CoreHelpers.standardInputRefill(): string - local input = io.read().."\n" + local input = io.read().."\n\n" return input end @@ -30,7 +30,7 @@ end function CoreHelpers._fileRefill(fname: string): function(): string local f = assert(io.open(fname, "r")) return function(): string - local chunk = f:read(2^13) + local chunk = f:read(2^3) if not chunk then chunk = "" end return chunk end diff --git a/InputStream.tl b/InputStream.tl index 5c18132..eb260a3 100644 --- a/InputStream.tl +++ b/InputStream.tl @@ -14,6 +14,13 @@ end local istream_mt = {__index = InputStream} function InputStream:_manageBuffer() + local length = 0 + if self.str then + length = #self.str + else + length = -1 + end + print("self.str = ",self.str, self.offset,length) if not self.str then self.str = self.refill() self.offset = 1 @@ -48,20 +55,27 @@ end -- setters/getters function InputStream:__setRefill(func: function(): string) self.refill = func + print("setrefill") self:_manageBuffer() end -- function InputStream:curr(): string | nil - self:_manageBuffer() - if #self.str > 0 then + if self.offset > #self.str then + self:_manageBuffer() + end + if #self.str > 0 and self.offset < #self.str + 1 then return self.str:sub(self.offset, self.offset) end return nil end function InputStream:next(): string | nil - self:_manageBuffer() + print("next") + if self.offset > #self.str then + self:_manageBuffer() + end + local current_char: string | nil = nil if #self.str > 0 then current_char = self.str:sub(self.offset, self.offset) diff --git a/tests.lua b/tests.lua index 6cef769..8cc505b 100644 --- a/tests.lua +++ b/tests.lua @@ -78,6 +78,7 @@ describe("InputStream tests", function() it("handles multiple lines", function() local inputstr = "TEST\nTEST\nTEST\nTEST\nTEST\nTEST51515151" input = CoreHelpers.oneReadInputStream(inputstr) + input:curr() for i = 1, #inputstr do assert.are.same(inputstr:sub(i, i), input:next()) end