From 3b857d1625c87ae3b87ea9e960b2c8d2d3284b9a Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sat, 18 Oct 2008 08:54:18 +0200 Subject: [PATCH] Use a const pointer-to-member array for attacks Allow the compiler to optimize member function access. Signed-off-by: Marco Costalba --- src/main.cpp | 1 - src/movegen.cpp | 4 ++-- src/position.cpp | 17 +++++++---------- src/position.h | 3 +-- 4 files changed, 10 insertions(+), 15 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 9979e851..e89fee0e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -52,7 +52,6 @@ int main(int argc, char *argv[]) { // Initialization - init_piece_attacks_fn(); init_mersenne(); init_direction_table(); init_bitboards(); diff --git a/src/movegen.cpp b/src/movegen.cpp index b6bf6b24..2972eeee 100644 --- a/src/movegen.cpp +++ b/src/movegen.cpp @@ -1004,9 +1004,10 @@ namespace { int generate_piece_moves(PieceType piece, const Position &pos, MoveStack *mlist, Color side, Bitboard target) { + + const Piece_attacks_fn mem_fn = piece_attacks_fn[piece]; Square from, to; Bitboard b; - Piece_attacks_fn mem_fn = piece_attacks_fn[piece]; int n = 0; for (int i = 0; i < pos.piece_count(side, piece); i++) @@ -1095,5 +1096,4 @@ namespace { return n; } - } diff --git a/src/position.cpp b/src/position.cpp index f16d498f..6de3f08c 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -48,21 +48,18 @@ Key Position::zobSideToMove; Value Position::MgPieceSquareTable[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 //// -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 Position::Position(const Position &pos) { diff --git a/src/position.h b/src/position.h index 1c422088..5285c8f9 100644 --- a/src/position.h +++ b/src/position.h @@ -372,8 +372,7 @@ private: /// An array of member functions to dispatch attacks_square typedef Bitboard (Position::* Piece_attacks_fn)(Square s) const; -extern Piece_attacks_fn piece_attacks_fn[7]; -extern void init_piece_attacks_fn(); +extern const Piece_attacks_fn piece_attacks_fn[]; //// //// Inline functions -- 2.39.2