[BitBoard] Add fills and direction methods

This commit is contained in:
2022-12-22 11:18:23 +01:00
parent fbc1a5589a
commit 4157c9200e
3 changed files with 58 additions and 12 deletions

View File

@@ -31,3 +31,23 @@ BitBoard BitBoard::getRank(int r) {
BitBoard BitBoard::genShift(BitBoard x, const int s) {
return (s < 0) ? (x >> -s) : (s > 63) ? x : (x << s);
}
BitBoard BitBoard::northFill() const {
BitBoard result(mBoard);
result |= (result << 8);
result |= (result << 16);
result |= (result << 32);
return (result << 8);
}
BitBoard BitBoard::southFill() const {
BitBoard result(mBoard);
result |= (result >> 8);
result |= (result >> 16);
result |= (result >> 32);
return result;
}
BitBoard BitBoard::fileFill() const {
return northFill() | southFill();
}

View File

@@ -82,8 +82,18 @@ public:
constexpr void clear(unsigned i);
constexpr void set(unsigned i);
BitBoard left(unsigned i) const;
BitBoard right(unsigned i) const;
BitBoard north() const;
BitBoard northEast() const;
BitBoard northWest() const;
BitBoard east() const;
BitBoard south() const;
BitBoard southEast() const;
BitBoard southWest() const;
BitBoard west() const;
BitBoard northFill() const;
BitBoard southFill() const;
BitBoard fileFill() const;
static BitBoard fromIndex(unsigned i);
@@ -215,11 +225,30 @@ constexpr void BitBoard::clear(const unsigned i) {
inline BitBoard BitBoard::fromIndex(const unsigned i) {
return 1ULL << i;
}
inline BitBoard BitBoard::left(const unsigned int i) const {
return (mBoard >> i);
inline BitBoard BitBoard::north() const {
return (mBoard << 8);
}
inline BitBoard BitBoard::right(const unsigned int i) const {
return (mBoard << i);
inline BitBoard BitBoard::northEast() const {
return (mBoard << 9) & ~AFile;
}
inline BitBoard BitBoard::northWest() const {
return (mBoard << 7) & ~HFile;
}
inline BitBoard BitBoard::west() const {
return (mBoard >> 1) & ~HFile;
}
inline BitBoard BitBoard::east() const {
return (mBoard << 1) & ~AFile;
}
inline BitBoard BitBoard::south() const {
return (mBoard >> 8);
}
inline BitBoard BitBoard::southEast() const {
return (mBoard >> 7) & ~AFile;
}
inline BitBoard BitBoard::southWest() const {
return (mBoard >> 9) & ~HFile;
}
inline int BitBoard::lsb() const {
return __builtin_ctzll(mBoard);

View File

@@ -133,10 +133,8 @@ void Board::handlePawnDoubleAdvance(const Move &move, BitBoard bb, const Piece &
auto fromR = move.from().rank();
auto toR = move.to().rank();
if (abs(static_cast<int>(fromR) - static_cast<int>(toR)) == 2) {
if (mPieceBBs[toIndex(PieceType::Pawn)]
& (bb.left(1) | bb.right(1))
& BitBoard::getRank(static_cast<int>(toR))) {
if (mPieceBBs[toIndex(PieceType::Pawn)] & mPieceBBs[toIndex(!mTurn)] // Get all other color pawns
& (bb.west() | bb.east())) { // is pawn left or right?
mEPS = Square::fromCoordinates(move.to().file(), std::max(fromR, toR) - 1);
return;
}
@@ -151,8 +149,7 @@ void Board::pseudoLegalMoves(MoveVec &moves) const {
(void) moves;
}
void Board::pseudoLegalMovesFrom(const Square &from,
Board::MoveVec &moves) const {
void Board::pseudoLegalMovesFrom(const Square &from, Board::MoveVec &moves) const {
(void) from;
(void) moves;
}