Модуль очереди для обмена между потоками

Опубликовано в QLua

Модуль FIFO очереди для обмена данными между потоком терминала (колбеками) и потоком скрипта QLua.

 

-- Модуль работы с очередями колбеков
local queue =
{
-- Создать новую очередь FIFO
new = function(self)
            self.__index = self
return setmetatable( { first = 0,
last = -1
},
self)
end, --------------------------------------------------------------------------------------------
-- Поместить значение в очередь
push = function(self,value)
local last = self.last + 1
self[last] = value
self.last = last
end, ---------------------------------------------------------------------------------------------
-- Изъять самое старое значение из очереди. Если очередь пуста, возвращается nil
pop = function(self)
local first = self.first
if first <= self.last then
local value = self[first]
self[first] = nil
self.first = first + 1
return value
end
end, ---------------------------------------------------------------------------------------------
-- Количество значений в очереди
size = function(self)
return self.last - self.first + 1
end ---------------------------------------------------------------------------------------------
}

Архив QLua