added missing file for --gc:stack
This commit is contained in:
parent
f91caa7f25
commit
a61d5e466b
1 changed files with 44 additions and 0 deletions
44
lib/pure/collections/chains.nim
Normal file
44
lib/pure/collections/chains.nim
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
#
|
||||
#
|
||||
# Nim's Runtime Library
|
||||
# (c) Copyright 2016 Andreas Rumpf
|
||||
#
|
||||
# See the file "copying.txt", included in this
|
||||
# distribution, for details about the copyright.
|
||||
#
|
||||
|
||||
## Template based implementation of singly and doubly linked lists.
|
||||
## The involved types should have 'prev' or 'next' fields and the
|
||||
## list header should have 'head' or 'tail' fields.
|
||||
|
||||
template prepend*(header, node) =
|
||||
when compiles(header.head):
|
||||
when compiles(node.prev):
|
||||
if header.head != nil:
|
||||
header.head.prev = node
|
||||
node.next = header.head
|
||||
header.head = node
|
||||
when compiles(header.tail):
|
||||
if header.tail == nil:
|
||||
header.tail = node
|
||||
|
||||
template append*(header, node) =
|
||||
when compiles(header.head):
|
||||
if header.head == nil:
|
||||
header.head = node
|
||||
when compiles(header.tail):
|
||||
when compiles(node.prev):
|
||||
node.prev = header.tail
|
||||
if header.tail != nil:
|
||||
header.tail.next = node
|
||||
header.tail = node
|
||||
|
||||
template unlink*(header, node) =
|
||||
if node.next != nil:
|
||||
node.next.prev = node.prev
|
||||
if node.prev != nil:
|
||||
node.prev.next = node.next
|
||||
if header.head == node:
|
||||
header.head = node.prev
|
||||
if header.tail == node:
|
||||
header.tail = node.next
|
||||
Loading…
Add table
Add a link
Reference in a new issue