#ifndef CHESS_ENGINE_BITBOARD_HPP #define CHESS_ENGINE_BITBOARD_HPP #include #include #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