---@class Queue Queue = class() function Queue:ctor() self.first = 0 self.last = -1 self.n = 0 end function Queue:Lpush(value) local first = self.first - 1 self.first = first self[first] = value self.n = self.n + 1 end function Queue:Contains(func) local exist = false for i = self.first, self.last do if func(self[i]) then exist = true break end end return exist end function Queue:Enqueue(value) self:Lpush(value) end function Queue:Dequeue() return self:Rpop() end function Queue:Rpush(value) local last = self.last + 1 self.last = last self[last] = value self.n = self.n + 1 end function Queue:Lpop() local first = self.first if first > self.last then error("Left Queue Empty!") return nil, false end local value = self[first] self[first] = nil self.first = first + 1 self.n = self.n - 1 return value end function Queue:LPeek(offset) local first = self.first if first + offset > self.last then error("Can not LPeek!") return nil, false end local value = self[first + offset] return value end function Queue:Rpop() local last = self.last if self.first > last then error("Right Queue Empty!") return nil, false end local value = self[last] self[last] = nil self.last = last - 1 self.n = self.n - 1 return value end function Queue:RPeek(offset) local last = self.last if self.first > last - offset then error("Can not RPeek!") return nil, false end local value = self[last - offset] return value end function Queue:Size() return self.n end function Queue:Clean() table.clean(self) self.first = 0 self.last = -1 self.n = 0 end function Queue:Dump() local str = 'Q:' if self.n >0 then for i = self.first, self.last do str = str..' '..tostring(self[i]) end end return str end
LuaQueue
最新推荐文章于 2023-03-30 23:38:35 发布