X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fposition.h;h=676122c23d400efc87db144749d840323f7beb22;hp=71f821b2b3183144849d200242b4250743d71f57;hb=a04dcce6289c39ea497de67ab43306ca6d47319b;hpb=b638f6b0354ea124dc80e5e38189474d34141e2d diff --git a/src/position.h b/src/position.h index 71f821b2..676122c2 100644 --- a/src/position.h +++ b/src/position.h @@ -70,9 +70,9 @@ struct CheckInfo { CheckInfo(const Position&); - Square ksq; Bitboard dcCandidates; Bitboard checkSq[8]; + Square ksq; }; /// Castle rights, encoded as bit fields @@ -100,13 +100,13 @@ enum Phase { struct StateInfo { Key pawnKey, materialKey; - int castleRights, rule50, pliesFromNull; + int castleRights, rule50, ply, pliesFromNull; Square epSquare; Score value; Value npMaterial[2]; - Key key; PieceType capture; + Key key; Bitboard checkersBB; StateInfo* previous; }; @@ -139,6 +139,9 @@ class Position { friend class MaterialInfo; friend class EndgameFunctions; + Position(); // No default or copy c'tor allowed + Position(const Position& pos); + public: enum GamePhase { MidGame, @@ -146,9 +149,9 @@ public: }; // Constructors - Position(); - explicit Position(const Position& pos); - explicit Position(const std::string& fen); + explicit Position(int threadID); + Position(const Position& pos, int threadID); + Position(const std::string& fen, int threadID); // Text input/output void from_fen(const std::string& fen); @@ -228,9 +231,6 @@ public: // Information about pawns bool pawn_is_passed(Color c, Square s) const; - static bool pawn_is_passed(Bitboard theirPawns, Color c, Square s); - static bool pawn_is_isolated(Bitboard ourPawns, Square s); - static bool pawn_is_doubled(Bitboard ourPawns, Color c, Square s); // Weak squares bool square_is_weak(Square s, Color c) const; @@ -274,8 +274,10 @@ public: bool opposite_colored_bishops() const; bool has_pawn_on_7th(Color c) const; - // Reset the gamePly variable to 0 - void reset_game_ply(); + // Game ply information + int thread() const; + int ply() const; + void reset_ply(); // Position consistency check, for debugging bool is_ok(int* failedStep = NULL) const; @@ -293,7 +295,7 @@ private: void allow_ooo(Color c); // Helper functions for doing and undoing moves - void do_capture_move(Bitboard& key, PieceType capture, Color them, Square to, bool ep); + void do_capture_move(Key& key, PieceType capture, Color them, Square to, bool ep); void do_castle_move(Move m); void undo_castle_move(Move m); void find_checkers(); @@ -326,18 +328,17 @@ private: // Other info Color sideToMove; - int gamePly; Key history[MaxGameLength]; int castleRightsMask[64]; - File initialKFile, initialKRFile, initialQRFile; StateInfo startState; + File initialKFile, initialKRFile, initialQRFile; + int threadID; StateInfo* st; // Static variables static Key zobrist[2][8][64]; static Key zobEp[64]; static Key zobCastle[16]; - static Key zobMaterial[2][8][16]; static Key zobSideToMove; static Score PieceSquareTable[16][64]; static Key zobExclusion; @@ -412,8 +413,8 @@ inline int Position::piece_count(Color c, PieceType pt) const { return pieceCount[c][pt]; } -inline Square Position::piece_list(Color c, PieceType pt, int index) const { - return pieceList[c][pt][index]; +inline Square Position::piece_list(Color c, PieceType pt, int idx) const { + return pieceList[c][pt][idx]; } inline const Square* Position::piece_list_begin(Color c, PieceType pt) const { @@ -485,20 +486,8 @@ inline bool Position::pawn_is_passed(Color c, Square s) const { return !(pieces(PAWN, opposite_color(c)) & passed_pawn_mask(c, s)); } -inline bool Position::pawn_is_passed(Bitboard theirPawns, Color c, Square s) { - return !(theirPawns & passed_pawn_mask(c, s)); -} - -inline bool Position::pawn_is_isolated(Bitboard ourPawns, Square s) { - return !(ourPawns & neighboring_files_bb(s)); -} - -inline bool Position::pawn_is_doubled(Bitboard ourPawns, Color c, Square s) { - return ourPawns & squares_behind(c, s); -} - inline bool Position::square_is_weak(Square s, Color c) const { - return !(pieces(PAWN, c) & outpost_mask(opposite_color(c), s)); + return !(pieces(PAWN, opposite_color(c)) & attack_span_mask(c, s)); } inline Key Position::get_key() const { @@ -573,4 +562,12 @@ inline PieceType Position::captured_piece() const { return st->capture; } +inline int Position::thread() const { + return threadID; +} + +inline int Position::ply() const { + return st->ply; +} + #endif // !defined(POSITION_H_INCLUDED)