Speedup for variants with commoners
authorFabian Fichter <ianfab@users.noreply.github.com>
Tue, 9 Feb 2021 20:39:59 +0000 (21:39 +0100)
committerFabian Fichter <ianfab@users.noreply.github.com>
Tue, 9 Feb 2021 20:39:59 +0000 (21:39 +0100)
No functional change.

src/position.cpp
src/variant.h

index 59a289d..e23bda2 100644 (file)
@@ -790,13 +790,13 @@ Bitboard Position::slider_blockers(Bitboard sliders, Square s, Bitboard& pinners
 Bitboard Position::attackers_to(Square s, Bitboard occupied, Color c, Bitboard janggiCannons) const {
 
   // Use a faster version for variants with standard chess pieces
-  if (!var->isFairy && !var->isRestricted)
+  if (!var->hasFairy && !var->isRestricted)
   {
       return  (pawn_attacks_bb(~c, s)          & pieces(c, PAWN))
             | (attacks_bb<KNIGHT>(s)           & pieces(c, KNIGHT))
             | (attacks_bb<  ROOK>(s, occupied) & pieces(c, ROOK, QUEEN))
             | (attacks_bb<BISHOP>(s, occupied) & pieces(c, BISHOP, QUEEN))
-            | (attacks_bb<KING>(s)             & pieces(c, KING));
+            | (attacks_bb<KING>(s)             & pieces(c, KING, COMMONER));
   }
 
   Bitboard b = 0;
index 13a8707..30531cf 100644 (file)
@@ -129,7 +129,7 @@ struct Variant {
   CountingRule countingRule = NO_COUNTING;
 
   // Derived properties
-  bool isFairy = true;
+  bool hasFairy = true;
   bool isRestricted = true;
 
   void add_piece(PieceType pt, char c, char c2 = ' ') {
@@ -156,7 +156,7 @@ struct Variant {
 
   // Pre-calculate derived properties
   Variant* conclude() {
-      isFairy = std::any_of(pieceTypes.begin(), pieceTypes.end(), [](PieceType pt) { return pt >= FAIRY_PIECES && pt < KING; });
+      hasFairy = std::any_of(pieceTypes.begin(), pieceTypes.end(), [this](PieceType pt) { return pt >= FAIRY_PIECES && pt != COMMONER && !(pt == KING && kingType == KING); });
       isRestricted = std::any_of(pieceTypes.begin(), pieceTypes.end(),
                                  [this](PieceType pt) {
                                      return mobilityRegion[WHITE][pt] || mobilityRegion[BLACK][pt];