[BitBoard] improvements
This commit is contained in:
156
BitBoard.cpp
156
BitBoard.cpp
@@ -1,102 +1,9 @@
|
|||||||
#include <iostream>
|
|
||||||
#include "BitBoard.h"
|
#include "BitBoard.h"
|
||||||
|
|
||||||
//BitBoard::BitBoard() {
|
|
||||||
// mBoard = 0;
|
|
||||||
//}
|
|
||||||
|
|
||||||
BitBoard::BitBoard(uint64_t v) {
|
BitBoard::BitBoard(uint64_t v) {
|
||||||
mBoard = v;
|
mBoard = v;
|
||||||
}
|
}
|
||||||
|
|
||||||
BitBoard::operator bool() const {
|
|
||||||
return mBoard != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
BitBoard::operator unsigned long long() const {
|
|
||||||
return mBoard;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool BitBoard::operator==(const BitBoard &rhs) const {
|
|
||||||
return mBoard == rhs.mBoard;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool BitBoard::operator!=(const BitBoard &rhs) const {
|
|
||||||
return !(rhs == *this);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool BitBoard::operator<(const BitBoard &rhs) const {
|
|
||||||
return mBoard < rhs.mBoard;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool BitBoard::operator>(const BitBoard &rhs) const {
|
|
||||||
return rhs < *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool BitBoard::operator<=(const BitBoard &rhs) const {
|
|
||||||
return !(rhs < *this);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool BitBoard::operator>=(const BitBoard &rhs) const {
|
|
||||||
return !(*this < rhs);
|
|
||||||
}
|
|
||||||
|
|
||||||
BitBoard &BitBoard::operator&=(const BitBoard &rhs) {
|
|
||||||
mBoard &= rhs.mBoard;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
BitBoard &BitBoard::operator|=(const BitBoard &rhs) {
|
|
||||||
mBoard |= rhs.mBoard;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
BitBoard &BitBoard::operator^=(const BitBoard &rhs) {
|
|
||||||
mBoard ^= rhs.mBoard;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
BitBoard &BitBoard::operator<<=(const BitBoard &rhs) {
|
|
||||||
mBoard <<= rhs.mBoard;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
BitBoard &BitBoard::operator>>=(const BitBoard &rhs) {
|
|
||||||
mBoard >>= rhs.mBoard;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
BitBoard BitBoard::operator~() {
|
|
||||||
BitBoard result(*this);
|
|
||||||
result.mBoard = ~mBoard;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
BitBoard &BitBoard::operator+=(const BitBoard &rhs) {
|
|
||||||
mBoard += rhs.mBoard;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
BitBoard &BitBoard::operator-=(const BitBoard &rhs) {
|
|
||||||
mBoard -= rhs.mBoard;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
BitBoard &BitBoard::operator*=(const BitBoard &rhs) {
|
|
||||||
mBoard *= rhs.mBoard;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
BitBoard &BitBoard::operator/=(const BitBoard &rhs) {
|
|
||||||
mBoard /= rhs.mBoard;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
BitBoard &BitBoard::operator%=(const BitBoard &rhs) {
|
|
||||||
mBoard %= rhs.mBoard;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::ostream &operator<<(std::ostream &os, const BitBoard &board) {
|
std::ostream &operator<<(std::ostream &os, const BitBoard &board) {
|
||||||
// For debugging only, performance isn't important
|
// For debugging only, performance isn't important
|
||||||
for (int i = 7; i >= 0; i--) {
|
for (int i = 7; i >= 0; i--) {
|
||||||
@@ -116,65 +23,4 @@ std::ostream &operator<<(std::ostream &os, const BitBoard &board) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return os;
|
return os;
|
||||||
}
|
}
|
||||||
bool BitBoard::operator!() const {
|
|
||||||
return !mBoard;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool BitBoard::operator&&(const BitBoard &rhs) const {
|
|
||||||
return mBoard && rhs.mBoard;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool BitBoard::operator||(const BitBoard &rhs) const {
|
|
||||||
return mBoard || rhs.mBoard;
|
|
||||||
}
|
|
||||||
BitBoard::operator void *() const {
|
|
||||||
return (void *) mBoard;
|
|
||||||
}
|
|
||||||
|
|
||||||
BitBoard operator&(const BitBoard &lhs, const BitBoard &rhs) {
|
|
||||||
BitBoard result(lhs);
|
|
||||||
result &= rhs;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
BitBoard operator|(const BitBoard &lhs, const BitBoard &rhs) {
|
|
||||||
BitBoard result(lhs);
|
|
||||||
result |= rhs;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
BitBoard operator^(const BitBoard &lhs, const BitBoard &rhs) {
|
|
||||||
BitBoard result(lhs);
|
|
||||||
result ^= rhs;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
BitBoard operator<<(const BitBoard &lhs, const BitBoard &rhs) {
|
|
||||||
BitBoard result(lhs);
|
|
||||||
result <<= rhs;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
BitBoard operator>>(const BitBoard &lhs, const BitBoard &rhs) {
|
|
||||||
BitBoard result(lhs);
|
|
||||||
result >>= rhs;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
BitBoard operator-(const BitBoard &lhs, const BitBoard &rhs) {
|
|
||||||
BitBoard result(lhs);
|
|
||||||
result -= rhs;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
BitBoard operator*(const BitBoard &lhs, const BitBoard &rhs) {
|
|
||||||
BitBoard result(lhs);
|
|
||||||
result *= rhs;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
BitBoard operator%(const BitBoard &lhs, const BitBoard &rhs) {
|
|
||||||
BitBoard result(lhs);
|
|
||||||
result %= rhs;
|
|
||||||
return result;
|
|
||||||
}
|
|
159
BitBoard.h
159
BitBoard.h
@@ -3,7 +3,6 @@
|
|||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <ostream>
|
#include <ostream>
|
||||||
#include "CastlingRights.hpp"
|
|
||||||
|
|
||||||
class BitBoard final {
|
class BitBoard final {
|
||||||
public:
|
public:
|
||||||
@@ -11,54 +10,140 @@ public:
|
|||||||
|
|
||||||
BitBoard(uint64_t v = 0);
|
BitBoard(uint64_t v = 0);
|
||||||
|
|
||||||
// explicit operator uint64_t() const;
|
explicit constexpr operator bool() const {
|
||||||
explicit operator bool() const;
|
return mBoard != 0;
|
||||||
explicit operator unsigned long long() const;
|
}
|
||||||
operator void*() const;
|
|
||||||
|
|
||||||
bool operator==(const BitBoard &rhs) const;
|
explicit constexpr operator unsigned long long() const {
|
||||||
bool operator!=(const BitBoard &rhs) const;
|
return mBoard;
|
||||||
bool operator<(const BitBoard &rhs) const;
|
}
|
||||||
bool operator>(const BitBoard &rhs) const;
|
|
||||||
bool operator<=(const BitBoard &rhs) const;
|
|
||||||
bool operator>=(const BitBoard &rhs) const;
|
|
||||||
|
|
||||||
// bitset operations
|
operator void *() const {
|
||||||
BitBoard &operator&=(const BitBoard &rhs);
|
return (void *) mBoard;
|
||||||
BitBoard &operator|=(const BitBoard &rhs);
|
}
|
||||||
BitBoard &operator^=(const BitBoard &rhs);
|
|
||||||
BitBoard &operator<<=(const BitBoard &rhs);
|
|
||||||
BitBoard &operator>>=(const BitBoard &rhs);
|
|
||||||
BitBoard operator~();
|
|
||||||
|
|
||||||
bool operator!() const;
|
// Relational operators
|
||||||
bool operator&&(const BitBoard &rhs) const;
|
constexpr bool operator==(const BitBoard &rhs) const {
|
||||||
bool operator||(const BitBoard &rhs) const;
|
return mBoard == rhs.mBoard;
|
||||||
|
}
|
||||||
|
constexpr bool operator!=(const BitBoard &rhs) const {
|
||||||
|
return !(rhs == *this);
|
||||||
|
}
|
||||||
|
constexpr bool operator<(const BitBoard &rhs) const {
|
||||||
|
return mBoard < rhs.mBoard;
|
||||||
|
}
|
||||||
|
constexpr bool operator>(const BitBoard &rhs) const {
|
||||||
|
return rhs < *this;
|
||||||
|
}
|
||||||
|
constexpr bool operator<=(const BitBoard &rhs) const {
|
||||||
|
return !(rhs < *this);
|
||||||
|
}
|
||||||
|
constexpr bool operator>=(const BitBoard &rhs) const {
|
||||||
|
return !(*this < rhs);
|
||||||
|
}
|
||||||
|
|
||||||
BitBoard &operator+=(const BitBoard &rhs);
|
// Logical operators
|
||||||
BitBoard &operator-=(const BitBoard &rhs);
|
constexpr bool operator!() const {
|
||||||
BitBoard &operator*=(const BitBoard &rhs);
|
return !mBoard;
|
||||||
BitBoard &operator/=(const BitBoard &rhs);
|
}
|
||||||
BitBoard &operator%=(const BitBoard &rhs);
|
constexpr bool operator&&(const BitBoard &rhs) const {
|
||||||
|
return mBoard && rhs.mBoard;
|
||||||
|
}
|
||||||
|
constexpr bool operator||(const BitBoard &rhs) const {
|
||||||
|
return mBoard || rhs.mBoard;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Compound Bitwise assignment operators
|
||||||
|
constexpr BitBoard &operator&=(const BitBoard &rhs) {
|
||||||
|
mBoard &= rhs.mBoard;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
constexpr BitBoard &operator|=(const BitBoard &rhs) {
|
||||||
|
mBoard |= rhs.mBoard;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
constexpr BitBoard &operator^=(const BitBoard &rhs) {
|
||||||
|
mBoard ^= rhs.mBoard;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
constexpr BitBoard &operator<<=(const BitBoard &rhs) {
|
||||||
|
mBoard <<= rhs.mBoard;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
constexpr BitBoard &operator>>=(const BitBoard &rhs) {
|
||||||
|
mBoard >>= rhs.mBoard;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
BitBoard operator~() {
|
||||||
|
BitBoard result(*this);
|
||||||
|
result.mBoard = ~mBoard;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Compound Arithmetic assignment operators
|
||||||
|
constexpr BitBoard &operator+=(const BitBoard &rhs) {
|
||||||
|
mBoard += rhs.mBoard;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
constexpr BitBoard &operator-=(const BitBoard &rhs) {
|
||||||
|
mBoard -= rhs.mBoard;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
constexpr BitBoard &operator%=(const BitBoard &rhs) {
|
||||||
|
mBoard %= rhs.mBoard;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Stream operator
|
||||||
friend std::ostream &operator<<(std::ostream &os, const BitBoard &board);
|
friend std::ostream &operator<<(std::ostream &os, const BitBoard &board);
|
||||||
// friend bool operator&&(const bool &lhs, const BitBoard &rhs);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
U64 mBoard = {};
|
U64 mBoard = {};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Bitwise operators
|
||||||
|
inline BitBoard operator^(const BitBoard &lhs, const BitBoard &rhs) {
|
||||||
|
BitBoard result(lhs);
|
||||||
|
result ^= rhs;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
inline BitBoard operator|(const BitBoard &lhs, const BitBoard &rhs) {
|
||||||
|
BitBoard result(lhs);
|
||||||
|
result |= rhs;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
inline BitBoard operator&(const BitBoard &lhs, const BitBoard &rhs) {
|
||||||
|
BitBoard result(lhs);
|
||||||
|
result &= rhs;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
inline BitBoard operator<<(const BitBoard &lhs, const BitBoard &rhs) {
|
||||||
|
BitBoard result(lhs);
|
||||||
|
result <<= rhs;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
inline BitBoard operator>>(const BitBoard &lhs, const BitBoard &rhs) {
|
||||||
|
BitBoard result(lhs);
|
||||||
|
result >>= rhs;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
BitBoard operator^(const BitBoard &lhs, const BitBoard &rhs);
|
// Arithmetic operators
|
||||||
BitBoard operator|(const BitBoard &lhs, const BitBoard &rhs);
|
inline BitBoard operator+(const BitBoard &lhs, const BitBoard &rhs) {
|
||||||
BitBoard operator&(const BitBoard &lhs, const BitBoard &rhs);
|
BitBoard result(lhs);
|
||||||
BitBoard operator<<(const BitBoard &lhs, const BitBoard &rhs);
|
result += rhs;
|
||||||
BitBoard operator>>(const BitBoard &lhs, const BitBoard &rhs);
|
return result;
|
||||||
BitBoard operator+(const BitBoard &lhs, const BitBoard &rhs);
|
}
|
||||||
BitBoard operator-(const BitBoard &lhs, const BitBoard &rhs);
|
inline BitBoard operator-(const BitBoard &lhs, const BitBoard &rhs) {
|
||||||
//BitBoard operator*(const BitBoard &lhs, const BitBoard &rhs);
|
BitBoard result(lhs);
|
||||||
//BitBoard operator/(const BitBoard &lhs, const BitBoard &rhs);
|
result -= rhs;
|
||||||
BitBoard operator%(const BitBoard &lhs, const BitBoard &rhs);
|
return result;
|
||||||
|
}
|
||||||
|
inline BitBoard operator%(const BitBoard &lhs, const BitBoard &rhs) {
|
||||||
|
BitBoard result(lhs);
|
||||||
|
result %= rhs;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
#endif //CHESS_ENGINE_BITBOARD_HPP
|
#endif //CHESS_ENGINE_BITBOARD_HPP
|
||||||
|
Reference in New Issue
Block a user