17#ifndef HOOVER_CHESS_UTILS__PGN_READER__BITBOARD_ATTACKS_PORTABLE_H_INCLUDED
18#define HOOVER_CHESS_UTILS__PGN_READER__BITBOARD_ATTACKS_PORTABLE_H_INCLUDED
216 static_cast<std::size_t
>(sq), pawnColor) };
221 static_assert(
static_cast<std::uint64_t
>(
Color::WHITE) == 0U);
222 static_assert(
static_cast<std::uint64_t
>(
Color::BLACK) == 8U);
230 template <Color pawnColor,
bool captureToRight>
235 if constexpr (captureToRight)
237 SquareSet destMask { 0xFE'FE'FE'FE'FE'FE'FE'00 };
238 return (capturable & destMask) >> 9U;
242 SquareSet destMask { 0x7F'7F'7F'7F'7F'7F'7F'00 };
243 return (capturable & destMask) >> 7U;
248 if constexpr (captureToRight)
250 SquareSet destMask { 0x00'FE'FE'FE'FE'FE'FE'FE };
251 return (capturable & destMask) << 7U;
255 SquareSet destMask { 0x00'7F'7F'7F'7F'7F'7F'7F };
256 return (capturable & destMask) << 9U;
308 const std::uint64_t occupancyShifted =
static_cast<std::uint64_t
>(occupancyMask >> rankShift) & 0xFFU;
314#if (BITBOARD_TABLES_HAVE_HYPERBOLA)
316 SquareSet pieceBit, SquareSet occupancyMask, SquareSet rayMaskEx)
noexcept
318 std::uint64_t forward {
static_cast<std::uint64_t
>(occupancyMask & rayMaskEx) };
319 std::uint64_t reverse {
static_cast<std::uint64_t
>(SquareSet { forward }.flipVert()) };
321 forward = forward -
static_cast<std::uint64_t
>(pieceBit);
322 reverse = reverse -
static_cast<std::uint64_t
>(pieceBit.flipVert());
324 return (SquareSet { forward } ^ SquareSet { reverse }.flipVert()) & rayMaskEx;
332 getSliderAttackMaskHyperbola(
334 getSliderAttackMaskHyperbola(
342 const SquareSet vertAttacks {
343 getSliderAttackMaskHyperbola(
349 const std::uint64_t occupancyShifted =
static_cast<std::uint64_t
>(occupancyMask >> rankShift) & 0xFFU;
Portable implementations for attacks.
Definition bitboard-attacks-portable.h:35
static SquareSet getBishopAttackMask(Square sq, SquareSet occupancyMask) noexcept
See Attacks::getBishopAttackMask() for usage documentation.
static SquareSet getHorizRookAttackMask(Square sq, SquareSet occupancyMask) noexcept
Returns horizontal rook attack mask.
Definition bitboard-attacks-portable.h:303
static SquareSet getPawnAttackMask(Square sq, Color pawnColor) noexcept
Definition bitboard-attacks-portable.h:211
static SquareSet getSliderAttackMaskHyperbola(SquareSet pieceBit, SquareSet occupancyMask, SquareSet rayMaskEx) noexcept
Calculate vertical, diagonal, or antidiagonal attack mask using the Hyperbola quintessence algorithm.
static SquareSet getKingAttackMask(Square sq) noexcept
Definition bitboard-attacks-portable.h:266
static SquareSet getKnightAttackMask(Square sq) noexcept
Definition bitboard-attacks-portable.h:261
static SquareSet getPawnAttackerMask(Square sq, Color pawnColor) noexcept
Definition bitboard-attacks-portable.h:219
static SquareSet getRookAttackMask(Square sq, SquareSet occupancyMask) noexcept
See Attacks::getRookAttackMask() for usage documentation.
static constexpr SquareSet getPawnAttackersMask(SquareSet capturable) noexcept
Definition bitboard-attacks-portable.h:231
Set of squares. Implemented using a bit-mask.
Definition chessboard-types-squareset.h:35
constexpr Color oppositeColor(Color c) noexcept
Flips the color.
Definition chessboard-types.h:409
std::uint_fast8_t SquareUnderlyingType
Underlying type of Square
Definition chessboard-types.h:38
constexpr std::size_t getIndexOfSquare(Square sq) noexcept
Returns an index for a square.
Definition chessboard-types.h:372
Color
Color of a piece or side to move.
Definition chessboard-types.h:194
Square
Named square.
Definition chessboard-types.h:122
@ BLACK
Black piece or black side to move.
@ WHITE
White piece or white side to move.
const U64Type & turnSpecificArrayLookup(const std::array< std::array< U64Type, 2U >, N > &array, std::size_t i, Color turn) noexcept
Optimized lookup for arrays indexed by general index and turn (side-to-move).
Definition lookup-utils.h:92
Definition chessboard-types-squareset.h:30
const BitBoardTables ctBitBoardTables
Various bitboard attack and other tables.
std::array< std::array< std::uint64_t, 2U >, 64U > pawnAttackMasks
Pawn attack masks.
Definition bitboard-tables.h:45
std::array< std::array< std::uint8_t, 8U >, 256U > rookHorizAttackMasks
Horizontal rook attacks: column to squares on the column.
Definition bitboard-tables.h:75
std::array< std::uint64_t, 64U > kingAttackMasks
King attack masks.
Definition bitboard-tables.h:57
std::array< std::uint64_t, 64U > knightAttackMasks
Knight attack masks.
Definition bitboard-tables.h:51