code cleanup for mark&sweep GC
This commit is contained in:
parent
ab6f793408
commit
4ee9816a78
7 changed files with 43 additions and 88 deletions
|
|
@ -68,38 +68,6 @@ proc deinit(s: var TCellSeq) =
|
|||
s.len = 0
|
||||
s.cap = 0
|
||||
|
||||
# ------------------- cyclic cell temporary data structure --------------------
|
||||
|
||||
type
|
||||
TCycleCell = object
|
||||
cell: PCell
|
||||
oldRefcount, newRefcount: TRefCount
|
||||
PCycleCellArray = ptr array[0..100_000_000, TCycleCell]
|
||||
TCycleCellSeq {.final, pure.} = object
|
||||
len, cap: int
|
||||
d: PCycleCellArray
|
||||
|
||||
proc reserveSlot(s: var TCycleCellSeq): int =
|
||||
if s.len >= s.cap:
|
||||
s.cap = s.cap * 3 div 2
|
||||
var d = cast[PCycleCellArray](Alloc(s.cap * sizeof(TCycleCell)))
|
||||
copyMem(d, s.d, s.len * sizeof(TCycleCell))
|
||||
Dealloc(s.d)
|
||||
s.d = d
|
||||
result = s.len
|
||||
inc(s.len)
|
||||
|
||||
proc init(s: var TCycleCellSeq, cap: int = 1024) =
|
||||
s.len = 0
|
||||
s.cap = cap
|
||||
s.d = cast[PCycleCellArray](Alloc(cap * sizeof(TCycleCell)))
|
||||
|
||||
proc deinit(s: var TCycleCellSeq) =
|
||||
Dealloc(s.d)
|
||||
s.d = nil
|
||||
s.len = 0
|
||||
s.cap = 0
|
||||
|
||||
# ------------------- cell set handling ---------------------------------------
|
||||
|
||||
const
|
||||
|
|
@ -230,7 +198,7 @@ iterator elements(t: TCellSet): PCell {.inline.} =
|
|||
inc(i)
|
||||
r = r.next
|
||||
|
||||
iterator elementsWithout(t, s: TCellSet): PCell {.inline.} =
|
||||
iterator elementsExcept(t, s: TCellSet): PCell {.inline.} =
|
||||
var r = t.head
|
||||
while r != nil:
|
||||
let ss = CellSetGet(s, r.key)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue