mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-30 01:44:37 +00:00
35 lines
594 B
Nim
35 lines
594 B
Nim
|
|
discard """
|
|
output: '''
|
|
test1 OK
|
|
'''
|
|
"""
|
|
|
|
import smart_ptr
|
|
|
|
type
|
|
Node[T] = object
|
|
value: T
|
|
next: SharedPtr[Node[T]]
|
|
|
|
ForwardList[T] = object
|
|
first: SharedPtr[Node[T]]
|
|
len: Natural
|
|
|
|
proc pushFront*[T] (list: var ForwardList[T], val: sink T) =
|
|
var newNode = newSharedPtr(Node[T](value: val))
|
|
var result = false
|
|
while not result:
|
|
var head = list.first
|
|
newNode.get.next = head
|
|
result = list.first.cas(head, newNode)
|
|
list.len.atomicInc()
|
|
|
|
proc test1() =
|
|
var list: ForwardList[int]
|
|
list.pushFront(1)
|
|
doAssert list.len == 1
|
|
echo "test1 OK"
|
|
|
|
test1()
|