181 lines
3.7 KiB
C++
181 lines
3.7 KiB
C++
#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--) {
|
|
int rank = i * 8;
|
|
for (int j = 0; j < 8; j++) {
|
|
// Get the piece for this index. Assume it exists.
|
|
// Print piece, otherwise '.';
|
|
if (board.mBoard & (1ULL << (rank + j))) {
|
|
os << 1;
|
|
} else {
|
|
os << '.';
|
|
}
|
|
|
|
os << ' ';
|
|
}
|
|
os << '\n';
|
|
}
|
|
|
|
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;
|
|
}
|