From 20937f1155d345eade9d6b538ec8a7fc4859e17e Mon Sep 17 00:00:00 2001 From: ubq323 Date: Thu, 5 Sep 2024 10:45:49 +0100 Subject: add queue --- queue.lua | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 queue.lua diff --git a/queue.lua b/queue.lua new file mode 100644 index 0000000..303728e --- /dev/null +++ b/queue.lua @@ -0,0 +1,35 @@ +local cqueues = require'cqueues' +local condition = require'cqueues.condition' +local cqaux = require'cqueues.auxlib' + +local Queue = {} + +function Queue.make() + return setmetatable({ + items = {}, + cv = condition.new(), + }, {__index=Queue}) +end + +function Queue.enqueue(self, item) + table.insert(self.items, item) + self.cv:signal() +end + +function Queue.iter(self) + return cqaux.wrap(function() + while true do + while #self.items > 0 do + local items = self.items + self.items = {} -- the old switcheroo + for _, item in ipairs(items) do + coroutine.yield(item) + end + end + self.cv:wait() + end + end) +end + + +return Queue -- cgit v1.2.3