X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fposition.h;h=9aa4c44533cdf5f536b8232ea3a186245120b2e4;hp=c322ab99ac238105b4c483176db528c53ed25915;hb=ca677526452823d1fe89543762edb66684e7bdc7;hpb=90ce24b11ea080f923e1b5d37470e2ca98f4d98b diff --git a/src/position.h b/src/position.h index c322ab99..9aa4c445 100644 --- a/src/position.h +++ b/src/position.h @@ -22,25 +22,13 @@ #define POSITION_H_INCLUDED #include -#include // For offsetof() #include -#include // For std::unique_ptr +#include // For std::unique_ptr #include -#include #include "bitboard.h" #include "types.h" -class Position; -class Thread; - -namespace PSQT { - - extern Score psq[PIECE_NB][SQUARE_NB]; - - void init(); -} - /// StateInfo struct stores information needed to restore a Position object to /// its previous state when we retract a move. Whenever a move is made on the @@ -58,7 +46,7 @@ struct StateInfo { Score psq; Square epSquare; - // Not copied when making a move + // Not copied when making a move (will be recomputed anyhow) Key key; Bitboard checkersBB; Piece capturedPiece; @@ -76,9 +64,9 @@ typedef std::unique_ptr> StateListPtr; /// pieces, side to move, hash keys, castling info, etc. Important methods are /// do_move() and undo_move(), used by the search to update node info when /// traversing the search tree. +class Thread; class Position { - public: static void init(); @@ -144,9 +132,8 @@ public: void do_null_move(StateInfo& st); void undo_null_move(); - // Static exchange evaluation - Value see(Move m) const; - Value see_sign(Move m) const; + // Static Exchange Evaluation + bool see_ge(Move m, Value value) const; // Accessing hash keys Key key() const; @@ -161,7 +148,6 @@ public: bool is_chess960() const; Thread* this_thread() const; uint64_t nodes_searched() const; - void set_nodes_searched(uint64_t n); bool is_draw() const; int rule50_count() const; Score psq_score() const; @@ -354,10 +340,6 @@ inline uint64_t Position::nodes_searched() const { return nodes; } -inline void Position::set_nodes_searched(uint64_t n) { - nodes = n; -} - inline bool Position::opposite_bishops() const { return pieceCount[W_BISHOP] == 1 && pieceCount[B_BISHOP] == 1 @@ -369,15 +351,13 @@ inline bool Position::is_chess960() const { } inline bool Position::capture_or_promotion(Move m) const { - assert(is_ok(m)); return type_of(m) != NORMAL ? type_of(m) != CASTLING : !empty(to_sq(m)); } inline bool Position::capture(Move m) const { - - // Castling is encoded as "king captures the rook" assert(is_ok(m)); + // Castling is encoded as "king captures rook" return (!empty(to_sq(m)) && type_of(m) != CASTLING) || type_of(m) == ENPASSANT; } @@ -405,7 +385,7 @@ inline void Position::remove_piece(Piece pc, Square s) { // WARNING: This is not a reversible operation. If we remove a piece in // do_move() and then replace it in undo_move() we will put it at the end of // the list and not in its original place, it means index[] and pieceList[] - // are not guaranteed to be invariant to a do_move() + undo_move() sequence. + // are not invariant to a do_move() + undo_move() sequence. byTypeBB[ALL_PIECES] ^= s; byTypeBB[type_of(pc)] ^= s; byColorBB[color_of(pc)] ^= s;