123456789101112131415161718192021222324252627282930313233343536 |
- # 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)
|