util.timer: Expire timer instance if another instance is already set to take care...
[prosody.git] / util / queue.lua
index 203da0e3f6ee590a7dc3ec3631a7a90b5de0fbb9..728e905f001875191ad71a347ee0ad9714fe14b4 100644 (file)
@@ -16,8 +16,9 @@ local function new(size, allow_wrapping)
        local head, tail = 1, 1;
        local items = 0; -- Number of stored items
        local t = have_utable and utable.create(size, 0) or {}; -- Table to hold items
-
+       --luacheck: ignore 212/self
        return {
+               _items = t;
                size = size;
                count = function (self) return items; end;
                push = function (self, item)
@@ -50,6 +51,19 @@ local function new(size, allow_wrapping)
                        end
                        return t[tail];
                end;
+               items = function (self)
+                       --luacheck: ignore 431/t
+                       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