mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-09 14:32:53 +00:00
added missing file for --gc:stack
This commit is contained in:
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
|
||||
Reference in New Issue
Block a user