X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fbitbase.cpp;h=bef2dc49e2f1a91816dbacfd55ebcf975d312276;hp=7bc4a65c25900324ecbed98f7db7ab1598d830f2;hb=8352977b91d9246618c7273d59400a4a05a32e2a;hpb=75dfdeac119d0ce71c36ba5ab4f33318f589b158 diff --git a/src/bitbase.cpp b/src/bitbase.cpp index 7bc4a65c..bef2dc49 100644 --- a/src/bitbase.cpp +++ b/src/bitbase.cpp @@ -19,8 +19,8 @@ */ #include -#include #include +#include #include "bitboard.h" #include "types.h" @@ -31,8 +31,7 @@ namespace { // Positions with the pawn on files E to H will be mirrored before probing. constexpr unsigned MAX_INDEX = 2*24*64*64; // stm * psq * wksq * bksq = 196608 - // Each uint32_t stores results of 32 positions, one per bit - uint32_t KPKBitbase[MAX_INDEX / 32]; + std::bitset KPKBitbase; // A KPK bitbase index is an integer in [0, IndexMax] range // @@ -74,8 +73,7 @@ bool Bitbases::probe(Square wksq, Square wpsq, Square bksq, Color stm) { assert(file_of(wpsq) <= FILE_D); - unsigned idx = index(stm, bksq, wksq, wpsq); - return KPKBitbase[idx / 32] & (1 << (idx & 0x1F)); + return KPKBitbase[index(stm, bksq, wksq, wpsq)]; } @@ -94,10 +92,10 @@ void Bitbases::init() { for (repeat = idx = 0; idx < MAX_INDEX; ++idx) repeat |= (db[idx] == UNKNOWN && db[idx].classify(db) != UNKNOWN); - // Map 32 results into one KPKBitbase[] entry + // Fill the bitbase with the decisive results for (idx = 0; idx < MAX_INDEX; ++idx) if (db[idx] == WIN) - KPKBitbase[idx / 32] |= 1 << (idx & 0x1F); + KPKBitbase.set(idx); }