bool CBitbases::probe(eval_t& eval, const CBoard& board) { if (loaded()) { int32 player = (board.getSide() == eBlack ? _BLACK : _WHITE); int32 piece[MAX_PIECES] = { _EMPTY, _EMPTY, _EMPTY, _EMPTY, _EMPTY, _EMPTY, _EMPTY, _EMPTY, _EMPTY }; int32 square[MAX_PIECES] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; int32 count = 0; bb_t pieces = board.getOccupBits(); while (pieces) { EField from = popFirstBit(pieces); EPiece type = board.getPiece(from); square[count] = from; switch (type) { case eW_P: piece[count] = _WPAWN; break; case eW_N: piece[count] = _WKNIGHT; break; case eW_B: piece[count] = _WBISHOP; break; case eW_R: piece[count] = _WROOK; break; case eW_Q: piece[count] = _WQUEEN; break; case eW_K: piece[count] = _WKING; break; case eB_P: piece[count] = _BPAWN; break; case eB_N: piece[count] = _BKNIGHT; break; case eB_B: piece[count] = _BBISHOP; break; case eB_R: piece[count] = _BROOK; break; case eB_Q: piece[count] = _BQUEEN; break; case eB_K: piece[count] = _BKING; break; case eNP: break; } ++count; } eval_t eval_eg = m_lib.probe_egbb(player, piece, square); if (eval_eg != NOTFOUND) { eval = eval_eg; ++m_hits; return(true); } } return(false); }