client/lua_probject/base_project/Core/Queue.lua

89 lines
1.8 KiB
Lua
Raw Normal View History

2025-04-01 10:48:36 +08:00
Queue = {}
function Queue.new(capacity)
2025-04-15 14:59:43 +08:00
local self = {}
setmetatable(self,{__index = Queue})
2025-04-01 10:48:36 +08:00
self.capacity = capacity
self.queue = {}
self.size_ = 0
self.head = -1
self.rear = -1
return self
end
function Queue:Enqueue(element)
if self.size_ == 0 then
self.head = 0
self.rear = 1
self.size_ = 1
self.queue[self.rear] = element
else
local temp = (self.rear + 1) % self.capacity
2025-04-15 14:59:43 +08:00
--print("1111111111111111111====>>>>")
--print(temp)
2025-04-01 10:48:36 +08:00
if temp == self.head then
error("Error: capacity is full.")
2025-04-15 14:59:43 +08:00
ViewUtil.ErrorTip(10001,"Error: capacity is full.")
return
2025-04-01 10:48:36 +08:00
else
self.rear = temp
end
self.queue[self.rear] = element
self.size_ = self.size_ + 1
end
2025-04-15 14:59:43 +08:00
2025-04-01 10:48:36 +08:00
end
function Queue:Dequeue()
if self:IsEmpty() then
2025-04-15 14:59:43 +08:00
ViewUtil.ErrorTip(10002,"Error: The Queue is empty.")
2025-04-01 10:48:36 +08:00
error("Error: The Queue is empty.")
return
end
self.size_ = self.size_ - 1
self.head = (self.head + 1) % self.capacity
local value = self.queue[self.head]
return value
end
function Queue:Clear()
self.queue = nil
self.queue = {}
self.size_ = 0
self.head = -1
self.rear = -1
end
function Queue:IsEmpty()
if self.size_ == 0 then
return true
end
return false
end
function Queue:Count()
return self.size_
end
function Queue:dump()
local h = self.head
local r = self.rear
local str = nil
local first_flag = true
while h ~= r do
if first_flag == true then
2025-04-15 14:59:43 +08:00
str = "{"..self.queue[h]
2025-04-01 10:48:36 +08:00
h = (h + 1) % self.capacity
first_flag = false
else
2025-04-15 14:59:43 +08:00
str = str..","..self.queue[h]
2025-04-01 10:48:36 +08:00
h = (h + 1) % self.capacity
end
end
2025-04-15 14:59:43 +08:00
str = str..","..self.queue[r].."}"
if(debug_print) then
print(str)
end
end