mirror of
https://github.com/badvision/lawless-legends.git
synced 2025-08-15 06:27:24 +00:00
More generic linked list support.
This commit is contained in:
@@ -1686,19 +1686,29 @@ def countList(p)
|
|||||||
return n
|
return n
|
||||||
end
|
end
|
||||||
|
|
||||||
def unlinkPlayer(toRemove)
|
def randomFromList(p)
|
||||||
|
word n
|
||||||
|
n = rand16() % countList(p)
|
||||||
|
while n > 0
|
||||||
|
p = p=>nextObj
|
||||||
|
n = n-1
|
||||||
|
loop
|
||||||
|
return p
|
||||||
|
end
|
||||||
|
|
||||||
|
def unlinkFromList(pList, toRemove)
|
||||||
word p
|
word p
|
||||||
word prev
|
word prev
|
||||||
word n, n2
|
word n, n2
|
||||||
|
|
||||||
// Count number of players before
|
// Count number of players before
|
||||||
n = countList(global=>players)
|
n = countList(*pList)
|
||||||
|
|
||||||
// Now unlink
|
// Now unlink
|
||||||
prev = NULL
|
prev = NULL
|
||||||
p = global=>players
|
p = *pList
|
||||||
if p == toRemove
|
if p == toRemove
|
||||||
global=>players = p=>nextObj
|
*pList = p=>nextObj
|
||||||
else
|
else
|
||||||
while p
|
while p
|
||||||
if p == toRemove
|
if p == toRemove
|
||||||
@@ -1717,7 +1727,7 @@ def unlinkPlayer(toRemove)
|
|||||||
p=>nextObj = NULL
|
p=>nextObj = NULL
|
||||||
|
|
||||||
// Check count after
|
// Check count after
|
||||||
n2 = countList(global=>players)
|
n2 = countList(*pList)
|
||||||
if n-1 <> n2
|
if n-1 <> n2
|
||||||
printf2("Info: n before=%d after=%d\n", n, n2)
|
printf2("Info: n before=%d after=%d\n", n, n2)
|
||||||
fatal("Unlink didn't work")
|
fatal("Unlink didn't work")
|
||||||
@@ -1746,10 +1756,9 @@ def testHeap()
|
|||||||
collect()
|
collect()
|
||||||
addPlayer()
|
addPlayer()
|
||||||
collect()
|
collect()
|
||||||
p = global=>players
|
p = randomFromList(global=>players)
|
||||||
p = p=>nextObj
|
|
||||||
printf1("Unlinking player $%x\n", p)
|
printf1("Unlinking player $%x\n", p)
|
||||||
unlinkPlayer(p)
|
unlinkFromList(global + players, p)
|
||||||
puts("Freeing player\n")
|
puts("Freeing player\n")
|
||||||
freeObj(p)
|
freeObj(p)
|
||||||
puts("Collecting.\n")
|
puts("Collecting.\n")
|
||||||
|
Reference in New Issue
Block a user