add a struct_group for move_do() irreversible changes
This commit is contained in:
@@ -95,10 +95,14 @@ pos_t *pos_clear(pos_t *pos)
|
|||||||
# endif
|
# endif
|
||||||
pos->node_count = 0;
|
pos->node_count = 0;
|
||||||
pos->turn = WHITE;
|
pos->turn = WHITE;
|
||||||
pos->clock_50 = 0;
|
|
||||||
pos->plycount = 0;
|
|
||||||
pos->en_passant = SQUARE_NONE;
|
pos->en_passant = SQUARE_NONE;
|
||||||
pos->castle = 0;
|
pos->castle = 0;
|
||||||
|
pos->clock_50 = 0;
|
||||||
|
pos->plycount = 0;
|
||||||
|
|
||||||
|
for (square_t sq = A1; sq <= H8; ++sq)
|
||||||
|
pos->board[sq] = EMPTY;
|
||||||
|
|
||||||
for (color_t color = WHITE; color <= BLACK; ++color) {
|
for (color_t color = WHITE; color <= BLACK; ++color) {
|
||||||
for (piece_type_t piece = 0; piece <= KING; ++piece)
|
for (piece_type_t piece = 0; piece <= KING; ++piece)
|
||||||
@@ -107,12 +111,12 @@ pos_t *pos_clear(pos_t *pos)
|
|||||||
pos->king[color] = SQUARE_NONE;
|
pos->king[color] = SQUARE_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (square_t sq = A1; sq <= H8; ++sq)
|
|
||||||
pos->board[sq] = EMPTY;
|
|
||||||
pos->moves.curmove = 0;
|
|
||||||
pos->moves.nmoves = 0;
|
|
||||||
pos->checkers = 0;
|
pos->checkers = 0;
|
||||||
pos->pinners = 0;
|
pos->pinners = 0;
|
||||||
|
pos->blockers = 0;
|
||||||
|
|
||||||
|
//pos->moves.curmove = 0;
|
||||||
|
pos->moves.nmoves = 0;
|
||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
#include "brlib.h"
|
#include "brlib.h"
|
||||||
#include "bitops.h"
|
#include "bitops.h"
|
||||||
|
#include "struct-group.h"
|
||||||
|
|
||||||
#include "chessdefs.h"
|
#include "chessdefs.h"
|
||||||
#include "bitboard.h"
|
#include "bitboard.h"
|
||||||
@@ -28,19 +29,28 @@
|
|||||||
typedef struct __pos_s {
|
typedef struct __pos_s {
|
||||||
u64 node_count; /* evaluated nodes */
|
u64 node_count; /* evaluated nodes */
|
||||||
int turn; /* WHITE or BLACK */
|
int turn; /* WHITE or BLACK */
|
||||||
u16 clock_50;
|
|
||||||
u16 plycount; /* plies so far, start is 0 */
|
|
||||||
|
|
||||||
square_t king[2]; /* dup with bb, faster retrieval */
|
/* data which cannot be recovered by move_undo
|
||||||
square_t en_passant;
|
* following data can be accessed either directly, either via "movesave"
|
||||||
castle_rights_t castle;
|
* structure name.
|
||||||
|
* For example, pos->en_passant and pos->movesave.en_passant are the same.
|
||||||
|
* This allows a memcpy on this data (to save/restore position state).
|
||||||
|
*/
|
||||||
|
struct_group_tagged(movesave, movesave,
|
||||||
|
square_t en_passant;
|
||||||
|
castle_rights_t castle;
|
||||||
|
u16 clock_50;
|
||||||
|
u16 plycount; /* plies so far, start is 0 */
|
||||||
|
);
|
||||||
|
|
||||||
|
piece_t board[BOARDSIZE];
|
||||||
|
|
||||||
bitboard_t bb[2][PIECE_TYPE_MAX]; /* bb[0][PAWN], bb[1][ALL_PIECES] */
|
bitboard_t bb[2][PIECE_TYPE_MAX]; /* bb[0][PAWN], bb[1][ALL_PIECES] */
|
||||||
bitboard_t controlled[2]; /* unsure */
|
bitboard_t controlled[2]; /* unsure */
|
||||||
|
square_t king[2]; /* dup with bb, faster retrieval */
|
||||||
bitboard_t checkers; /* opponent checkers */
|
bitboard_t checkers; /* opponent checkers */
|
||||||
bitboard_t pinners; /* opponent pinners */
|
bitboard_t pinners; /* opponent pinners */
|
||||||
bitboard_t blockers; /* pieces blocking pin */
|
bitboard_t blockers; /* pieces blocking pin */
|
||||||
piece_t board[BOARDSIZE];
|
|
||||||
movelist_t moves;
|
movelist_t moves;
|
||||||
} pos_t;
|
} pos_t;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user