X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fposition.h;h=06ef6ab1f324868d11c01f727098e6728ac23a37;hb=018022b8666200dacd3533e215e2de41f93df9da;hp=af1e981cb3370af138d930d290b2d6d41e98db17;hpb=4c3a000211bea046dd9506bae748576ecf6368fa;p=stockfish diff --git a/src/position.h b/src/position.h index af1e981c..06ef6ab1 100644 --- a/src/position.h +++ b/src/position.h @@ -41,6 +41,7 @@ struct CheckInfo { explicit CheckInfo(const Position&); Bitboard dcCandidates; + Bitboard pinned; Bitboard checkSq[8]; Square ksq; }; @@ -187,7 +188,6 @@ public: // Properties of moves bool pl_move_is_legal(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_passed_pawn_push(Move m) const; @@ -213,6 +213,7 @@ public: // Static exchange evaluation int see(Move m) const; int see_sign(Move m) const; + static int see_value(PieceType pt); // Accessing hash keys Key get_key() const; @@ -227,7 +228,7 @@ public: // Game termination checks bool is_mate() const; - bool is_draw() const; + template bool is_draw() const; // Number of plies from starting position int startpos_ply_counter() const; @@ -246,9 +247,8 @@ public: // Position consistency check, for debugging bool is_ok(int* failedStep = NULL) const; - // Static member functions - static void init_zobrist(); - static void init_piece_square_tables(); + // Global initialization + static void init(); private: @@ -256,8 +256,8 @@ private: void clear(); void detach(); void put_piece(Piece p, Square s); - void do_allow_oo(Color c); - void do_allow_ooo(Color c); + void set_castle_kingside(Color c); + void set_castle_queenside(Color c); bool set_castling_rights(char token); bool move_is_pl_slow(const Move m) const; @@ -405,16 +405,24 @@ inline Square Position::king_square(Color c) const { return pieceList[c][KING][0]; } -inline bool Position::can_castle_kingside(Color side) const { - return st->castleRights & (1+int(side)); +inline bool Position::can_castle_kingside(Color c) const { + return st->castleRights & (WHITE_OO << c); } -inline bool Position::can_castle_queenside(Color side) const { - return st->castleRights & (4+4*int(side)); +inline bool Position::can_castle_queenside(Color c) const { + return st->castleRights & (WHITE_OOO << c); } -inline bool Position::can_castle(Color side) const { - return can_castle_kingside(side) || can_castle_queenside(side); +inline bool Position::can_castle(Color c) const { + return st->castleRights & ((WHITE_OO | WHITE_OOO) << c); +} + +inline void Position::set_castle_kingside(Color c) { + st->castleRights |= (WHITE_OO << c); +} + +inline void Position::set_castle_queenside(Color c) { + st->castleRights |= (WHITE_OOO << c); } inline Square Position::initial_kr_square(Color c) const { @@ -466,6 +474,10 @@ inline bool Position::square_is_weak(Square s, Color c) const { return !(pieces(PAWN, opposite_color(c)) & attack_span_mask(c, s)); } +inline int Position::see_value(PieceType pt) { + return seeValues[pt]; +} + inline Key Position::get_key() const { return st->key; } @@ -537,12 +549,4 @@ inline int Position::thread() const { return threadID; } -inline void Position::do_allow_oo(Color c) { - st->castleRights |= (1 + int(c)); -} - -inline void Position::do_allow_ooo(Color c) { - st->castleRights |= (4 + 4*int(c)); -} - #endif // !defined(POSITION_H_INCLUDED)