Diff

util/queue.lua @ 10973:39991e40d1dc

util.dbuffer: dynamic string buffer Similar to util.ringbuffer (and shares almost identical API). Differences: - size limit is optional and dynamic - does not allocate a fixed buffer of max_size bytes - focus on simply storing references to existing string objects where possible, avoiding unnecessary allocations - references are still stored in a ring buffer to enable use as a fast FIFO Optional second parameter to new() provides the number of ring buffer segments. On Lua 5.2 on my laptop, a segment is ~19 bytes. If the ring buffer fills up, the next write will compact all strings into a single item.
author Matthew Wild <mwild1@gmail.com>
date Fri, 26 Jun 2020 16:41:31 +0100
parent 9926:1bfd28e774db
child 11114:6a608ecb3471
line wrap: on
line diff
--- a/util/queue.lua	Thu Jun 25 20:45:06 2020 +0200
+++ b/util/queue.lua	Fri Jun 26 16:41:31 2020 +0100
@@ -51,6 +51,13 @@
 			end
 			return t[tail];
 		end;
+		replace = function (self, data)
+			if items == 0 then
+				return self:push(data);
+			end
+			t[tail] = data;
+			return true;
+		end;
 		items = function (self)
 			return function (_, pos)
 				if pos >= items then