From 14f47c8ac6a77b9638008a9b61009dd6852be4d6 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Fri, 30 Aug 2013 07:05:25 +0200 Subject: [PATCH] Use frontmost_sq() and backmost_sq helpers Should easier to read than the lsb() / msb() low level functions. No functional change. --- src/bitboard.h | 9 +++++---- src/endgame.cpp | 7 ++++--- src/pawns.cpp | 4 ++-- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/bitboard.h b/src/bitboard.h index e0e2fe64..3afbeedf 100644 --- a/src/bitboard.h +++ b/src/bitboard.h @@ -319,9 +319,10 @@ extern Square pop_lsb(Bitboard* b); #endif -/// lsb() overload finds least significant bit relative to the given color -inline Square lsb(Color c, Bitboard b) { - return c == WHITE ? lsb(b) : msb(b); -} +/// frontmost_sq() and backmost_sq() find the square corresponding to the +/// most/least advanced bit relative to the given color. + +inline Square frontmost_sq(Color c, Bitboard b) { return c == WHITE ? msb(b) : lsb(b); } +inline Square backmost_sq(Color c, Bitboard b) { return c == WHITE ? lsb(b) : msb(b); } #endif // #ifndef BITBOARD_H_INCLUDED diff --git a/src/endgame.cpp b/src/endgame.cpp index 65b85861..9c1c56f1 100644 --- a/src/endgame.cpp +++ b/src/endgame.cpp @@ -443,11 +443,12 @@ ScaleFactor Endgame::operator()(const Position& pos) const { // The bishop has the wrong color, and the defending king is on the // file of the pawn(s) or the adjacent file. Find the rank of the // frontmost pawn. - Rank rank = relative_rank(strongerSide, lsb(weakerSide, pawns)); + Square pawnSq = frontmost_sq(strongerSide, pawns); + // If the defending king has distance 1 to the promotion square or // is placed somewhere in front of the pawn, it's a draw. if ( square_distance(kingSq, queeningSq) <= 1 - || relative_rank(strongerSide, kingSq) >= rank) + || relative_rank(weakerSide, kingSq) <= relative_rank(weakerSide, pawnSq)) return SCALE_FACTOR_DRAW; } } @@ -459,7 +460,7 @@ ScaleFactor Endgame::operator()(const Position& pos) const { && pos.count(weakerSide) >= 1) { // Get weakerSide pawn that is closest to home rank - Square weakerPawnSq = lsb(weakerSide, pos.pieces(weakerSide, PAWN)); + Square weakerPawnSq = backmost_sq(weakerSide, pos.pieces(weakerSide, PAWN)); Square strongerKingSq = pos.king_square(strongerSide); Square weakerKingSq = pos.king_square(weakerSide); diff --git a/src/pawns.cpp b/src/pawns.cpp index fece246b..c5fda172 100644 --- a/src/pawns.cpp +++ b/src/pawns.cpp @@ -229,11 +229,11 @@ Value Entry::shelter_storm(const Position& pos, Square ksq) { for (int f = kf - 1; f <= kf + 1; f++) { b = ourPawns & FileBB[f]; - rkUs = b ? relative_rank(Us, lsb(Us, b)) : RANK_1; + rkUs = b ? relative_rank(Us, backmost_sq(Us, b)) : RANK_1; safety -= ShelterWeakness[rkUs]; b = theirPawns & FileBB[f]; - rkThem = b ? relative_rank(Us, lsb(Us, b)) : RANK_1; + rkThem = b ? relative_rank(Us, frontmost_sq(Them, b)) : RANK_1; safety -= StormDanger[rkUs == RANK_1 ? 0 : rkThem == rkUs + 1 ? 2 : 1][rkThem]; } -- 2.39.2