From 3d04516b5867864ecd9796b75e70155e392ae199 Mon Sep 17 00:00:00 2001
From: Matthew Wild <mwild1@gmail.com>
Date: Sun, 18 Oct 2015 21:42:33 +0100
Subject: util.queue: Add :items() iterator

---
 util/queue.lua | 13 +++++++++++++
 1 file changed, 13 insertions(+)

(limited to 'util')

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
 
-- 
cgit v1.2.3