From ed420ebe2d898289b0169b6c25f510485feb3212 Mon Sep 17 00:00:00 2001
From: Matthew Wild <mwild1@gmail.com>
Date: Wed, 3 Jun 2015 15:51:07 +0100
Subject: util.queue: Allow optional wrap-around when pushing, overwriting
 oldest unread item

---
 util/queue.lua | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

(limited to 'util')

diff --git a/util/queue.lua b/util/queue.lua
index afdcaf45..203da0e3 100644
--- a/util/queue.lua
+++ b/util/queue.lua
@@ -11,7 +11,7 @@
 
 local have_utable, utable = pcall(require, "util.table"); -- For pre-allocation of table
 
-local function new(size)
+local function new(size, allow_wrapping)
 	-- Head is next insert, tail is next read
 	local head, tail = 1, 1;
 	local items = 0; -- Number of stored items
@@ -22,7 +22,12 @@ local function new(size)
 		count = function (self) return items; end;
 		push = function (self, item)
 			if items >= size then
-				return nil, "queue full";
+				if allow_wrapping then
+					tail = (tail%size)+1; -- Advance to next oldest item
+					items = items - 1;
+				else
+					return nil, "queue full";
+				end
 			end
 			t[head] = item;
 			items = items + 1;
-- 
cgit v1.2.3