65 lines
2.1 KiB
C++
65 lines
2.1 KiB
C++
#ifndef CHESS_ENGINE_BITBOARD_HPP
|
|
#define CHESS_ENGINE_BITBOARD_HPP
|
|
|
|
#include <cstdint>
|
|
#include <ostream>
|
|
#include "CastlingRights.hpp"
|
|
|
|
class BitBoard final {
|
|
public:
|
|
using U64 = uint64_t;
|
|
|
|
BitBoard(uint64_t v = 0);
|
|
|
|
// explicit operator uint64_t() const;
|
|
explicit operator bool() const;
|
|
explicit operator unsigned long long() const;
|
|
operator void*() 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;
|
|
bool operator>=(const BitBoard &rhs) const;
|
|
|
|
// 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~();
|
|
|
|
bool operator!() const;
|
|
bool operator&&(const BitBoard &rhs) const;
|
|
bool operator||(const BitBoard &rhs) const;
|
|
|
|
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);
|
|
|
|
friend std::ostream &operator<<(std::ostream &os, const BitBoard &board);
|
|
// friend bool operator&&(const bool &lhs, const BitBoard &rhs);
|
|
|
|
private:
|
|
U64 mBoard = {};
|
|
|
|
};
|
|
|
|
|
|
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);
|
|
|
|
#endif //CHESS_ENGINE_BITBOARD_HPP
|