[BitBoard] Add bishop and pawn methods
This commit is contained in:
29
BitBoard.hpp
29
BitBoard.hpp
@@ -14,6 +14,14 @@ enum DefinedBoards : uint64_t {
|
||||
FFile = AFile << 5,
|
||||
GFile = AFile << 6,
|
||||
HFile = AFile << 7,
|
||||
Rank1 = 0x00000000000000FF,
|
||||
Rank2 = Rank1 << 8,
|
||||
Rank3 = Rank1 << 16,
|
||||
Rank4 = Rank1 << 24,
|
||||
Rank5 = Rank1 << 32,
|
||||
Rank6 = Rank1 << 40,
|
||||
Rank7 = Rank1 << 48,
|
||||
Rank8 = Rank1 << 56,
|
||||
WhiteCastlingRank = (1ULL << A2) - 1,
|
||||
BlackCastlingRank = (~1ULL << H7),
|
||||
CastlingRanks = WhiteCastlingRank | BlackCastlingRank,
|
||||
@@ -98,15 +106,21 @@ public:
|
||||
BitBoard southFill() const;
|
||||
BitBoard fileFill() const;
|
||||
|
||||
static BitBoard bishopAttacks(BitBoard pos, BitBoard empty);
|
||||
static BitBoard kingAttacks(BitBoard bb);
|
||||
|
||||
static BitBoard pawnNorthAttacks(BitBoard pawns, BitBoard targets);
|
||||
static BitBoard pawnSouthAttacks(BitBoard pawns, BitBoard targets);
|
||||
|
||||
static BitBoard pawnNorthMoves(BitBoard pawns, BitBoard empty);
|
||||
static BitBoard pawnSouthMoves(BitBoard pawns, BitBoard empty);
|
||||
|
||||
static BitBoard fromIndex(unsigned i);
|
||||
|
||||
static BitBoard getRank(int r);
|
||||
|
||||
// Returns the number of trailing 0-bits in b.
|
||||
// WARN: Check for 0!
|
||||
int lsb() const;
|
||||
unsigned lsb() const;
|
||||
unsigned pop();
|
||||
|
||||
private:
|
||||
U64 mBoard = {};
|
||||
@@ -255,8 +269,15 @@ inline BitBoard BitBoard::southEast() const {
|
||||
inline BitBoard BitBoard::southWest() const {
|
||||
return (mBoard >> 9) & ~HFile;
|
||||
}
|
||||
inline int BitBoard::lsb() const {
|
||||
|
||||
inline unsigned BitBoard::lsb() const {
|
||||
return __builtin_ctzll(mBoard);
|
||||
}
|
||||
inline unsigned BitBoard::pop() {
|
||||
unsigned i = lsb();
|
||||
mBoard &= mBoard - 1;
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
#endif //CHESS_ENGINE_BITBOARD_HPP
|
||||
|
Reference in New Issue
Block a user