aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Wild <mwild1@gmail.com>2015-10-18 21:42:33 +0100
committerMatthew Wild <mwild1@gmail.com>2015-10-18 21:42:33 +0100
commitcd8af079c3b729283f8dba28a17320c58fd15110 (patch)
tree4e8eaa45960f5e0d3c35aa1ee9af7714f24db6a4
parent0b394fbeb9d90e72637a085e5bf02ecfa68f44e3 (diff)
downloadprosody-cd8af079c3b729283f8dba28a17320c58fd15110.tar.gz
prosody-cd8af079c3b729283f8dba28a17320c58fd15110.zip
util.queue: Add :items() iterator
-rw-r--r--util/queue.lua13
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