19 :
std::pair<uint64_t,uint32_t>(src)
23 size_t size()
const {
return 2; }
24 uint64_t
operator[](
size_t i)
const {
return i ? first : second; }
42 board64 = board32 = piece_stand = 0;
54 return std::make_pair(board64, board32);
59 uint64_t
hash64()
const {
return board64 + pieceStand64(); }
61 return Stand_Hash.toUint64(pieceStand());
94 void changeTurn() { board64 ^=
static_cast<uint64_t
>(1); }
97 board64 &= ~static_cast<uint64_t>(1);
111 size_t size()
const {
return 2; }
112 uint64_t
operator[](
size_t i)
const {
return i ? board64 : board32; }
120 int major_pawn = stand.
get(
PAWN)*9
124 return HashMajorPawn[major_pawn] + HashPiece[pieces];
161 void dumpContents(std::ostream& os)
const;
162 void dumpContentsCerr()
const;
163 static const HashKey readFromDump(
const std::string&);
164 static const HashKey readFromDump(std::istream&);
190 template <
typename T>
struct hash;
201 return h.signature();
void setPieceStand(const PieceStand &p)
uint64_t operator[](size_t i) const
unsigned long operator()(const osl::HashKey &h) const
std::ostream & operator<<(std::ostream &os, const HashKey &h)
bool operator<(const HashKey128 &l, const HashKey128 &r)
set等で使うためのみの不等号.
uint64_t pieceStand64() const
const BoardKey96 boardKey() const
CArray< uint64_t, 19 *3 *3 > HashMajorPawn
bool operator==(const HashKey128 &l, const HashKey128 &r)
uint64_t toUint64(PieceStand stand) const
unsigned int get(Ptype type) const
static const CArray2d< HashKey128Layout, Square::SIZE, PTYPEO_SIZE > key
unsigned long operator()(const osl::BoardKey &h) const
const PieceStand blackStand() const
bool isValidPtypeO(int ptypeO)
uint64_t operator[](size_t i) const
uint32_t signature() const
const PieceStand pieceStand() const
void subAtmostOnePiece(PieceStand const &ps)
uint64_t hash64() const
持駒も含んだ64bitのハッシュ
BoardKey96(const std::pair< uint64_t, uint32_t > &src)
HashKey128 & operator+=(const HashKey128 &r)
constexpr int playerToIndex(Player player)
static const StandHash Stand_Hash
unsigned int index() const
unsigned int getFlags() const
static void addHashKey(HashKey &hk, Square sq, PtypeO ptypeo)
CArray< uint64_t, 5 *5 *5 *5 > HashPiece
bool isSameBoard(const HashKey128 &key) const
駒台の情報を除いて同じかどうか.
uint64_t boardKey64() const
手番を含んだ盤面の状態のハッシュ値を保持するためのクラス.
PtypeO
Player + Ptype [-15, 15] PtypeO の O は Owner の O.
HashKey128(uint64_t h0, uint32_t h1, uint32_t s)
bool operator!=(const HashKey128 &l, const HashKey128 &r)
HashKey128 & operator-=(const HashKey128 &r)
uint64_t signature() const
bool isPlayerOfTurn(Player p) const
HashKey128(const HashKey128Layout &src)
static void subHashKey(HashKey &hk, Square sq, PtypeO ptypeo)
void addAtmostOnePiece(PieceStand const &ps)
pieceStand同士の加算,減算.