From 3299f09e1fae4c300a0e29050810be80b94f1ac0 Mon Sep 17 00:00:00 2001 From: nocturn9x Date: Tue, 16 Apr 2024 16:29:21 +0200 Subject: [PATCH] Add MoveList implementation --- src/Chess/moves.nim | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/Chess/moves.nim b/src/Chess/moves.nim index bca16d4..3c7c3ed 100644 --- a/src/Chess/moves.nim +++ b/src/Chess/moves.nim @@ -24,6 +24,39 @@ type targetSquare*: Square flags*: uint16 + MoveList* = object + ## A list of moves + data: array[218, Move] + len: int8 + + +iterator items*(self: MoveList): Move = + var i = 0 + while self.len > i: + yield self.data[i] + inc(i) + + +iterator pairs*(self: MoveList): tuple[i: int, move: Move] = + var i = 0 + for item in self: + yield (i, item) + + +func add*(self: var MoveList, move: Move) {.inline.} = + self.data[self.len] = move + inc(self.len) + + +func contains*(self: MoveList, move: Move): bool {.inline.} = + for item in self: + if move == item: + return true + return false + + +func len*(self: MoveList): int {.inline.} = self.len + func createMove*(startSquare, targetSquare: string, flags: seq[MoveFlag] = @[]): Move = result = Move(startSquare: startSquare.algebraicToSquare(),