1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-07-11 19:49:14 +00:00

Cache king shelter info in pawns structure

It does not change often and is not so fast
to calculate.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Marco Costalba 2009-05-16 16:15:05 +02:00
parent a75aa6035b
commit f83b899f39
2 changed files with 26 additions and 4 deletions

View file

@ -709,11 +709,19 @@ namespace {
// King shelter
if (relative_rank(us, s) <= RANK_4)
{
// Shelter cache lookup
shelter = ei.pi->kingShelter(us, s);
if (shelter == -1)
{
shelter = 0;
Bitboard pawns = p.pawns(us) & this_and_neighboring_files_bb(s);
Rank r = square_rank(s);
for (int i = 1; i < 4; i++)
shelter += count_1s_8bit(shiftRowsDown(pawns, r+i*sign)) * (128>>i);
// Cache shelter value in pawn info
ei.pi->setKingShelter(us, s, shelter);
}
ei.mgValue += sign * Value(shelter);
}

View file

@ -53,12 +53,16 @@ public:
int file_is_half_open(Color c, File f) const;
int has_open_file_to_left(Color c, File f) const;
int has_open_file_to_right(Color c, File f) const;
int kingShelter(Color c, Square ksq) const;
void setKingShelter(Color c, Square ksq, int value);
private:
void clear();
Key key;
Bitboard passedPawns;
Square kingSquares[2];
int16_t kingShelters[2];
int16_t mgValue, egValue;
int16_t ksStormValue[2], qsStormValue[2];
uint8_t halfOpenFiles[2];
@ -120,6 +124,15 @@ inline int PawnInfo::has_open_file_to_right(Color c, File f) const {
return halfOpenFiles[c] & ~((1 << int(f+1)) - 1);
}
inline int PawnInfo::kingShelter(Color c, Square ksq) const {
return (kingSquares[c] == ksq ? kingShelters[c] : -1);
}
inline void PawnInfo::setKingShelter(Color c, Square ksq, int value) {
kingSquares[c] = ksq;
kingShelters[c] = (int16_t)value;
}
inline void PawnInfo::clear() {
passedPawns = EmptyBoardBB;
@ -127,6 +140,7 @@ inline void PawnInfo::clear() {
ksStormValue[WHITE] = ksStormValue[BLACK] = 0;
qsStormValue[WHITE] = qsStormValue[BLACK] = 0;
halfOpenFiles[WHITE] = halfOpenFiles[BLACK] = 0xFF;
kingSquares[WHITE] = kingSquares[BLACK] = SQ_NONE;
}