#include <algorithm>
#include <cassert>
-#include <iostream>
#include "book.h"
#include "misc.h"
Key PolyGlotRandoms[781];
struct {
Key psq[12][64]; // [piece][square]
- Key castle[4]; // [castle right]
+ Key castling[4]; // [castling flag]
Key enpassant[8]; // [file]
Key turn;
} Zobrist;
key ^= PG.Zobrist.psq[2 * (type_of(p) - 1) + (color_of(p) == WHITE)][s];
}
- b = pos.can_castle(ALL_CASTLES);
+ b = pos.can_castle(ANY_CASTLING);
while (b)
- key ^= PG.Zobrist.castle[pop_lsb(&b)];
+ key ^= PG.Zobrist.castling[pop_lsb(&b)];
if (pos.ep_square() != SQ_NONE)
key ^= PG.Zobrist.enpassant[file_of(pos.ep_square())];
template<typename T> PolyglotBook& PolyglotBook::operator>>(T& n) {
n = 0;
- for (size_t i = 0; i < sizeof(T); i++)
+ for (size_t i = 0; i < sizeof(T); ++i)
n = T((n << 8) + ifstream::get());
return *this;
// Choose book move according to its score. If a move has a very
// high score it has higher probability to be choosen than a move
// with lower score. Note that first entry is always chosen.
- if ( (sum && rkiss.rand<unsigned>() % sum < e.count)
+ if ( (!pickBest && sum && rkiss.rand<unsigned>() % sum < e.count)
|| (pickBest && e.count == best))
move = Move(e.move);
}
move = make<PROMOTION>(from_sq(move), to_sq(move), PieceType(pt + 1));
// Add 'special move' flags and verify it is legal
- for (MoveList<LEGAL> ml(pos); !ml.end(); ++ml)
- if (move == (ml.move() ^ type_of(ml.move())))
- return ml.move();
+ for (MoveList<LEGAL> it(pos); *it; ++it)
+ if (move == (*it ^ type_of(*it)))
+ return *it;
return MOVE_NONE;
}