add nodes_count and moves_{generated,counted} in pos struct

This commit is contained in:
2023-07-11 22:22:33 +02:00
parent 88d2d4061f
commit ed9b9cc646
2 changed files with 21 additions and 3 deletions

View File

@@ -22,6 +22,7 @@
#include "move.h" #include "move.h"
#include "fen.h" #include "fen.h"
#include "piece.h" #include "piece.h"
#include "eval.h"
static pool_t *pos_pool; static pool_t *pos_pool;
@@ -199,6 +200,7 @@ pos_t *pos_clear(pos_t *pos)
} }
SET_WHITE(pos->turn); SET_WHITE(pos->turn);
pos->node_count = 0;
pos->castle = 0; pos->castle = 0;
pos->clock_50 = 0; pos->clock_50 = 0;
pos->curmove = 0; pos->curmove = 0;
@@ -213,6 +215,8 @@ pos_t *pos_clear(pos_t *pos)
pos->controlled[BLACK] = 0; pos->controlled[BLACK] = 0;
pos->mobility[WHITE] = 0; pos->mobility[WHITE] = 0;
pos->mobility[BLACK] = 0; pos->mobility[BLACK] = 0;
pos->moves_generated = false;
pos->moves_counted = false;
/* remove pieces / moves */ /* remove pieces / moves */
pieces_del(pos, WHITE); pieces_del(pos, WHITE);
pieces_del(pos, BLACK); pieces_del(pos, BLACK);
@@ -260,8 +264,13 @@ pos_t *pos_get()
* pos_dup() - duplicate a position. * pos_dup() - duplicate a position.
* @pos: &position to duplicate. * @pos: &position to duplicate.
* *
* New position is the same as source one, with duplicated pieces list * New position is the same as source one (with duplicated pieces list),
* and empty moves list and NULL bestmove. * except:
* - moves list is empty
* - bestmove is NULL
* - nodecount is set to zero
* - eval is set to EVAL_INVALID
* - moves_generated ans moves_counted are unset
* *
* @return: The new position. * @return: The new position.
* *
@@ -280,7 +289,6 @@ pos_t *pos_dup(pos_t *pos)
for (int color = 0; color < 2; ++color) { for (int color = 0; color < 2; ++color) {
INIT_LIST_HEAD(&new->pieces[color]); INIT_LIST_HEAD(&new->pieces[color]);
INIT_LIST_HEAD(&new->moves[color]); INIT_LIST_HEAD(&new->moves[color]);
new->bestmove = NULL;
/* duplicate piece list */ /* duplicate piece list */
piece_list = &pos->pieces[color]; /* white/black piece list */ piece_list = &pos->pieces[color]; /* white/black piece list */
@@ -290,6 +298,11 @@ pos_t *pos_dup(pos_t *pos)
piece_add(new, oldpiece->piece, oldpiece->square); piece_add(new, oldpiece->piece, oldpiece->square);
} }
} }
new->bestmove = NULL;
new->node_count = 0;
new->eval = EVAL_INVALID;
pos->moves_generated = false;
pos->moves_counted = false;
} }
return new; return new;
} }

View File

@@ -23,12 +23,17 @@
#include "chessdefs.h" #include "chessdefs.h"
typedef struct pos_s { typedef struct pos_s {
u64 node_count; /* evaluated nodes */
piece_t turn; /* we use only color bit */ piece_t turn; /* we use only color bit */
castle_t castle; castle_t castle;
u16 clock_50; u16 clock_50;
u16 curmove; u16 curmove;
eval_t eval; eval_t eval;
int eval_simple_phase;
eval_t eval_simple;
move_t *bestmove; move_t *bestmove;
bool moves_generated;
bool moves_counted;
board_t board[BOARDSIZE]; board_t board[BOARDSIZE];
square_t en_passant; square_t en_passant;