equal
deleted
inserted
replaced
68 |
68 |
69 function smqueue:consume() : queue.queue.consume_iter |
69 function smqueue:consume() : queue.queue.consume_iter |
70 return self._queue:consume() |
70 return self._queue:consume() |
71 end |
71 end |
72 |
72 |
73 -- Compatibility wrapper, meant to look like a plain ol' array |
73 -- Compatibility layer, plain ol' table |
74 local record compat_mt |
|
75 _queue : smqueue<any> |
|
76 end |
|
77 |
|
78 function compat_mt:__index(i : integer) : any |
|
79 if i < self._queue._tail then return nil end |
|
80 return self._queue._queue._items[(i + self._queue._tail) % self._queue._queue.size]; |
|
81 end |
|
82 |
|
83 function compat_mt:__len() : integer |
|
84 return self._queue:count_unacked() |
|
85 end |
|
86 |
|
87 function smqueue:table() : { any } |
74 function smqueue:table() : { any } |
88 return setmetatable({ _queue = self }, compat_mt); |
75 local t : { any } = {}; |
|
76 for i, v in self:resume() do |
|
77 t[i] = v; |
|
78 end |
|
79 return t; |
89 end |
80 end |
90 |
81 |
91 local function freeze(q : smqueue<any>) : { string:integer } |
82 local function freeze(q : smqueue<any>) : { string:integer } |
92 return { head = q._head, tail = q._tail } |
83 return { head = q._head, tail = q._tail } |
93 end |
84 end |