#if !defined(POSITION_H_INCLUDED)
#define POSITION_H_INCLUDED
+#include <cassert>
+
#include "bitboard.h"
#include "move.h"
#include "types.h"
// Information about attacks to or from a given square
Bitboard attackers_to(Square s) const;
+ Bitboard attackers_to(Square s, Bitboard occ) const;
Bitboard attacks_from(Piece p, Square s) const;
static Bitboard attacks_from(Piece p, Square s, Bitboard occ);
template<PieceType> Bitboard attacks_from(Square s) const;
// Properties of moves
bool pl_move_is_legal(Move m, Bitboard pinned) const;
- bool pl_move_is_evasion(Move m, Bitboard pinned) const;
- bool move_is_legal(const Move m) const;
- bool move_is_legal(const Move m, Bitboard pinned) const;
+ bool move_is_pl(const Move m) const;
bool move_gives_check(Move m) const;
bool move_gives_check(Move m, const CheckInfo& ci) const;
bool move_is_capture(Move m) const;
- bool move_is_capture_or_promotion(Move m) const;
bool move_is_passed_pawn_push(Move m) const;
bool move_attacks_square(Move m, Square s) const;
void undo_null_move();
// Static exchange evaluation
- int see(Square from, Square to) const;
int see(Move m) const;
int see_sign(Move m) const;
void do_allow_oo(Color c);
void do_allow_ooo(Color c);
bool set_castling_rights(char token);
+ bool move_is_pl_slow(const Move m) const;
// Helper functions for doing and undoing moves
void do_capture_move(Key& key, PieceType capture, Color them, Square to, bool ep);
inline bool Position::move_is_capture(Move m) const {
- // Move must not be MOVE_NONE !
- return (m & (3 << 15)) ? !move_is_castle(m) : !square_is_empty(move_to(m));
-}
-
-inline bool Position::move_is_capture_or_promotion(Move m) const {
-
- // Move must not be MOVE_NONE !
- return (m & (0x1F << 12)) ? !move_is_castle(m) : !square_is_empty(move_to(m));
+ assert (m != MOVE_NONE && m != MOVE_NULL);
+ return !move_is_special(m) ? !square_is_empty(move_to(m)) : move_is_ep(m);
}
inline PieceType Position::captured_piece_type() const {