[BitBoard] Add fills and direction methods
This commit is contained in:
20
BitBoard.cpp
20
BitBoard.cpp
@@ -31,3 +31,23 @@ BitBoard BitBoard::getRank(int r) {
|
|||||||
BitBoard BitBoard::genShift(BitBoard x, const int s) {
|
BitBoard BitBoard::genShift(BitBoard x, const int s) {
|
||||||
return (s < 0) ? (x >> -s) : (s > 63) ? x : (x << 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();
|
||||||
|
}
|
||||||
|
41
BitBoard.h
41
BitBoard.h
@@ -82,8 +82,18 @@ public:
|
|||||||
constexpr void clear(unsigned i);
|
constexpr void clear(unsigned i);
|
||||||
constexpr void set(unsigned i);
|
constexpr void set(unsigned i);
|
||||||
|
|
||||||
BitBoard left(unsigned i) const;
|
BitBoard north() const;
|
||||||
BitBoard right(unsigned i) 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);
|
static BitBoard fromIndex(unsigned i);
|
||||||
|
|
||||||
@@ -215,11 +225,30 @@ constexpr void BitBoard::clear(const unsigned i) {
|
|||||||
inline BitBoard BitBoard::fromIndex(const unsigned i) {
|
inline BitBoard BitBoard::fromIndex(const unsigned i) {
|
||||||
return 1ULL << 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 {
|
inline BitBoard BitBoard::northEast() const {
|
||||||
return (mBoard << i);
|
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 {
|
inline int BitBoard::lsb() const {
|
||||||
return __builtin_ctzll(mBoard);
|
return __builtin_ctzll(mBoard);
|
||||||
|
@@ -133,10 +133,8 @@ void Board::handlePawnDoubleAdvance(const Move &move, BitBoard bb, const Piece &
|
|||||||
auto fromR = move.from().rank();
|
auto fromR = move.from().rank();
|
||||||
auto toR = move.to().rank();
|
auto toR = move.to().rank();
|
||||||
if (abs(static_cast<int>(fromR) - static_cast<int>(toR)) == 2) {
|
if (abs(static_cast<int>(fromR) - static_cast<int>(toR)) == 2) {
|
||||||
if (mPieceBBs[toIndex(PieceType::Pawn)]
|
if (mPieceBBs[toIndex(PieceType::Pawn)] & mPieceBBs[toIndex(!mTurn)] // Get all other color pawns
|
||||||
& (bb.left(1) | bb.right(1))
|
& (bb.west() | bb.east())) { // is pawn left or right?
|
||||||
& BitBoard::getRank(static_cast<int>(toR))) {
|
|
||||||
|
|
||||||
mEPS = Square::fromCoordinates(move.to().file(), std::max(fromR, toR) - 1);
|
mEPS = Square::fromCoordinates(move.to().file(), std::max(fromR, toR) - 1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -151,8 +149,7 @@ void Board::pseudoLegalMoves(MoveVec &moves) const {
|
|||||||
(void) moves;
|
(void) moves;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Board::pseudoLegalMovesFrom(const Square &from,
|
void Board::pseudoLegalMovesFrom(const Square &from, Board::MoveVec &moves) const {
|
||||||
Board::MoveVec &moves) const {
|
|
||||||
(void) from;
|
(void) from;
|
||||||
(void) moves;
|
(void) moves;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user