Implemented missing functions for the interpreter
This commit is contained in:
parent
f6bd9fa1a8
commit
ba8933937e
6 changed files with 90 additions and 2 deletions
|
@ -213,3 +213,6 @@ func Step*(f: Field, v: tuple[x, y: int], d: tuple[x, y: int]): (int, int) =
|
|||
if not f.IsIn(x2, y2):
|
||||
return (x, y)
|
||||
x = x2; y = y2
|
||||
|
||||
func GetSize*(f: Field): (int, int, int, int) =
|
||||
return (f.x, f.y, f.lx, f.ly)
|
||||
|
|
|
@ -80,3 +80,19 @@ func Discard*(s: var Stack, n: int) =
|
|||
|
||||
func Next*(s: Stack): ref Stack =
|
||||
return s.next
|
||||
|
||||
func GetHeights*(s: Stack): seq[int] =
|
||||
if s.next != nil:
|
||||
result = s.next[].GetHeights()
|
||||
result.add(s.height)
|
||||
else:
|
||||
return @[s.height]
|
||||
|
||||
func YCommandPick*(s: var Stack, n, h: int) =
|
||||
if n > s.height:
|
||||
s.height = 1
|
||||
s.data[0] = 0
|
||||
else:
|
||||
let v = s.data[s.height-n]
|
||||
s.height = h
|
||||
s.Push(v)
|
||||
|
|
|
@ -52,8 +52,7 @@ func End*(ss: var StackStack, v: var tuple[x, y: int]): bool =
|
|||
let toss = ss.head
|
||||
let soss = toss[].Next()
|
||||
let n = toss[].Pop()
|
||||
v.y = soss[].Pop()
|
||||
v.x = soss[].Pop()
|
||||
(v.x, v.y) = soss[].PopVector()
|
||||
if n > 0:
|
||||
soss[].Transfert(toss[], n)
|
||||
else:
|
||||
|
@ -61,3 +60,22 @@ func End*(ss: var StackStack, v: var tuple[x, y: int]): bool =
|
|||
dec ss.height
|
||||
ss.head = soss
|
||||
return false
|
||||
|
||||
func Under*(ss: var StackStack): bool =
|
||||
if ss.height == 1:
|
||||
return true
|
||||
let soss = ss.head[].Next()
|
||||
let n = ss.Pop()
|
||||
if n > 0:
|
||||
for i in 0..<n:
|
||||
ss.Push(soss[].Pop())
|
||||
else:
|
||||
for i in 0 ..< -n:
|
||||
soss[].Push(ss.Pop())
|
||||
return false
|
||||
|
||||
func GetHeights*(ss: StackStack): (int, seq[int]) =
|
||||
return (ss.height, ss.head[].GetHeights)
|
||||
|
||||
func YCommandPick*(ss: var StackStack, n, h: int) =
|
||||
ss.head[].YCommandPick(n, h)
|
||||
|
|
Reference in a new issue