Small touches to bitbase.cpp
authorMarco Costalba <mcostalba@gmail.com>
Sat, 14 Sep 2013 08:37:28 +0000 (10:37 +0200)
committerMarco Costalba <mcostalba@gmail.com>
Sat, 14 Sep 2013 09:19:12 +0000 (11:19 +0200)
Inspired by Lucas's code:

https://github.com/lucasart/chess/blob/master/src/kpk.cc

No functional change.

src/bitbase.cpp

index 570a9771419099aec3bc929b469a1b0b598e61dd..15a797d962514219c6dce9c8b5c5404c132d7b0e 100644 (file)
@@ -93,8 +93,7 @@ void Bitbases::init_kpk() {
   // changed to either wins or draws (15 cycles needed).
   while (repeat)
       for (repeat = idx = 0; idx < IndexMax; idx++)
-          if (db[idx] == UNKNOWN && db[idx].classify(db) != UNKNOWN)
-              repeat = 1;
+          repeat |= (db[idx] == UNKNOWN && db[idx].classify(db) != UNKNOWN);
 
   // Map 32 results into one KPKBitbase[] entry
   for (idx = 0; idx < IndexMax; idx++)
@@ -113,8 +112,7 @@ namespace {
     psq  = File  ((idx >> 13) & 0x03) | Rank(RANK_7 - (idx >> 15));
 
     // Check if two pieces are on the same square or if a king can be captured
-    if (   wksq == psq || wksq == bksq || bksq == psq
-        || (StepAttacksBB[KING][wksq] & bksq)
+    if (   square_distance(wksq, bksq) <= 1 || wksq == psq || bksq == psq
         || (us == WHITE && (StepAttacksBB[PAWN][psq] & bksq)))
         return res = INVALID;
 
@@ -162,7 +160,7 @@ namespace {
         Square s = psq + DELTA_N;
         r |= db[index(BLACK, bksq, wksq, s)]; // Single push
 
-        if (rank_of(s) == RANK_3 && s != wksq && s != bksq)
+        if (rank_of(psq) == RANK_2 && s != wksq && s != bksq)
             r |= db[index(BLACK, bksq, wksq, s + DELTA_N)]; // Double push
     }