1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-04-30 08:43:09 +00:00

Clean up position setup code

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Joona Kiiski 2011-01-06 13:34:16 +02:00 committed by Marco Costalba
parent 1a20d72701
commit b08ba446f6
3 changed files with 21 additions and 33 deletions

View file

@ -205,6 +205,7 @@ void Position::from_fen(const string& fen, bool c960) {
*/
char token;
int hmc, fmn;
std::istringstream ss(fen);
Rank rank = RANK_8;
File file = FILE_A;
@ -265,12 +266,10 @@ void Position::from_fen(const string& fen, bool c960) {
}
// 5. Halfmove clock
int hmc;
if (ss >> hmc)
st->rule50 = hmc;
// 6. Fullmove number
int fmn;
if (ss >> fmn)
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
/// to a StateInfo object. The move is assumed to be legal.
/// 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,
/// updating the board array, pieces list, bitboards, and piece counts.

View file

@ -221,6 +221,7 @@ public:
// Doing and undoing moves
void detach();
void do_setup_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 undo_move(Move m);
@ -250,9 +251,7 @@ public:
// Check if side to move could be mated in one
bool has_mate_threat();
// Number of plies since the last non-reversible move
int rule_50_counter() const;
// Number of plies from starting position
int startpos_ply_counter() const;
// Other properties of the position
@ -263,9 +262,6 @@ public:
// Current thread ID searching on the position
int thread() const;
// Reset the gamePly variable to 0
void reset_game_ply();
void inc_startpos_ply_counter();
int64_t nodes_searched() const;
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));
}
inline int Position::rule_50_counter() const {
return st->rule50;
}
inline int Position::startpos_ply_counter() const {
return startPosPlyCounter;
}

View file

@ -171,11 +171,7 @@ namespace {
while (up >> token)
{
move = move_from_uci(pos, token);
pos.do_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
pos.do_setup_move(move, st);
}
// Our StateInfo st is about going out of scope so copy
// its content inside pos before it disappears.