From 1a881036337fc5ae21ff8e5b2c586aa962747347 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sat, 14 May 2016 12:09:00 +0200 Subject: [PATCH] Streamline calc_symlen() --- src/syzygy/tbprobe.cpp | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/syzygy/tbprobe.cpp b/src/syzygy/tbprobe.cpp index 8ac96c64..4bff8e57 100644 --- a/src/syzygy/tbprobe.cpp +++ b/src/syzygy/tbprobe.cpp @@ -926,25 +926,24 @@ void set_norms(T* p, int num, const uint8_t pawns[]) ++p->norm[i]; } -void calc_symlen(PairsData* d, size_t s, std::vector& tmp) +uint8_t set_symlen(PairsData* d, size_t s, std::vector& visited) { + visited[s] = true; // We can set now because tree is acyclic int sr = d->btree[s].get(); if (sr == 0xFFF) - d->symlen[s] = 0; + return 0; else { int sl = d->btree[s].get(); - if (!tmp[sl]) - calc_symlen(d, sl, tmp); + if (!visited[sl]) + d->symlen[sl] = set_symlen(d, sl, visited); - if (!tmp[sr]) - calc_symlen(d, sr, tmp); + if (!visited[sr]) + d->symlen[sr] = set_symlen(d, sr, visited); - d->symlen[s] = d->symlen[sl] + d->symlen[sr] + 1; + return d->symlen[sl] + d->symlen[sr] + 1; } - - tmp[s] = 1; } uint8_t* set_sizes(PairsData* d, uint8_t* data, uint64_t tb_size) @@ -982,11 +981,11 @@ uint8_t* set_sizes(PairsData* d, uint8_t* data, uint64_t tb_size) d->symlen.resize(number(data)); data += sizeof(uint16_t); d->btree = (LR*)data; - std::vector tmp(d->symlen.size()); + std::vector visited(d->symlen.size()); - for (size_t i = 0; i < d->symlen.size(); ++i) - if (!tmp[i]) - calc_symlen(d, i, tmp); + for (size_t sym = 0; sym < d->symlen.size(); ++sym) + if (!visited[sym]) + d->symlen[sym] = set_symlen(d, sym, visited); return data + 3 * d->symlen.size() + (d->symlen.size() & 1); }