1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
# listdeques
# needed, type bound ops aren't considered for undeclared procs
type Placeholder = object
proc allocate(_: Placeholder) = discard
proc delete(_: Placeholder) = discard
type
StealableTask* = concept task, var mutTask, type T
task is ptr
task.prev is T
task.next is T
task.parent is T
task.fn is proc (param: pointer) {.nimcall.}
allocate(mutTask)
delete(task)
ListDeque*[T: StealableTask] = object
head, tail: T
func isEmpty*(dq: ListDeque): bool {.inline.} =
discard
func popFirst*[T](dq: var ListDeque[T]): T =
discard
proc `=destroy`*[T: StealableTask](dq: var ListDeque[T]) =
mixin delete
if dq.isEmpty():
return
while (let task = dq.popFirst(); not task.isNil):
delete(task)
delete(dq.head)
|