-
-
-/// PawnInfo::updateShelter calculates and caches king shelter. It is called
-/// only when king square changes, about 20% of total get_king_shelter() calls.
-int PawnInfo::updateShelter(const Position& pos, Color c, Square ksq) {
-
- Bitboard pawns = pos.pieces(PAWN, c) & this_and_neighboring_files_bb(ksq);
- unsigned shelter = 0;
- unsigned r = ksq & (7 << 3);
-
- for (int i = 1, k = (c ? -8 : 8); i < 4; i++)
- {
- r += k;
- shelter += BitCount8Bit[(pawns >> r) & 0xFF] * (128 >> i);
- }
- kingSquares[c] = ksq;
- kingShelters[c] = shelter;
- return shelter;
-}