]> git.sesse.net Git - stockfish/blobdiff - src/bitboard.cpp
Better document square flipping helpers
[stockfish] / src / bitboard.cpp
index 64cba6b5fc301322299a0eb3cf0d8c5102b07867..41ce2955c147f27b2960130d0c2ec2ffa8c7d5f7 100644 (file)
@@ -58,6 +58,7 @@ namespace {
   CACHE_LINE_ALIGNMENT
 
   int BSFTable[64];
+  int MS1BTable[256];
   Bitboard RTable[0x19000]; // Storage space for rook attacks
   Bitboard BTable[0x1480];  // Storage space for bishop attacks
 
@@ -67,24 +68,6 @@ namespace {
                    Bitboard masks[], unsigned shifts[], Square deltas[], Fn index);
 }
 
-
-/// print_bitboard() prints a bitboard in an easily readable format to the
-/// standard output. This is sometimes useful for debugging.
-
-void print_bitboard(Bitboard b) {
-
-  for (Rank r = RANK_8; r >= RANK_1; r--)
-  {
-      std::cout << "+---+---+---+---+---+---+---+---+" << '\n';
-      for (File f = FILE_A; f <= FILE_H; f++)
-          std::cout << "| " << ((b & make_square(f, r)) ? "X " : "  ");
-
-      std::cout << "|\n";
-  }
-  std::cout << "+---+---+---+---+---+---+---+---+" << std::endl;
-}
-
-
 /// first_1() finds the least significant nonzero bit in a nonzero bitboard.
 /// pop_1st_bit() finds and clears the least significant nonzero bit in a
 /// nonzero bitboard.
@@ -160,15 +143,38 @@ Square last_1(Bitboard b) {
       result += 8;
   }
 
-  return Square(result + BitCount8Bit[b]);
+  return Square(result + MS1BTable[b]);
 }
 
 #endif // !defined(USE_BSFQ)
 
-/// bitboards_init() initializes various bitboard arrays. It is called during
+
+/// Bitboards::print() prints a bitboard in an easily readable format to the
+/// standard output. This is sometimes useful for debugging.
+
+void Bitboards::print(Bitboard b) {
+
+  for (Rank rank = RANK_8; rank >= RANK_1; rank--)
+  {
+      std::cout << "+---+---+---+---+---+---+---+---+" << '\n';
+
+      for (File file = FILE_A; file <= FILE_H; file++)
+          std::cout << "| " << ((b & make_square(file, rank)) ? "X " : "  ");
+
+      std::cout << "|\n";
+  }
+  std::cout << "+---+---+---+---+---+---+---+---+" << std::endl;
+}
+
+
+/// Bitboards::init() initializes various bitboard arrays. It is called during
 /// program initialization.
 
-void bitboards_init() {
+void Bitboards::init() {
+
+  for (int k = 0, i = 0; i < 8; i++)
+      while (k < (2 << i))
+          MS1BTable[k++] = i;
 
   for (Bitboard b = 0; b < 256; b++)
       BitCount8Bit[b] = (uint8_t)popcount<Max15>(b);
@@ -230,7 +236,7 @@ void bitboards_init() {
               {
                   Square to = s + Square(c == WHITE ? steps[pt][k] : -steps[pt][k]);
 
-                  if (square_is_ok(to) && square_distance(s, to) < 3)
+                  if (is_ok(to) && square_distance(s, to) < 3)
                       StepAttacksBB[make_piece(c, pt)][s] |= to;
               }
 
@@ -267,7 +273,7 @@ namespace {
 
     for (int i = 0; i < 4; i++)
         for (Square s = sq + deltas[i];
-             square_is_ok(s) && square_distance(s, s - deltas[i]) == 1;
+             is_ok(s) && square_distance(s, s - deltas[i]) == 1;
              s += deltas[i])
         {
             attack |= s;