mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-20 09:06:45 +08:00
Fix operator++ definition
ENABLE_OPERATORS_ON has incorrect definitions of post-increment and post-decrement operators. In particularly the returned value is the variable already incremented/decremented, while instead they should return the variable _before_ inc/dec. This has no real effect because are only used in loops and where the returned value is never used, neverthless it is wrong. The fix would be to copy the variable to a dummy, then inc/dec the variable, then return the dummy. So instead, rename to pre-increment that can be implemented without the dummy, actually the current implementation it is already the correct pre-increment, with the only change to return a reference (an l-value) and not a copy, so to properly mimic the pre-increment on native integers. Spotted by Kojirion. No functional change.
This commit is contained in:
@@ -120,12 +120,12 @@ void Position::init() {
|
||||
|
||||
RKISS rk;
|
||||
|
||||
for (Color c = WHITE; c <= BLACK; c++)
|
||||
for (PieceType pt = PAWN; pt <= KING; pt++)
|
||||
for (Square s = SQ_A1; s <= SQ_H8; s++)
|
||||
for (Color c = WHITE; c <= BLACK; ++c)
|
||||
for (PieceType pt = PAWN; pt <= KING; ++pt)
|
||||
for (Square s = SQ_A1; s <= SQ_H8; ++s)
|
||||
Zobrist::psq[c][pt][s] = rk.rand<Key>();
|
||||
|
||||
for (File f = FILE_A; f <= FILE_H; f++)
|
||||
for (File f = FILE_A; f <= FILE_H; ++f)
|
||||
Zobrist::enpassant[f] = rk.rand<Key>();
|
||||
|
||||
for (int cr = CASTLES_NONE; cr <= ALL_CASTLES; cr++)
|
||||
@@ -141,14 +141,14 @@ void Position::init() {
|
||||
Zobrist::side = rk.rand<Key>();
|
||||
Zobrist::exclusion = rk.rand<Key>();
|
||||
|
||||
for (PieceType pt = PAWN; pt <= KING; pt++)
|
||||
for (PieceType pt = PAWN; pt <= KING; ++pt)
|
||||
{
|
||||
PieceValue[MG][make_piece(BLACK, pt)] = PieceValue[MG][pt];
|
||||
PieceValue[EG][make_piece(BLACK, pt)] = PieceValue[EG][pt];
|
||||
|
||||
Score v = make_score(PieceValue[MG][pt], PieceValue[EG][pt]);
|
||||
|
||||
for (Square s = SQ_A1; s <= SQ_H8; s++)
|
||||
for (Square s = SQ_A1; s <= SQ_H8; ++s)
|
||||
{
|
||||
psq[WHITE][pt][ s] = (v + PSQT[pt][s]);
|
||||
psq[BLACK][pt][~s] = -(v + PSQT[pt][s]);
|
||||
@@ -233,7 +233,7 @@ void Position::set(const string& fenStr, bool isChess960, Thread* th) {
|
||||
else if ((p = PieceToChar.find(token)) != string::npos)
|
||||
{
|
||||
put_piece(sq, color_of(Piece(p)), type_of(Piece(p)));
|
||||
sq++;
|
||||
++sq;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -255,10 +255,10 @@ void Position::set(const string& fenStr, bool isChess960, Thread* th) {
|
||||
token = char(toupper(token));
|
||||
|
||||
if (token == 'K')
|
||||
for (rsq = relative_square(c, SQ_H1); type_of(piece_on(rsq)) != ROOK; rsq--) {}
|
||||
for (rsq = relative_square(c, SQ_H1); type_of(piece_on(rsq)) != ROOK; --rsq) {}
|
||||
|
||||
else if (token == 'Q')
|
||||
for (rsq = relative_square(c, SQ_A1); type_of(piece_on(rsq)) != ROOK; rsq++) {}
|
||||
for (rsq = relative_square(c, SQ_A1); type_of(piece_on(rsq)) != ROOK; ++rsq) {}
|
||||
|
||||
else if (token >= 'A' && token <= 'H')
|
||||
rsq = File(token - 'A') | relative_rank(c, RANK_1);
|
||||
@@ -317,11 +317,11 @@ void Position::set_castle_right(Color c, Square rfrom) {
|
||||
Square kto = relative_square(c, cs == KING_SIDE ? SQ_G1 : SQ_C1);
|
||||
Square rto = relative_square(c, cs == KING_SIDE ? SQ_F1 : SQ_D1);
|
||||
|
||||
for (Square s = std::min(rfrom, rto); s <= std::max(rfrom, rto); s++)
|
||||
for (Square s = std::min(rfrom, rto); s <= std::max(rfrom, rto); ++s)
|
||||
if (s != kfrom && s != rfrom)
|
||||
castlePath[c][cs] |= s;
|
||||
|
||||
for (Square s = std::min(kfrom, kto); s <= std::max(kfrom, kto); s++)
|
||||
for (Square s = std::min(kfrom, kto); s <= std::max(kfrom, kto); ++s)
|
||||
if (s != kfrom && s != rfrom)
|
||||
castlePath[c][cs] |= s;
|
||||
}
|
||||
@@ -334,9 +334,9 @@ const string Position::fen() const {
|
||||
|
||||
std::ostringstream ss;
|
||||
|
||||
for (Rank rank = RANK_8; rank >= RANK_1; rank--)
|
||||
for (Rank rank = RANK_8; rank >= RANK_1; --rank)
|
||||
{
|
||||
for (File file = FILE_A; file <= FILE_H; file++)
|
||||
for (File file = FILE_A; file <= FILE_H; ++file)
|
||||
{
|
||||
Square sq = file | rank;
|
||||
|
||||
@@ -344,7 +344,7 @@ const string Position::fen() const {
|
||||
{
|
||||
int emptyCnt = 1;
|
||||
|
||||
for ( ; file < FILE_H && is_empty(sq++); file++)
|
||||
for ( ; file < FILE_H && is_empty(++sq); ++file)
|
||||
emptyCnt++;
|
||||
|
||||
ss << emptyCnt;
|
||||
@@ -1210,9 +1210,9 @@ Key Position::compute_material_key() const {
|
||||
|
||||
Key k = 0;
|
||||
|
||||
for (Color c = WHITE; c <= BLACK; c++)
|
||||
for (PieceType pt = PAWN; pt <= QUEEN; pt++)
|
||||
for (int cnt = 0; cnt < pieceCount[c][pt]; cnt++)
|
||||
for (Color c = WHITE; c <= BLACK; ++c)
|
||||
for (PieceType pt = PAWN; pt <= QUEEN; ++pt)
|
||||
for (int cnt = 0; cnt < pieceCount[c][pt]; ++cnt)
|
||||
k ^= Zobrist::psq[c][pt][cnt];
|
||||
|
||||
return k;
|
||||
@@ -1248,7 +1248,7 @@ Value Position::compute_non_pawn_material(Color c) const {
|
||||
|
||||
Value value = VALUE_ZERO;
|
||||
|
||||
for (PieceType pt = KNIGHT; pt <= QUEEN; pt++)
|
||||
for (PieceType pt = KNIGHT; pt <= QUEEN; ++pt)
|
||||
value += pieceCount[c][pt] * PieceValue[MG][pt];
|
||||
|
||||
return value;
|
||||
@@ -1302,7 +1302,7 @@ void Position::flip() {
|
||||
string f, token;
|
||||
std::stringstream ss(fen());
|
||||
|
||||
for (Rank rank = RANK_8; rank >= RANK_1; rank--) // Piece placement
|
||||
for (Rank rank = RANK_8; rank >= RANK_1; --rank) // Piece placement
|
||||
{
|
||||
std::getline(ss, token, rank > RANK_1 ? '/' : ' ');
|
||||
f.insert(0, token + (f.empty() ? " " : "/"));
|
||||
@@ -1366,7 +1366,7 @@ bool Position::pos_is_ok(int* failedStep) const {
|
||||
{
|
||||
int kingCount[COLOR_NB] = {};
|
||||
|
||||
for (Square s = SQ_A1; s <= SQ_H8; s++)
|
||||
for (Square s = SQ_A1; s <= SQ_H8; ++s)
|
||||
if (type_of(piece_on(s)) == KING)
|
||||
kingCount[color_of(piece_on(s))]++;
|
||||
|
||||
@@ -1393,8 +1393,8 @@ bool Position::pos_is_ok(int* failedStep) const {
|
||||
return false;
|
||||
|
||||
// Separate piece type bitboards must have empty intersections
|
||||
for (PieceType p1 = PAWN; p1 <= KING; p1++)
|
||||
for (PieceType p2 = PAWN; p2 <= KING; p2++)
|
||||
for (PieceType p1 = PAWN; p1 <= KING; ++p1)
|
||||
for (PieceType p2 = PAWN; p2 <= KING; ++p2)
|
||||
if (p1 != p2 && (pieces(p1) & pieces(p2)))
|
||||
return false;
|
||||
}
|
||||
@@ -1420,21 +1420,21 @@ bool Position::pos_is_ok(int* failedStep) const {
|
||||
return false;
|
||||
|
||||
if ((*step)++, debugPieceCounts)
|
||||
for (Color c = WHITE; c <= BLACK; c++)
|
||||
for (PieceType pt = PAWN; pt <= KING; pt++)
|
||||
for (Color c = WHITE; c <= BLACK; ++c)
|
||||
for (PieceType pt = PAWN; pt <= KING; ++pt)
|
||||
if (pieceCount[c][pt] != popcount<Full>(pieces(c, pt)))
|
||||
return false;
|
||||
|
||||
if ((*step)++, debugPieceList)
|
||||
for (Color c = WHITE; c <= BLACK; c++)
|
||||
for (PieceType pt = PAWN; pt <= KING; pt++)
|
||||
for (Color c = WHITE; c <= BLACK; ++c)
|
||||
for (PieceType pt = PAWN; pt <= KING; ++pt)
|
||||
for (int i = 0; i < pieceCount[c][pt]; i++)
|
||||
if ( board[pieceList[c][pt][i]] != make_piece(c, pt)
|
||||
|| index[pieceList[c][pt][i]] != i)
|
||||
return false;
|
||||
|
||||
if ((*step)++, debugCastleSquares)
|
||||
for (Color c = WHITE; c <= BLACK; c++)
|
||||
for (Color c = WHITE; c <= BLACK; ++c)
|
||||
for (CastlingSide s = KING_SIDE; s <= QUEEN_SIDE; s = CastlingSide(s + 1))
|
||||
{
|
||||
CastleRight cr = make_castle_right(c, s);
|
||||
|
||||
Reference in New Issue
Block a user