Mercurial > prosody-hg
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 |
| parents | daced16154fa |
| children | 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 |
