this code to other chess engines.
*/
+#define NOMINMAX
+
#include <algorithm>
#include "../position.h"
#include "../movegen.h"
#include "../bitboard.h"
#include "../search.h"
-#include "../bitcount.h"
#include "tbprobe.h"
#include "tbcore.h"
color = !mirror ? WHITE : BLACK;
for (pt = KING; pt >= PAWN; --pt)
- for (i = popcount<Max15>(pos.pieces(color, pt)); i > 0; i--)
+ for (i = popcount(pos.pieces(color, pt)); i > 0; i--)
*str++ = pchr[6 - pt];
*str++ = 'v';
color = ~color;
for (pt = KING; pt >= PAWN; --pt)
- for (i = popcount<Max15>(pos.pieces(color, pt)); i > 0; i--)
+ for (i = popcount(pos.pieces(color, pt)); i > 0; i--)
*str++ = pchr[6 - pt];
*str++ = 0;
}
color = !mirror ? WHITE : BLACK;
for (pt = PAWN; pt <= KING; ++pt)
- for (i = popcount<Max15>(pos.pieces(color, pt)); i > 0; i--)
+ for (i = popcount(pos.pieces(color, pt)); i > 0; i--)
key ^= Zobrist::psq[WHITE][pt][i - 1];
color = ~color;
for (pt = PAWN; pt <= KING; ++pt)
- for (i = popcount<Max15>(pos.pieces(color, pt)); i > 0; i--)
+ for (i = popcount(pos.pieces(color, pt)); i > 0; i--)
key ^= Zobrist::psq[BLACK][pt][i - 1];
return key;
if (!pos.capture(capture) || type_of(capture) == ENPASSANT
|| !pos.legal(capture, ci.pinned))
continue;
- pos.do_move(capture, st, ci, pos.gives_check(capture, ci));
+ pos.do_move(capture, st, pos.gives_check(capture, ci));
v = -probe_ab(pos, -beta, -alpha, success);
pos.undo_move(capture);
if (*success == 0) return 0;
if (type_of(capture) != ENPASSANT
|| !pos.legal(capture, ci.pinned))
continue;
- pos.do_move(capture, st, ci, pos.gives_check(capture, ci));
+ pos.do_move(capture, st, pos.gives_check(capture, ci));
int v0 = -probe_ab(pos, -2, 2, success);
pos.undo_move(capture);
if (*success == 0) return 0;
if (type_of(pos.moved_piece(move)) != PAWN || pos.capture(move)
|| !pos.legal(move, ci.pinned))
continue;
- pos.do_move(move, st, ci, pos.gives_check(move, ci));
- int v = -probe_ab(pos, -2, -wdl + 1, success);
+ pos.do_move(move, st, pos.gives_check(move, ci));
+ int v = -Tablebases::probe_wdl(pos, success);
pos.undo_move(move);
if (*success == 0) return 0;
if (v == wdl)
if (pos.capture(move) || type_of(pos.moved_piece(move)) == PAWN
|| !pos.legal(move, ci.pinned))
continue;
- pos.do_move(move, st, ci, pos.gives_check(move, ci));
+ pos.do_move(move, st, pos.gives_check(move, ci));
int v = -Tablebases::probe_dtz(pos, success);
pos.undo_move(move);
if (*success == 0) return 0;
Move move = moves->move;
if (!pos.legal(move, ci.pinned))
continue;
- pos.do_move(move, st, ci, pos.gives_check(move, ci));
+ pos.do_move(move, st, pos.gives_check(move, ci));
if (st.rule50 == 0) {
if (wdl == -2) v = -1;
else {
if (type_of(capture) != ENPASSANT
|| !pos.legal(capture, ci.pinned))
continue;
- pos.do_move(capture, st, ci, pos.gives_check(capture, ci));
+ pos.do_move(capture, st, pos.gives_check(capture, ci));
int v0 = -probe_ab(pos, -2, 2, success);
pos.undo_move(capture);
if (*success == 0) return 0;
if (v1 >= 0)
v = v1;
} else if (v < 0) {
- if (v1 >= 0 || v1 < 100)
+ if (v1 >= 0 || v1 < -100)
v = v1;
} else if (v > 100) {
if (v1 > 0)
//
// A return value false indicates that not all probes were successful and that
// no moves were filtered out.
-bool Tablebases::root_probe(Position& pos, Search::RootMoveVector& rootMoves, Value& score)
+bool Tablebases::root_probe(Position& pos, Search::RootMoves& rootMoves, Value& score)
{
int success;
// Probe each move.
for (size_t i = 0; i < rootMoves.size(); i++) {
Move move = rootMoves[i].pv[0];
- pos.do_move(move, st, ci, pos.gives_check(move, ci));
+ pos.do_move(move, st, pos.gives_check(move, ci));
int v = 0;
if (pos.checkers() && dtz > 0) {
ExtMove s[192];
//
// A return value false indicates that not all probes were successful and that
// no moves were filtered out.
-bool Tablebases::root_probe_wdl(Position& pos, Search::RootMoveVector& rootMoves, Value& score)
+bool Tablebases::root_probe_wdl(Position& pos, Search::RootMoves& rootMoves, Value& score)
{
int success;
// Probe each move.
for (size_t i = 0; i < rootMoves.size(); i++) {
Move move = rootMoves[i].pv[0];
- pos.do_move(move, st, ci, pos.gives_check(move, ci));
+ pos.do_move(move, st, pos.gives_check(move, ci));
int v = -Tablebases::probe_wdl(pos, &success);
pos.undo_move(move);
if (!success) return false;