// Number of plies since the last non-reversible move
int rule_50_counter() const;
+ int startpos_ply_counter() const;
+
// Other properties of the position
bool opposite_colored_bishops() const;
bool has_pawn_on_7th(Color c) const;
// Reset the gamePly variable to 0
void reset_game_ply();
+ void inc_startpos_ply_counter();
+
// Position consistency check, for debugging
bool is_ok(int* failedStep = NULL) const;
void put_piece(Piece p, Square s);
void allow_oo(Color c);
void allow_ooo(Color c);
+ bool set_castling_rights(char token);
// Helper functions for doing and undoing moves
void do_capture_move(Key& key, PieceType capture, Color them, Square to, bool ep);
int castleRightsMask[64];
StateInfo startState;
File initialKFile, initialKRFile, initialQRFile;
+ int startPosPlyCounter;
int threadID;
StateInfo* st;
}
inline bool Position::square_is_empty(Square s) const {
- return piece_on(s) == EMPTY;
+ return piece_on(s) == NO_PIECE;
}
inline bool Position::square_is_occupied(Square s) const {
return st->rule50;
}
+inline int Position::startpos_ply_counter() const {
+
+ return startPosPlyCounter;
+}
+
inline bool Position::opposite_colored_bishops() const {
return piece_count(WHITE, BISHOP) == 1
&& piece_count(BLACK, BISHOP) == 1
- && square_color(piece_list(WHITE, BISHOP, 0)) != square_color(piece_list(BLACK, BISHOP, 0));
+ && !same_color_squares(piece_list(WHITE, BISHOP, 0), piece_list(BLACK, BISHOP, 0));
}
inline bool Position::has_pawn_on_7th(Color c) const {