From e4045c312b5b18d15cb28291b55634d0f10915a2 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Fri, 29 Apr 2016 18:40:46 +0200 Subject: [PATCH] Unify set_norms() --- src/syzygy/tbprobe.cpp | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/src/syzygy/tbprobe.cpp b/src/syzygy/tbprobe.cpp index 518a812a..b2aa04d0 100644 --- a/src/syzygy/tbprobe.cpp +++ b/src/syzygy/tbprobe.cpp @@ -799,20 +799,7 @@ uint64_t set_factors(T& p, int num, int order, int order2, File f) } template -void set_norms(T& p, int num, uint8_t [], typename T::Piece = 0) -{ - for (int i = 0; i < num; ++i) - p.norm[i] = 0; - - p.norm[0] = p.hasUniquePieces ? 3 : 2; - - for (int i = p.norm[0]; i < num; i += p.norm[i]) - for (int j = i; j < num && p.pieces[j] == p.pieces[i]; ++j) - ++p.norm[i]; -} - -template -void set_norms(T& p, int num, uint8_t pawns[], typename T::Pawn = 0) +void set_norms(T& p, int num, const uint8_t pawns[]) { for (int i = 0; i < num; ++i) p.norm[i] = 0; @@ -948,8 +935,10 @@ void WDLEntry::do_init(T& e, uint8_t* data) item(e, 1, f).pieces[i] = *data >> 4; } + uint8_t pn[] = { uint8_t(piece[0].hasUniquePieces ? 3 : 2), 0 }; + for (int i = 0; i < 2; ++i) { - set_norms(item(e, i, f), num, pawn.pawns); + set_norms(item(e, i, f), num, has_pawns ? pawn.pawns : pn); tb_size[2 * f + i] = set_factors(item(e, i, f), num, order1[i], order2[i], f); } } @@ -1020,7 +1009,9 @@ void DTZEntry::do_init(T& e, uint8_t* data) for (int i = 0; i < num; ++i, ++data) item(e, f).pieces[i] = *data & 0xF; - set_norms(item(e, f), num, pawn.pawns); + uint8_t pn[] = { uint8_t(piece.hasUniquePieces ? 3 : 2), 0 }; + + set_norms(item(e, f), num, has_pawns ? pawn.pawns : pn); tb_size[f] = set_factors(item(e, f), num, order1, order2, f); }