2018-05-04 11:13:00 +02:00

56 lines
1.1 KiB
Lua

--buffer by rnd
buffer = {};
buffer.idx = 0
buffer.data = {};
buffer.t = 0 -- how many unread insertions
buffer.add = function(element) -- insert new element
local i = buffer.idx+1;
if i > buffer.size then i = 1 end
buffer.data[i]=element
buffer.idx = i
local t = buffer.t +1
if t>buffer.size then t = buffer.size end
buffer.t = t
end
buffer.read = function() -- pop 1 message, return nil if none
local t = buffer.t;
if t>0 then
buffer.t = t-1
local idx = buffer.idx;
if idx>1 then buffer.idx = idx - 1 else buffer.idx = buffer.size end
return buffer.data[idx];
end
end
buffer.last = function(count) -- returns list of "count" recently inserted elements
local ret = {};
local idx = buffer.idx;
local size = buffer.size;
if count > size then count = size end
local data = buffer.data
for i = idx,1,-1 do
ret[#ret+1] = data[i];
end
if count > idx then
for i = 1,count - idx do
ret[#ret+1]=data[buffer.size-i+1]
end
end
return ret
end
buffer.size = 3;
buffer.add(1);buffer.add(2);
--say(minetest.serialize(buffer.read()))
say("1 " .. buffer.read())
say(buffer.t)
say("2 " .. buffer.read())
say("3 " .. buffer.read())
self.remove()