- for (auto& m : *this)
- if (Type == CAPTURES)
- m.value = PieceValue[MG][pos.piece_on(to_sq(m))]
- + Value((*captureHistory)[pos.moved_piece(m)][to_sq(m)][type_of(pos.piece_on(to_sq(m)))]);
-
- else if (Type == QUIETS)
- m.value = (*mainHistory)[pos.side_to_move()][from_to(m)]
- + (*contHistory[0])[pos.moved_piece(m)][to_sq(m)]
- + (*contHistory[1])[pos.moved_piece(m)][to_sq(m)]
- + (*contHistory[3])[pos.moved_piece(m)][to_sq(m)];
+ [[maybe_unused]] Bitboard threatened, threatenedByPawn, threatenedByMinor, threatenedByRook;
+ if constexpr (Type == QUIETS)
+ {
+ Color us = pos.side_to_move();
+ // squares threatened by pawns
+ threatenedByPawn = pos.attacks_by<PAWN>(~us);
+ // squares threatened by minors or pawns
+ threatenedByMinor = pos.attacks_by<KNIGHT>(~us) | pos.attacks_by<BISHOP>(~us) | threatenedByPawn;
+ // squares threatened by rooks, minors or pawns
+ threatenedByRook = pos.attacks_by<ROOK>(~us) | threatenedByMinor;
+
+ // pieces threatened by pieces of lesser material value
+ threatened = (pos.pieces(us, QUEEN) & threatenedByRook)
+ | (pos.pieces(us, ROOK) & threatenedByMinor)
+ | (pos.pieces(us, KNIGHT, BISHOP) & threatenedByPawn);
+ }