Comparison

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
comparison
equal deleted inserted replaced
10972:b3773b1b90a1 10973:39991e40d1dc
49 if items == 0 then 49 if items == 0 then
50 return nil; 50 return nil;
51 end 51 end
52 return t[tail]; 52 return t[tail];
53 end; 53 end;
54 replace = function (self, data)
55 if items == 0 then
56 return self:push(data);
57 end
58 t[tail] = data;
59 return true;
60 end;
54 items = function (self) 61 items = function (self)
55 return function (_, pos) 62 return function (_, pos)
56 if pos >= items then 63 if pos >= items then
57 return nil; 64 return nil;
58 end 65 end