mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 08:43:09 +00:00
Limit array access in Position
This is a non-functional code style change that routes all position array accesses to single methods, and adds an assert to check correctness. Passed STC LLR: 2.94 (-2.94,2.94) {-1.50,0.50} Total: 37312 W: 7378 L: 7246 D: 22688 Ptnml(0-2): 606, 4280, 8762, 4392, 616 https://tests.stockfishchess.org/tests/view/5e7c0c69e42a5c3b3ca2eb3d closes https://github.com/official-stockfish/Stockfish/pull/2595 No functional change.
This commit is contained in:
parent
209e94203f
commit
0b8ce4b303
1 changed files with 19 additions and 23 deletions
|
@ -83,7 +83,6 @@ public:
|
||||||
const std::string fen() const;
|
const std::string fen() const;
|
||||||
|
|
||||||
// Position representation
|
// Position representation
|
||||||
Bitboard pieces() const;
|
|
||||||
Bitboard pieces(PieceType pt) const;
|
Bitboard pieces(PieceType pt) const;
|
||||||
Bitboard pieces(PieceType pt1, PieceType pt2) const;
|
Bitboard pieces(PieceType pt1, PieceType pt2) const;
|
||||||
Bitboard pieces(Color c) const;
|
Bitboard pieces(Color c) const;
|
||||||
|
@ -207,28 +206,25 @@ inline Color Position::side_to_move() const {
|
||||||
return sideToMove;
|
return sideToMove;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool Position::empty(Square s) const {
|
|
||||||
return board[s] == NO_PIECE;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline Piece Position::piece_on(Square s) const {
|
inline Piece Position::piece_on(Square s) const {
|
||||||
|
assert(is_ok(s));
|
||||||
return board[s];
|
return board[s];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline bool Position::empty(Square s) const {
|
||||||
|
return piece_on(s) == NO_PIECE;
|
||||||
|
}
|
||||||
|
|
||||||
inline Piece Position::moved_piece(Move m) const {
|
inline Piece Position::moved_piece(Move m) const {
|
||||||
return board[from_sq(m)];
|
return piece_on(from_sq(m));
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Bitboard Position::pieces() const {
|
inline Bitboard Position::pieces(PieceType pt = ALL_PIECES) const {
|
||||||
return byTypeBB[ALL_PIECES];
|
|
||||||
}
|
|
||||||
|
|
||||||
inline Bitboard Position::pieces(PieceType pt) const {
|
|
||||||
return byTypeBB[pt];
|
return byTypeBB[pt];
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Bitboard Position::pieces(PieceType pt1, PieceType pt2) const {
|
inline Bitboard Position::pieces(PieceType pt1, PieceType pt2) const {
|
||||||
return byTypeBB[pt1] | byTypeBB[pt2];
|
return pieces(pt1) | pieces(pt2);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Bitboard Position::pieces(Color c) const {
|
inline Bitboard Position::pieces(Color c) const {
|
||||||
|
@ -236,11 +232,11 @@ inline Bitboard Position::pieces(Color c) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Bitboard Position::pieces(Color c, PieceType pt) const {
|
inline Bitboard Position::pieces(Color c, PieceType pt) const {
|
||||||
return byColorBB[c] & byTypeBB[pt];
|
return pieces(c) & pieces(pt);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Bitboard Position::pieces(Color c, PieceType pt1, PieceType pt2) const {
|
inline Bitboard Position::pieces(Color c, PieceType pt1, PieceType pt2) const {
|
||||||
return byColorBB[c] & (byTypeBB[pt1] | byTypeBB[pt2]);
|
return pieces(c) & (pieces(pt1) | pieces(pt2));
|
||||||
}
|
}
|
||||||
|
|
||||||
template<PieceType Pt> inline int Position::count(Color c) const {
|
template<PieceType Pt> inline int Position::count(Color c) const {
|
||||||
|
@ -248,7 +244,7 @@ template<PieceType Pt> inline int Position::count(Color c) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
template<PieceType Pt> inline int Position::count() const {
|
template<PieceType Pt> inline int Position::count() const {
|
||||||
return pieceCount[make_piece(WHITE, Pt)] + pieceCount[make_piece(BLACK, Pt)];
|
return count<Pt>(WHITE) + count<Pt>(BLACK);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<PieceType Pt> inline const Square* Position::squares(Color c) const {
|
template<PieceType Pt> inline const Square* Position::squares(Color c) const {
|
||||||
|
@ -257,7 +253,7 @@ template<PieceType Pt> inline const Square* Position::squares(Color c) const {
|
||||||
|
|
||||||
template<PieceType Pt> inline Square Position::square(Color c) const {
|
template<PieceType Pt> inline Square Position::square(Color c) const {
|
||||||
assert(pieceCount[make_piece(c, Pt)] == 1);
|
assert(pieceCount[make_piece(c, Pt)] == 1);
|
||||||
return pieceList[make_piece(c, Pt)][0];
|
return squares<Pt>(c)[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Square Position::ep_square() const {
|
inline Square Position::ep_square() const {
|
||||||
|
@ -279,7 +275,7 @@ inline int Position::castling_rights(Color c) const {
|
||||||
inline bool Position::castling_impeded(CastlingRights cr) const {
|
inline bool Position::castling_impeded(CastlingRights cr) const {
|
||||||
assert(cr == WHITE_OO || cr == WHITE_OOO || cr == BLACK_OO || cr == BLACK_OOO);
|
assert(cr == WHITE_OO || cr == WHITE_OOO || cr == BLACK_OO || cr == BLACK_OOO);
|
||||||
|
|
||||||
return byTypeBB[ALL_PIECES] & castlingPath[cr];
|
return pieces() & castlingPath[cr];
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Square Position::castling_rook_square(CastlingRights cr) const {
|
inline Square Position::castling_rook_square(CastlingRights cr) const {
|
||||||
|
@ -292,7 +288,7 @@ template<PieceType Pt>
|
||||||
inline Bitboard Position::attacks_from(Square s) const {
|
inline Bitboard Position::attacks_from(Square s) const {
|
||||||
static_assert(Pt != PAWN, "Pawn attacks need color");
|
static_assert(Pt != PAWN, "Pawn attacks need color");
|
||||||
|
|
||||||
return Pt == BISHOP || Pt == ROOK ? attacks_bb<Pt>(s, byTypeBB[ALL_PIECES])
|
return Pt == BISHOP || Pt == ROOK ? attacks_bb<Pt>(s, pieces())
|
||||||
: Pt == QUEEN ? attacks_from<ROOK>(s) | attacks_from<BISHOP>(s)
|
: Pt == QUEEN ? attacks_from<ROOK>(s) | attacks_from<BISHOP>(s)
|
||||||
: PseudoAttacks[Pt][s];
|
: PseudoAttacks[Pt][s];
|
||||||
}
|
}
|
||||||
|
@ -303,11 +299,11 @@ inline Bitboard Position::attacks_from<PAWN>(Square s, Color c) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Bitboard Position::attacks_from(PieceType pt, Square s) const {
|
inline Bitboard Position::attacks_from(PieceType pt, Square s) const {
|
||||||
return attacks_bb(pt, s, byTypeBB[ALL_PIECES]);
|
return attacks_bb(pt, s, pieces());
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Bitboard Position::attackers_to(Square s) const {
|
inline Bitboard Position::attackers_to(Square s) const {
|
||||||
return attackers_to(s, byTypeBB[ALL_PIECES]);
|
return attackers_to(s, pieces());
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Bitboard Position::checkers() const {
|
inline Bitboard Position::checkers() const {
|
||||||
|
@ -360,7 +356,7 @@ inline Value Position::non_pawn_material(Color c) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Value Position::non_pawn_material() const {
|
inline Value Position::non_pawn_material() const {
|
||||||
return st->nonPawnMaterial[WHITE] + st->nonPawnMaterial[BLACK];
|
return non_pawn_material(WHITE) + non_pawn_material(BLACK);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int Position::game_ply() const {
|
inline int Position::game_ply() const {
|
||||||
|
@ -372,8 +368,8 @@ inline int Position::rule50_count() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool Position::opposite_bishops() const {
|
inline bool Position::opposite_bishops() const {
|
||||||
return pieceCount[W_BISHOP] == 1
|
return count<BISHOP>(WHITE) == 1
|
||||||
&& pieceCount[B_BISHOP] == 1
|
&& count<BISHOP>(BLACK) == 1
|
||||||
&& opposite_colors(square<BISHOP>(WHITE), square<BISHOP>(BLACK));
|
&& opposite_colors(square<BISHOP>(WHITE), square<BISHOP>(BLACK));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue