diff options
author | Matthew Wild <mwild1@gmail.com> | 2015-10-18 21:42:33 +0100 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2015-10-18 21:42:33 +0100 |
commit | cd8af079c3b729283f8dba28a17320c58fd15110 (patch) | |
tree | 4e8eaa45960f5e0d3c35aa1ee9af7714f24db6a4 | |
parent | 0b394fbeb9d90e72637a085e5bf02ecfa68f44e3 (diff) | |
download | prosody-cd8af079c3b729283f8dba28a17320c58fd15110.tar.gz prosody-cd8af079c3b729283f8dba28a17320c58fd15110.zip |
util.queue: Add :items() iterator
-rw-r--r-- | util/queue.lua | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/util/queue.lua b/util/queue.lua index 203da0e3..ac782e84 100644 --- a/util/queue.lua +++ b/util/queue.lua @@ -18,6 +18,7 @@ local function new(size, allow_wrapping) local t = have_utable and utable.create(size, 0) or {}; -- Table to hold items return { + _items = t; size = size; count = function (self) return items; end; push = function (self, item) @@ -50,6 +51,18 @@ local function new(size, allow_wrapping) end return t[tail]; end; + items = function (self) + return function (t, pos) + if pos >= t:count() then + return nil; + end + local read_pos = tail + pos; + if read_pos > t.size then + read_pos = (read_pos%size); + end + return pos+1, t._items[read_pos]; + end, self, 0; + end; }; end |