[BitBoard] improvements

This commit is contained in:
2022-12-22 00:45:27 +01:00
parent d54ffbc7fa
commit a1d4dadaa2
2 changed files with 123 additions and 192 deletions

View File

@@ -1,102 +1,9 @@
#include <iostream>
#include "BitBoard.h"
//BitBoard::BitBoard() {
// mBoard = 0;
//}
BitBoard::BitBoard(uint64_t 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) {
// For debugging only, performance isn't important
for (int i = 7; i >= 0; i--) {
@@ -116,65 +23,4 @@ std::ostream &operator<<(std::ostream &os, const BitBoard &board) {
}
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;
}
}

View File

@@ -3,7 +3,6 @@
#include <cstdint>
#include <ostream>
#include "CastlingRights.hpp"
class BitBoard final {
public:
@@ -11,54 +10,140 @@ public:
BitBoard(uint64_t v = 0);
// explicit operator uint64_t() const;
explicit operator bool() const;
explicit operator unsigned long long() const;
operator void*() const;
explicit constexpr operator bool() const {
return mBoard != 0;
}
bool operator==(const BitBoard &rhs) const;
bool operator!=(const BitBoard &rhs) const;
bool operator<(const BitBoard &rhs) const;
bool operator>(const BitBoard &rhs) const;
bool operator<=(const BitBoard &rhs) const;
bool operator>=(const BitBoard &rhs) const;
explicit constexpr operator unsigned long long() const {
return mBoard;
}
// bitset operations
BitBoard &operator&=(const BitBoard &rhs);
BitBoard &operator|=(const BitBoard &rhs);
BitBoard &operator^=(const BitBoard &rhs);
BitBoard &operator<<=(const BitBoard &rhs);
BitBoard &operator>>=(const BitBoard &rhs);
BitBoard operator~();
operator void *() const {
return (void *) mBoard;
}
bool operator!() const;
bool operator&&(const BitBoard &rhs) const;
bool operator||(const BitBoard &rhs) const;
// Relational operators
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 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);
BitBoard &operator-=(const BitBoard &rhs);
BitBoard &operator*=(const BitBoard &rhs);
BitBoard &operator/=(const BitBoard &rhs);
BitBoard &operator%=(const BitBoard &rhs);
// Logical operators
constexpr bool operator!() const {
return !mBoard;
}
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 bool operator&&(const bool &lhs, const BitBoard &rhs);
private:
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);
BitBoard operator|(const BitBoard &lhs, const BitBoard &rhs);
BitBoard operator&(const BitBoard &lhs, const BitBoard &rhs);
BitBoard operator<<(const BitBoard &lhs, const BitBoard &rhs);
BitBoard operator>>(const BitBoard &lhs, const BitBoard &rhs);
BitBoard operator+(const BitBoard &lhs, const BitBoard &rhs);
BitBoard operator-(const BitBoard &lhs, const BitBoard &rhs);
//BitBoard operator*(const BitBoard &lhs, const BitBoard &rhs);
//BitBoard operator/(const BitBoard &lhs, const BitBoard &rhs);
BitBoard operator%(const BitBoard &lhs, const BitBoard &rhs);
// Arithmetic 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;
}
#endif //CHESS_ENGINE_BITBOARD_HPP