]> git.sesse.net Git - stockfish/blobdiff - src/position.cpp
Use generate_moves() in san.cpp
[stockfish] / src / position.cpp
index ded3dd172d735ac8a8870305d6b5bddcbab8222e..2d1e476391c19db02f1f26cdcc5c25a7a45ac3c0 100644 (file)
@@ -101,20 +101,23 @@ namespace {
       operator[]('B') = WB; operator[]('b') = BB;
       operator[]('N') = WN; operator[]('n') = BN;
       operator[]('P') = WP; operator[]('p') = BP;
-      operator[](' ') = PIECE_NONE; operator[]('.') = PIECE_NONE_DARK_SQ;
+      operator[](' ') = PIECE_NONE;
+      operator[]('.') = PIECE_NONE_DARK_SQ;
     }
 
     char from_piece(Piece p) const {
 
-        std::map<char, Piece>::const_iterator it;
-        for (it = begin(); it != end(); ++it)
-            if (it->second == p)
-                return it->first;
+      std::map<char, Piece>::const_iterator it;
+      for (it = begin(); it != end(); ++it)
+          if (it->second == p)
+              return it->first;
 
-        assert(false);
-        return 0;
+      assert(false);
+      return 0;
     }
-  } pieceLetters;
+  };
+
+  PieceLetters pieceLetters;
 }
 
 
@@ -521,16 +524,24 @@ Bitboard Position::attacks_from(Piece p, Square s) const {
 
   switch (p)
   {
-  case WP:          return attacks_from<PAWN>(s, WHITE);
-  case BP:          return attacks_from<PAWN>(s, BLACK);
-  case WN: case BN: return attacks_from<KNIGHT>(s);
   case WB: case BB: return attacks_from<BISHOP>(s);
   case WR: case BR: return attacks_from<ROOK>(s);
   case WQ: case BQ: return attacks_from<QUEEN>(s);
-  case WK: case BK: return attacks_from<KING>(s);
-  default: break;
+  default: return StepAttackBB[p][s];
+  }
+}
+
+Bitboard Position::attacks_from(Piece p, Square s, Bitboard occ) {
+
+  assert(square_is_ok(s));
+
+  switch (p)
+  {
+  case WB: case BB: return bishop_attacks_bb(s, occ);
+  case WR: case BR: return rook_attacks_bb(s, occ);
+  case WQ: case BQ: return bishop_attacks_bb(s, occ) | rook_attacks_bb(s, occ);
+  default: return StepAttackBB[p][s];
   }
-  return false;
 }