1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-04-29 16:23:09 +00:00

Use a const pointer-to-member array for attacks

Allow the compiler to optimize member
function access.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Marco Costalba 2008-10-18 08:54:18 +02:00
parent aa7121297d
commit 3b857d1625
4 changed files with 10 additions and 15 deletions

View file

@ -52,7 +52,6 @@ int main(int argc, char *argv[]) {
// Initialization // Initialization
init_piece_attacks_fn();
init_mersenne(); init_mersenne();
init_direction_table(); init_direction_table();
init_bitboards(); init_bitboards();

View file

@ -1004,9 +1004,10 @@ namespace {
int generate_piece_moves(PieceType piece, const Position &pos, MoveStack *mlist, int generate_piece_moves(PieceType piece, const Position &pos, MoveStack *mlist,
Color side, Bitboard target) { Color side, Bitboard target) {
const Piece_attacks_fn mem_fn = piece_attacks_fn[piece];
Square from, to; Square from, to;
Bitboard b; Bitboard b;
Piece_attacks_fn mem_fn = piece_attacks_fn[piece];
int n = 0; int n = 0;
for (int i = 0; i < pos.piece_count(side, piece); i++) for (int i = 0; i < pos.piece_count(side, piece); i++)
@ -1095,5 +1096,4 @@ namespace {
return n; return n;
} }
} }

View file

@ -48,21 +48,18 @@ Key Position::zobSideToMove;
Value Position::MgPieceSquareTable[16][64]; Value Position::MgPieceSquareTable[16][64];
Value Position::EgPieceSquareTable[16][64]; Value Position::EgPieceSquareTable[16][64];
Piece_attacks_fn piece_attacks_fn[7]; const Piece_attacks_fn piece_attacks_fn[] =
{ 0, 0,
&Position::knight_attacks,
&Position::bishop_attacks,
&Position::rook_attacks,
&Position::queen_attacks,
&Position::king_attacks };
//// ////
//// Functions //// Functions
//// ////
void init_piece_attacks_fn() {
piece_attacks_fn[KNIGHT] = &Position::knight_attacks;
piece_attacks_fn[BISHOP] = &Position::bishop_attacks;
piece_attacks_fn[ROOK] = &Position::rook_attacks;
piece_attacks_fn[QUEEN] = &Position::queen_attacks;
piece_attacks_fn[KING] = &Position::king_attacks;
}
/// Constructors /// Constructors
Position::Position(const Position &pos) { Position::Position(const Position &pos) {

View file

@ -372,8 +372,7 @@ private:
/// An array of member functions to dispatch attacks_square /// An array of member functions to dispatch attacks_square
typedef Bitboard (Position::* Piece_attacks_fn)(Square s) const; typedef Bitboard (Position::* Piece_attacks_fn)(Square s) const;
extern Piece_attacks_fn piece_attacks_fn[7]; extern const Piece_attacks_fn piece_attacks_fn[];
extern void init_piece_attacks_fn();
//// ////
//// Inline functions //// Inline functions