Skip to content

Commit

Permalink
Use linkedlists for queue (#1767)
Browse files Browse the repository at this point in the history
* Use linked list for queue

* Allow linked list node popping

* Fix lint

* Fix lint

* Fix FIFO approach

* Update DoubleLinkedList.luau
ccuser44 authored Jan 29, 2025

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
1 parent 606221b commit 16ba946
Showing 2 changed files with 139 additions and 126 deletions.
28 changes: 17 additions & 11 deletions MainModule/Server/Shared/DoubleLinkedList.luau
Original file line number Diff line number Diff line change
@@ -28,7 +28,7 @@ function LinkNode:setprev(p)
end

function LinkNode:Destroy()
for i,_ in self do
for i, _ in self do
self[i] = nil
end
setmetatable(self, nil)
@@ -58,34 +58,37 @@ function LinkedList:AddStart(data)
local old = self.snode
local newNode = LinkNode.new(data)
newNode:setprev(nil)

if not old then
self.enode = newNode
else
old:setprev(newNode)
end

newNode:setnext(old)
self.snode = newNode

self.count += 1
end

function LinkedList:AddEnd(data)
local old = self.enode
local newNode = LinkNode.new(data)
newNode:setnext(nil)

if not old then
self.snode = newNode
else
old:setNext(newNode)
old:setnext(newNode)
end

newNode:setprev(old)
self.enode = newNode

self.count += 1
end

function LinkedList:AddToStartAndRemoveEndIfEnd(data, limit)
self:AddStart(data)

if self.count > limit and self.enode then
self:RemoveNode(self.enode)
end
@@ -97,23 +100,22 @@ function LinkedList:AddBetweenNodes(data, left, right)
end

local newNode = LinkNode.new(data)

newNode:setnext()
newNode:setprev()

left:setnext(newNode)
right:setprev(newNode)

self.count += 1
end

function LinkedList:RemoveNode(node)
local data = node.data
local prev = node.prev
local nextN = node.next

if self.snode == node then
self.snode = nextN
end

if self.enode == node then
self.enode = prev
end
@@ -127,10 +129,10 @@ function LinkedList:RemoveNode(node)

node:setnext(nil)
node:setprev(nil)

node:Destroy()

self.count -= 1

return data
end

function LinkedList:Get(val: any)
@@ -162,8 +164,10 @@ function LinkedList:Get(val: any)
else
table.insert(nodes, curr)
end

curr = curr.next
end

return nodes
end

@@ -197,14 +201,16 @@ function LinkedList:GetAsTable(val: any)
else
table.insert(nodes, curr.data)
end

curr = curr.next
end

return nodes
end

function LinkedList:Destroy()
for i, _ in self do
self[i] = nil
for k, _ in self do
self[k] = nil
end
setmetatable(self, nil)
end
Loading

0 comments on commit 16ba946

Please sign in to comment.