mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 00:33:09 +00:00
Clean up position setup code
No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
1a20d72701
commit
b08ba446f6
3 changed files with 21 additions and 33 deletions
|
@ -205,6 +205,7 @@ void Position::from_fen(const string& fen, bool c960) {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
char token;
|
char token;
|
||||||
|
int hmc, fmn;
|
||||||
std::istringstream ss(fen);
|
std::istringstream ss(fen);
|
||||||
Rank rank = RANK_8;
|
Rank rank = RANK_8;
|
||||||
File file = FILE_A;
|
File file = FILE_A;
|
||||||
|
@ -265,12 +266,10 @@ void Position::from_fen(const string& fen, bool c960) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 5. Halfmove clock
|
// 5. Halfmove clock
|
||||||
int hmc;
|
|
||||||
if (ss >> hmc)
|
if (ss >> hmc)
|
||||||
st->rule50 = hmc;
|
st->rule50 = hmc;
|
||||||
|
|
||||||
// 6. Fullmove number
|
// 6. Fullmove number
|
||||||
int fmn;
|
|
||||||
if (ss >> fmn)
|
if (ss >> fmn)
|
||||||
startPosPlyCounter = (fmn - 1) * 2 + int(sideToMove == BLACK);
|
startPosPlyCounter = (fmn - 1) * 2 + int(sideToMove == BLACK);
|
||||||
|
|
||||||
|
@ -774,6 +773,23 @@ bool Position::move_is_check(Move m, const CheckInfo& ci) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// Position::do_setup_move() makes a permanent move on the board.
|
||||||
|
/// It should be used when setting up a position on board.
|
||||||
|
/// You can't undo the move.
|
||||||
|
|
||||||
|
void Position::do_setup_move(Move m, StateInfo& newSt) {
|
||||||
|
|
||||||
|
do_move(m, newSt);
|
||||||
|
|
||||||
|
// Reset "game ply" in case we made a non-reversible move.
|
||||||
|
// "game ply" is used for repetition detection.
|
||||||
|
if (st->rule50 == 0)
|
||||||
|
st->gamePly = 0;
|
||||||
|
|
||||||
|
// Update the number of plies played from the starting position
|
||||||
|
startPosPlyCounter++;
|
||||||
|
}
|
||||||
|
|
||||||
/// Position::do_move() makes a move, and saves all information necessary
|
/// Position::do_move() makes a move, and saves all information necessary
|
||||||
/// to a StateInfo object. The move is assumed to be legal.
|
/// to a StateInfo object. The move is assumed to be legal.
|
||||||
/// Pseudo-legal moves should be filtered out before this function is called.
|
/// Pseudo-legal moves should be filtered out before this function is called.
|
||||||
|
@ -1541,22 +1557,6 @@ void Position::clear() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// Position::reset_game_ply() simply sets gamePly to 0. It is used from the
|
|
||||||
/// UCI interface code, whenever a non-reversible move is made in a
|
|
||||||
/// 'position fen <fen> moves m1 m2 ...' command. This makes it possible
|
|
||||||
/// for the program to handle games of arbitrary length, as long as the GUI
|
|
||||||
/// handles draws by the 50 move rule correctly.
|
|
||||||
|
|
||||||
void Position::reset_game_ply() {
|
|
||||||
|
|
||||||
st->gamePly = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Position::inc_startpos_ply_counter() {
|
|
||||||
|
|
||||||
startPosPlyCounter++;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Position::put_piece() puts a piece on the given square of the board,
|
/// Position::put_piece() puts a piece on the given square of the board,
|
||||||
/// updating the board array, pieces list, bitboards, and piece counts.
|
/// updating the board array, pieces list, bitboards, and piece counts.
|
||||||
|
|
||||||
|
|
|
@ -221,6 +221,7 @@ public:
|
||||||
|
|
||||||
// Doing and undoing moves
|
// Doing and undoing moves
|
||||||
void detach();
|
void detach();
|
||||||
|
void do_setup_move(Move m, StateInfo& St);
|
||||||
void do_move(Move m, StateInfo& st);
|
void do_move(Move m, StateInfo& st);
|
||||||
void do_move(Move m, StateInfo& st, const CheckInfo& ci, bool moveIsCheck);
|
void do_move(Move m, StateInfo& st, const CheckInfo& ci, bool moveIsCheck);
|
||||||
void undo_move(Move m);
|
void undo_move(Move m);
|
||||||
|
@ -250,9 +251,7 @@ public:
|
||||||
// Check if side to move could be mated in one
|
// Check if side to move could be mated in one
|
||||||
bool has_mate_threat();
|
bool has_mate_threat();
|
||||||
|
|
||||||
// Number of plies since the last non-reversible move
|
// Number of plies from starting position
|
||||||
int rule_50_counter() const;
|
|
||||||
|
|
||||||
int startpos_ply_counter() const;
|
int startpos_ply_counter() const;
|
||||||
|
|
||||||
// Other properties of the position
|
// Other properties of the position
|
||||||
|
@ -263,9 +262,6 @@ public:
|
||||||
// Current thread ID searching on the position
|
// Current thread ID searching on the position
|
||||||
int thread() const;
|
int thread() const;
|
||||||
|
|
||||||
// Reset the gamePly variable to 0
|
|
||||||
void reset_game_ply();
|
|
||||||
void inc_startpos_ply_counter();
|
|
||||||
int64_t nodes_searched() const;
|
int64_t nodes_searched() const;
|
||||||
void set_nodes_searched(int64_t n);
|
void set_nodes_searched(int64_t n);
|
||||||
|
|
||||||
|
@ -534,10 +530,6 @@ inline bool Position::move_is_passed_pawn_push(Move m) const {
|
||||||
&& pawn_is_passed(c, move_to(m));
|
&& pawn_is_passed(c, move_to(m));
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int Position::rule_50_counter() const {
|
|
||||||
return st->rule50;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline int Position::startpos_ply_counter() const {
|
inline int Position::startpos_ply_counter() const {
|
||||||
return startPosPlyCounter;
|
return startPosPlyCounter;
|
||||||
}
|
}
|
||||||
|
|
|
@ -171,11 +171,7 @@ namespace {
|
||||||
while (up >> token)
|
while (up >> token)
|
||||||
{
|
{
|
||||||
move = move_from_uci(pos, token);
|
move = move_from_uci(pos, token);
|
||||||
pos.do_move(move, st);
|
pos.do_setup_move(move, st);
|
||||||
if (pos.rule_50_counter() == 0)
|
|
||||||
pos.reset_game_ply();
|
|
||||||
|
|
||||||
pos.inc_startpos_ply_counter(); //FIXME: make from_fen to support this and rule50
|
|
||||||
}
|
}
|
||||||
// Our StateInfo st is about going out of scope so copy
|
// Our StateInfo st is about going out of scope so copy
|
||||||
// its content inside pos before it disappears.
|
// its content inside pos before it disappears.
|
||||||
|
|
Loading…
Add table
Reference in a new issue