Comparison

util/smqueue.lua @ 12058:4860da718e87

util.smqueue: Simplify compat table, fix dependent modules (thanks Martin) There was an off-by-one in the modulo calculation. Switching to a plain old array-table makes the apparent size of the queue wrong, but since some of the queue may not be available this is likely for the best.
author Kim Alvefur <zash@zash.se>
date Thu, 16 Dec 2021 12:16:45 +0100
parent 12055:daced16154fa
child 12975:d10957394a3c
comparison
equal deleted inserted replaced
12057:e880f5a13080 12058:4860da718e87
36 36
37 function smqueue:resume() return self._queue:items() end 37 function smqueue:resume() return self._queue:items() end
38 38
39 function smqueue:consume() return self._queue:consume() end 39 function smqueue:consume() return self._queue:consume() end
40 40
41 local compat_mt = {} 41 function smqueue:table()
42 42 local t = {};
43 function compat_mt:__index(i) 43 for i, v in self:resume() do t[i] = v; end
44 if i < self._queue._tail then return nil end 44 return t
45 return self._queue._queue._items[(i + self._queue._tail) % self._queue._queue.size]
46 end 45 end
47
48 function compat_mt:__len() return self._queue:count_unacked() end
49
50 function smqueue:table() return setmetatable({ _queue = self }, compat_mt) end
51 46
52 local function freeze(q) return { head = q._head; tail = q._tail } end 47 local function freeze(q) return { head = q._head; tail = q._tail } end
53 48
54 local queue_mt = { __name = "smqueue"; __index = smqueue; __len = smqueue.count_unacked; __freeze = freeze } 49 local queue_mt = { __name = "smqueue"; __index = smqueue; __len = smqueue.count_unacked; __freeze = freeze }
55 50