Software /
code /
prosody
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 |